樹莓派應用Docker

Docker

本期經過在樹莓派上配置 Docker,來介紹 Docker 應用,歡迎來到「萬物皆可 Docker」的時代!linux

什麼是 Docker ?

Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 受權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 項目後來還加入了 Linux 基金會,併成立推進 開放容器聯盟(OCI)。docker

Docker 是一個開放源代碼軟件,是一個開放平臺,用於開發應用、交付(shipping)應用、運行應用。 Docker 容許用戶將基礎設施(Infrastructure)中的應用單獨分割出來,造成更小的顆粒(容器),從而提升交付軟件的速度。ubuntu

Docker虛擬化

Docker 容器與虛擬機相似,但兩者在原理上不一樣。容器是將操做系統層虛擬化,虛擬機則是虛擬化硬件,所以容器更具備便攜性、高效地利用服務器。 容器更多的用於表示 軟件的一個標準化單元。因爲容器的標準化,所以它能夠無視基礎設施(Infrastructure)的差別,部署到任何一個地方。另外,Docker 也爲容器提供更強的業界的隔離兼容。瀏覽器

這裏能夠請成龍大哥來代言 Docker,「我用完以後是什麼樣子,你用完以後就是什麼樣子」,相比洗髮水廣告代言來講,代言 Docker 能夠說是更能把握到精髓。bash

請成龍大哥來代言Docker

Docker 利用 Linux 核心中的資源分離機制,例如 cgroups,以及 Linux 核心名字空間(namespaces),來建立獨立的容器(containers)。這能夠在單一 Linux 實體下運做,避免引導一個虛擬機形成的額外負擔。Linux 核心對名字空間的支持徹底隔離了工做環境中應用程序的視野,包括行程樹、網絡、用戶ID與掛載文件系統,而核心的 cgroup 提供資源隔離,包括 CPU、存儲器、block I/O與網絡。從 0.9 版本起,Dockers 在使用抽象虛擬是經由 libvirt 的 LXC 與 systemd - nspawn 提供界面的基礎上,開始包括libcontainer 庫作爲以本身的方式開始直接使用由 Linux 核心提供的虛擬化的設施。服務器

Docker 腳本化安裝

#更新系統源
pi@raspberrypi:~ $ sudo apt-get update
命中:1 http://mirrors.aliyun.com/raspbian/raspbian buster InRelease
命中:2 http://packages.microsoft.com/repos/code stable InRelease
正在讀取軟件包列表... 完成

#腳本化安裝
pi@raspberrypi:~ $ sudo curl -sSL https://get.docker.com | sh
# Executing docker install script, commit: 7cae5f8b0decc17d6571f9f52eb840fbc13b2737
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sudo -E sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian buster stable" > /etc/apt/sources.list.d/docker.list
+ sudo -E sh -c apt-get update -qq >/dev/null
+ [ -n  ]
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null
+ [ -n 1 ]
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null
+ sudo -E sh -c docker version
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:57:27 2021
 OS/Arch:           linux/arm
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:55:25 2021
  OS/Arch:          linux/arm
  Experimental:     false
 containerd:
  Version:          1.4.8
  GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc:
  Version:          1.0.0
  GitCommit:        v1.0.0-0-g84113ee
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

測試 Docker

運行 hello-world 鏡像來測試 Docker 是否安裝成功。網絡

pi@raspberrypi:~ $ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2c7ed585684a: Pull complete
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm32v7)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Docker 經常使用命令

#查看 Docker 版本
docker -v
sudo docker pull 倉庫/鏡像:版本(留空的話默認爲 latest)
sudo docker run 加參數,用來建立容器
#查看運行容器
sudo docker ps
#查看全部下載的鏡像
sudo docker images
#進入容器終端
sudo docker exec -i -t ha /bin/bash
#實時查看10行的 ha 日誌
sudo docker logs -f -t --tail 10 ha
#重啓 systemctl 守護進程
sudo systemctl daemon-reload
#設置 Docker 開機啓動
sudo systemctl enable docker
#開啓 Docker 服務
sudo systemctl start docker

安裝 Docker 圖形化界面

下面簡要介紹安裝 Docker 圖形化界面 Portainer,經過圖形化界面對本地的 Dcoker 進行管理。app

#下載 Docker 圖形化界面 portainer
pi@raspberrypi:~ $ sudo docker pull portainer/portainer
Using default tag: latest
latest: Pulling from portainer/portainer
94cfa856b2b1: Pull complete
49d59ee0881a: Pull complete
1101392a3cc7: Pull complete
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for portainer/portainer:latest
docker.io/portainer/portainer:latest

#建立 portainer 容器
pi@raspberrypi:~ $ sudo docker volume create portainer_data
portainer_data

#運行 portainer
pi@raspberrypi:~ $ sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
fac6e689051b35dfb7993af096f116ae673be69252ac2661cf7b8a8ebbc0932d

安裝完成後就能夠經過訪問瀏覽器 http://樹莓派ip:9000 來登陸 portainer 界面。less

配置初始管理員帳號

鏈接 Docker 環境

Home 界面

Dashboard 界面

Containers 界面

結 語

後續我將介紹一些 Docker 應用的配置,經過 Docker 應用,咱們能夠將樹莓派實現多個應用共存,而不是過一段時間就刷一個新的系統鏡像,提升樹莓派的利用率。curl

Enjoy!

歡迎關注個人公衆號,持續更新中~~~

相關文章
相關標籤/搜索