本文章內容:
Docker容器管理。
1. 容器創建
執行docker container create [–name busybox1] [-it] [--rm] busybox:latest #--name:給容器取的名,如果不取也可用"CONTAINER ID"識別,-i:啟動時要進入交互模式,-t:我們要進交互模式就要給它一個終端,--rm:容器一停止就自動刪除。busybox:latest鏡像默認啟動時運行sh,如果創建時沒加-it,那啟動時無法進交互模式
[root@localhost ~]# docker container create --name busybox1 -it busybox:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
fbd23bc76490ffbb30098303e8f2a87ca0e91892cdb2634e53a692ea87db0a0d
[root@localhost ~]# docker container ls -a #命令ls的選項-a才能顯示所有容器(包含沒在運行的)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fbd23bc76490 busybox:latest "sh" 23 seconds ago Created busybox1
2. 容器創建並啟動
執行docker container run [--name busybox1] [-it] [--rm] busybox:latest #--name:給容器取的名,如果不取也可用"CONTAINER ID"識別,-i:啟動時要進入交互模式,-t:我們要進交互模式就要給它一個終端,--rm:容器一停止就自動刪除。busybox:latest鏡像默認啟動時運行sh,如果創建時沒加-it,那啟動時無法進交互模式
[root@localhost ~]# docker container run --name busybox1 -it --rm busybox:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ #
執行docker container run [--name nginx1] [-d] nginx:stable-alpine #-d:nginx:stable-alpine鏡像默認啟動時運行nginx程序,如果不要讓它佔據前台可以加-d選項讓它運行於後台,如果不加-d並加-it,會看到它執行默認程序顯示的訊息
[root@localhost ~]# docker container run --name nginx1 -d nginx:stable-alpine
WARNING: IPv4 forwarding is disabled. Networking will not work.
7952032a42b716e9b3af431d8870ba2b8aa38f5ea36da634c2d54052b35c5691 #創建的容器
[root@localhost ~]# docker container ls --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7952032a42b716e9b3af431d8870ba2b8aa38f5ea36da634c2d54052b35c5691 nginx:stable-alpine "/docker-entrypoint.sh nginx -g 'daemon off;'" 4 minutes ago Up 4 minutes 80/tcp nginx1
#說明:COMMAND為"/docker-entrypoint.sh nginx -g 'daemon off;'",daemon off表示不要運行在後台,一個容器就是為了運行一個程序,如果這個程序跑後台去運行外面的系統會以為這個程序終止了,那容器就結束了。在容器中跑任何程序包括服務程序一定不要讓它在容器中運行在後台的,只要運行在後台一啟動就終止,千萬要記住這一點,因為它是唯一進程再說一遍,它是用來支撐一個容器的骨架(PID號為1)。
3. 容器創建並啟動並不運行默認程序
執行docker container run [--name nginx1] -it nginx:stable-alpine /bin/sh #啟動運行指定的/bin/sh要加-it才會進入交互模式
[root@localhost ~]# docker container run --name nginx1 -it nginx:stable-alpine /bin/sh
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ #
4. 容器啟動
執行docker container start -ia busybox1 #-i:附加容器的STDIN,-a:連接STDOUT/STDERR和轉發信號,如果容器默認運行的是sh,那加上-ia即可進入交互模式,如果默認運行的不是sh,那就沒必要加-ia了
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" 11 seconds ago Created busybox1
[root@localhost ~]# docker container start -ia busybox1
/ #
5. 容器重啟
執行docker container restart busybox1
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a6083fcf9a1 busybox "sh" 54 seconds ago Up Less than a second busybox1
[root@localhost ~]# docker container restart busybox1
busybox1
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a6083fcf9a1 busybox "sh" About a minute ago Up 6 seconds busybox1
6. 容器停止
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" About a minute ago Up 8 seconds busybox1
執行docker conatiner stop busybox1 #相當於發送-9訊號,如果沒有出什麼異常狀態一定不要強制終止,否則會導致數據丟失的(尤其是資料庫系統)
[root@localhost ~]# docker container stop busybox1
busybox1
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" 2 minutes ago Exited (137) 17 seconds ago busybox1
7. 容器強行停止
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" About a minute ago Up 8 seconds busybox1
執行docker container kill busybox1 #相當於發送-15訊號
[root@localhost ~]# docker container kill busybox1
busybox1
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" 3 minutes ago Exited (137) 3 seconds ago busybox1
8. 容器暫停
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" About a minute ago Up 8 seconds busybox1
執行docker container pause busybox1
[root@localhost ~]# docker container pause busybox1
busybox1
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" 4 minutes ago Up 19 seconds (Paused) busybox1
9. 容器取消暫停
[root@localhost ~]# docker container pause busybox1
busybox1
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" 4 minutes ago Up 19 seconds (Paused) busybox1
執行docker container unpause busybox1
[root@localhost ~]# docker container unpause busybox1
busybox1
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3753c0ad19e4 busybox:latest "sh" 6 minutes ago Up 2 minutes busybox1
10. 容器刪除
執行docker container rm busybox1 #容器必須為停止狀態才能刪除
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c8086b6151d busybox "sh" 12 seconds ago Exited (0) 4 seconds ago busybox1
[root@localhost ~]# docker container rm busybox1
busybox1
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11. 容器查看
11.1 查看運行中的容器
執行docker container ls
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e113315928d9 busybox "sh" About a minute ago Exited (0) About a minute ago busybox1
08ef90251924 nginx:stable-alpine "/docker-entrypoint.…" 28 minutes ago Up 42 seconds 80/tcp nginx1
11.2 查看全部的容器
執行docker container ls -a
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e113315928d9 busybox "sh" About a minute ago Exited (0) About a minute ago busybox1
08ef90251924 nginx:stable-alpine "/docker-entrypoint.…" 28 minutes ago Up 42 seconds 80/tcp nginx1
11.3 查看運行中的容器中的進程
執行docker container top busybox1
[root@localhost ~]# docker container top busybox1
UID PID PPID C STIME TTY TIME CMD
root 21591 21571 0 23:18 pts/0 00:00:00 sh
11.4 查看容器的詳細資訊
執行docker container inspect busybox1
[root@localhost ~]# docker container inspect busybox1
...
11.5 查看容器的日誌
執行docker container logs nginx1
[root@localhost ~]# docker container logs nginx1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
172.17.0.1 - - [21/Feb/2021:13:51:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-" #172.17.0.1有來訪問過
11.6 查看容器的環境變量
執行docker container exec busybox1 printenv
[root@localhost ~]# docker container run --name busybox1 -it -d busybox:latest #補充說明:如果創建時要改變環境變量,可以使用"-e"選項(參考14.5)
fac6ff806c2fd9ad15ec051462fdb37955505b06a77a0eac6bf8154394c54fa5
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fac6ff806c2f busybox:latest "sh" 5 seconds ago Up 4 seconds busybox1
[root@localhost ~]# docker container exec busybox1 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=fac6ff806c2f
HOME=/root
12. 在運行中的容器執行別的命令
執行docker container exec -it nginx1 /bin/sh
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d05bc46beada nginx:stable-alpine "/docker-entrypoint.…" 7 hours ago Up 7 hours 80/tcp nginx1 #當前有一個運行中nginx的容器
[root@localhost ~]# docker container exec -it nginx1 /bin/sh #使用exec在運行中的容器執行別的命令
/ # ps
PID USER TIME COMMAND
1 root 0:00 nginx: master process nginx -g daemon off; #PID號為1的進程,容器啟動時默認執行的程序
30 nginx 0:00 nginx: worker process
38 root 0:00 /bin/sh #使用exec在運行中的容器執行別的命令
44 root 0:00 ps
/ #
13. 連上運行中的容器
我們剝離了運行中的容器想再連上去,使用docker container attach。
執行docker container attach nginx1
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e113315928d9 busybox "sh" 23 hours ago Exited (0) 23 hours ago busybox1
08ef90251924 nginx:stable-alpine "/docker-entrypoint.…" 23 hours ago Up 23 hours 80/tcp nginx1 #運行在後台中的容器
[root@localhost ~]# docker container attach nginx1
14. 其它
14.1 docker info
顯示Docker系統的詳細資訊。
14.2 創建容器並設定主機名
提示:默認容器的主機名就是容器的ID號。
執行docker container run --name busybox1 -h b1.lab.com -it busybox:latest
[root@localhost ~]# docker container run --name busybox1 -h b1.lab.com -it busybox:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # hostname
b1.lab.com
/ #
14.3 創建容器並設定DNS伺服器及搜索域
默認創建容器後其設定的DNS及搜索域是宿主機上指定的DNS及搜索域。補充說明:搜索域就是當你給的不是FQDN格式的主機名時它自動補的後綴。
1. 查詢宿主機上指定的DNS
2. 創建容器沒指定DNS伺服器
執行docker container run --name busybox1 -it busybox:latest
[root@localhost ~]# docker container run --name busybox1 -it busybox:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
/ # cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.128.2 #默認指定的DNS及搜索域與宿主機上的一樣
/ #
3. 創建容器並設定DNS伺服器及搜索域
執行docker container run --name busybox1 --dns 1.1.1.1 --dns 8.8.8.8 --dns-search lab.com -it busybox:latest
[root@localhost ~]# docker container run --name busybox1 --dns 1.1.1.1 --dns 8.8.8.8 --dns-search lab.com -it busybox:latest
/ # cat /etc/resolv.conf
search lab.com
nameserver 1.1.1.1
nameserver 8.8.8.8
/ #
14.4 創建容器並設定hosts解析紀錄
執行docker container run --name busybox1 --add-host web1.lab.com:1.2.3.4 -it busybox:latest
[root@localhost ~]# docker container run --name busybox1 --add-host web1.lab.com:1.2.3.4 -it busybox:latest
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
1.2.3.4 web1.lab.com
172.17.0.2 85305d05f674
14.5 創建容器並改變環境變量
執行docker container run --name busybox1 -it -d -e HOST=test.lab.com busybox:latest
[root@localhost ~]# docker container run --name busybox1 --rm busybox:latest printenv #先查看busybox:latest鏡像的環境變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e3212b814ea4
HOME=/root
[root@localhost ~]# docker container run --name busybox1 -it -d -e HOSTNAME=test.lab.com busybox:latest #創建並運行容器,並改變環境變量HOST的值
cff51232c2f2a47a7d173a3672917c4e9b82d06c8a89be3eda1de33d9109c29d
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cff51232c2f2 busybox:latest "sh" 6 seconds ago Up 5 seconds busybox1
[root@localhost ~]# docker container exec busybox1 printenv #查看busybox1容器的環境變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=test.lab.com
HOME=/root