這裡介紹在 Ubuntu Linux 中安裝 Docker 的步驟、基本操作教學以及 hello world 程式。
目前主流的架構虛擬化技術,是將整個完整的作業系統包起來,放在 hypervisor 上面執行(例如 VirtualBox 與 VMWare),這種方式可以讓一台硬體主機同時執行多種不同的作業系統,但缺點就是執行多的作業系統需要較多的硬體資源。
以下我們以 Ubuntu 16.04.1 LTS 作為測試環境,示範如何安裝基本的 Docker 執行環境,以及 container 的操作方式。
在 Ubuntu Linux 中,使用 apt 安裝 Docker 比較方便:
sudo apt-get install docker.io
安裝好之後,查看一下 docker 服務是否有正常啟動:
service docker status
正常的話,應該可以看到綠色的狀態:
接著將自己的使用者帳號加入至 docker
群組:
sudo usermod -aG docker gtwang
登出再重新登入之後,就可以開始使用 Docker 了。首先查看 Docker 的版本資訊:
docker version
正常來說輸出會類似這樣:
Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.2 Git commit: 23cf638 Built: Tue, 27 Sep 2016 12:25:38 +1300 OS/Arch: linux/amd64 Server: Version: 1.12.1 API version: 1.24 Go version: go1.6.2 Git commit: 23cf638 Built: Tue, 27 Sep 2016 12:25:38 +1300 OS/Arch: linux/amd64
如果出現這樣的訊息,就表示有問題,通常是因為帳號沒有加入 docker
群組,權限不足的因素,只要按照上述的方式將帳號加入 docker
群組即可解決。
Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.2 Git commit: 23cf638 Built: Tue, 27 Sep 2016 12:25:38 +1300 OS/Arch: linux/amd64 Cannot connect to the Docker daemon. Is the docker daemon running on this host?
安裝好 Docker 之後,接著就要下載 container 的映像檔,在 Docker Hub 上面有許多公開的 container 映像檔,我們可以利用 docker
的 search
指令來尋找自己需要的 container 映像檔,例如搜尋 Ubuntu Linux 的 container 映像檔:
docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating s... 5056 [OK] ubuntu-upstart Upstart is an event-based replacement for ... 68 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 49 [OK] consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC sessi... 29 [OK] torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 27 [OK] ubuntu-debootstrap debootstrap --variant=minbase --components... 27 [OK] ioft/armhf-ubuntu [ABR] Ubuntu Docker images for the ARMv7(a... 19 [OK] nickistre/ubuntu-lamp LAMP server on Ubuntu 11 [OK] [略]
若要下載 container 映像檔,可以使用 pull
並且指定 container 的名稱:
docker pull ubuntu
Using default tag: latest latest: Pulling from library/ubuntu aed15891ba52: Pull complete 773ae8583d14: Pull complete d1d48771f782: Pull complete cd3d6cd6c0cf: Pull complete 8ff6f8a9120c: Pull complete Digest: sha256:35bc48a1ca97c3971611dc4662d08d131869daa692acb281c7e9e052924e38b1 Status: Downloaded newer image for ubuntu:latest
docker
的 images
指令可以列出目前系統上所有的 container 映像檔:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest e4415b714b62 10 hours ago 128.1 MB
有個 container 映像檔之後,我們就可以在 container 中執行程式了,以下是在 container 中執行程式的 hello world 範例:
docker run ubuntu /bin/echo 'Hello world'
Hello world
這裡我們選擇 ubuntu
這個剛下載下來的 container 作為程式執行的環境,在這個環境中執行 /bin/echo 'Hello world'
這個指令,這樣就是 Docker 最簡單的使用方式。
若要進入 Docker container 中的執行環境,可以使用 docker
的 run
指令,加上 -i
與 -t
參數進入互動式的操作介面並且配置 tty:
docker run -i -t ubuntu
若要離開 container 的互動式操作,則執行 exit
即可,使用上跟一般的 shell 差不多。
如果直接執行一個沒有下載的 container,Docker 也會自動從網路上下載映像檔來執行:
docker run -it centos
也就是說 pull
的步驟是可以省略的。
若要使用 Docker 來執行 daemon 類型的常駐程式,可以使用 -d
參數,讓整個 container 放在背景執行,例如:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
執行之後,會輸出一串很長的字串:
8764388588e5be54e4d04ff622f25753cab14a56c561523cdd58b03021dd8c6c
這個就是 container 的 ID,可用於後續的 container 管理。
我們可以使用 docker
的 ps
指令來查看目前所有正在執行的 container:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8764388588e5 ubuntu "/bin/sh -c 'while tr" 3 minutes ago Up 3 minutes boring_franklin
最後一個 NAMES
欄位是 container 執行個體的名稱,這個名稱是 Docker 自己隨機取的,在指令中若要對該 container 進行操作,可以用這個名稱來指定。
在 container 中的程式輸出訊息可以透過 Docker 的 logs
紀錄檔功能來查閱,例如查看 boring_franklin
這個 container 的記錄檔:
docker logs boring_franklin
hello world hello world hello world hello world hello world [略]
若要終止正在執行中的 container,可以使用 stop
指令:
docker stop boring_franklin
boring_franklin
以上就是 Ubuntu Linux 中最基本的 Docker 安裝與操作。