docker 常用指令
啟動容器
列出容器
執行容器
連上容器
容器 log
停止容器
移除容器
登入 docker registry
容器版號
容器資訊
儲存容器
載入容器
docker 影像
docker 執行程式
run
啟動一個容器有很多可以說明的。
1 $ docker run -ti alpine:3.11 sh
上面只是單純的啟動一個可以執行的shell的container。
容器名字 –name 1 $ docker run -ti --name shell alpine:3.11 sh
指定容器的名字為 shell
。
背景服務容器 –detach (-d) 1 $ docker run -d --name my-nginx nginx
執行一個持續在背景執行的container。 沒有指定時,會在執行的程式停止後,容器也停止。 或是容器將執行程式的輸出直到程式結束。 也會讓目前的 shell 被佔用住。
對應容器 port –public (-p) 1 $ docker run -d --name my-nginx -p 80:80 nginx
讓容器的port 80對應到host的port 80。提供服務。
容器環境變 –env (-e) 1 $ docker run -d -e http_proxy=http://proxy.hinet.net:80 nginx
在容器中設定環境變數 http_proxy 為 http://proxy.hinet.net:80 。
容器存儲 –volume (-v) 1 $ docker run -d -v $HOME /nginx/conf.d:/etc/nginx/conf.d nginx
將 $HOME/nginx/conf.d 目錄對應到容器內的 /etc/nginx/conf.d 目錄。 讓容器可以存取到在host中 ~/nginx/conf.d 目錄的容器。 存儲是需要花費時間再介紹的。
容器hostname –hostname (-h) 1 $ docker run -d --hostname nginx nginx
指定容器的 hostname 為 nginx 。
ps 列出目前已經啟動的容器.
1 2 3 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c22def86c59 sameersbn/squid:3.5.27-2 "/sbin/entrypoint.sh" 4 weeks ago Up 3 days 0.0.0.0:8080->3128/tcp squid
以上面的例子中,我們可以看到已經啟動的容器的一些資訊。CONTAINER ID
當我們啟動一個容器在背景時,也會輸出。 一般我們可以用containerid的前面三四個字元來代表容器,也可以用 container name 代表容器。 我們在要處理和容器進行進一步的處理時,都會需要知道這個代表容器的代號。
exec 一般我們需要進入容器的 shell 可以使用。 或是需要在容器內執行特定的工作。
1 $ docker exec -ti squid sh
這兒我們在容器名字為 nginx 內執行 shell 。-ti
代表兩個參數, t
代表有 tty。i
代表是互動的。
squid
是容器的名稱。在上一個例子中 7cc2
也可以代表, 所以可以將 squid
取代為 7cc2
來代表我們要處理的容器。
attach 一般我使用的是 exec 來進入容器。 attach後如果要結束也會讓原來的容器也結束掉。 不過特定情況還是有這樣的需求。
logs 當我們的容器執行在背景,我們只得到了containerid的輸出。 原來啟動容器的結果有需要觀察時就需要使用 logs
的指令。
stop 我們也可以暫時讓容器停止。
rm 當我們不需要容器時,就可以移除容器,讓佔用的資源回收。 所以停止的容器仍然佔用一定的資源。 當我們重新啟動容器時,原來的資源就會連接到容器。
我們也可以用 -f
的參數將沒有停止的容器強止移除。
容器移除後,才是容器生命週期正式的結束。所有和容器相關的資源也就再也找不回來了。
登入 docker
當沒有指定 host 及 port 時,會連上官方的 registry。 一般情況是當我們想將我們的影像上傳的雲時才需要登入。 也可以登入私有的 registry ,來將影像上傳。
版號 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ docker version Client: Docker Engine - Community Version: 18.09.2 API version: 1.39 Go version: go1.10.8 Git commit: 6247962 Built: Sun Feb 10 04:12:39 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.2 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 6247962 Built: Sun Feb 10 04:13:06 2019 OS/Arch: linux/amd64 Experimental: false
資訊 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 $ docker info Containers: 3 Running: 0 Paused: 0 Stopped: 3 Images: 8 Server Version: 18.09.2 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce runc version: 09c8266bf2fcf9519a651b04ae54c967b9ab86ec init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 4.9.125-linuxkit Operating System: Docker for Mac OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 1.952GiB Name: linuxkit-025000000001 ID: C4Q7:5M7E:RWTV:5EQQ:K4RB:ONNA:C5YT:LDTN:JWTZ:6FX4:CRY2:LD5H Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 26 Goroutines: 53 System Time: 2020-10-16T08:02:10.6325398Z EventsListeners: 2 HTTP Proxy: gateway.docker.internal:3128 HTTPS Proxy: gateway.docker.internal:3129 Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine
影像 1 2 3 4 5 6 7 8 9 10 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker dind b3893e48cf28 4 weeks ago 232MB ha3in1 0.1 68add1c30858 4 weeks ago 30.1MB haproxy 2.2 8e202ffaa1a8 5 weeks ago 93.3MB haproxy latest 8e202ffaa1a8 5 weeks ago 93.3MB haproxy 2.2-alpine a633e308ec29 5 weeks ago 24.6MB python 3-alpine f4df7f234e59 4 months ago 78.9MB haproxy 2.1.4 6600fae04efd 5 months ago 92.4MB alpine 3.11 f70734b6a266 5 months ago 5.61MB
影像也需要花不少時間才可以講清楚的概念。
top 1 2 3 $ docker top cadvisor UID PID PPID C STIME TTY TIME CMD root 4251 4115 7 Oct13 ? 05:43:53 /usr/bin/cadvisor -logtostderr
容器中執行的程式清單。
未來 docker 可以說明的主題還有很多,以後再說明。