1. 程式人生 > 實用技巧 >Docker操作命令實戰

Docker操作命令實戰

基本命令

docker version			# 顯示docker的版本資訊
docker info 			# 顯示docker的具體資訊, 包括映象和容器的數量
docker 命令 --help		   # 幫助命令

幫助文件地址: https://docs.docker.com/engine/reference/commandline/docker/


映象命令

docker images # 檢視本地主機上的映象
[chenkai@centos7 ~]$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        5.0       aa27923130e6   3 weeks ago   98.4MB

# 解釋
REPOSITORY			# 映象的倉庫源
TAG					# 標籤
IMAGE ID			# 映象ID
CREATED				# 建立時間
SIZE				# 大小

# 可選項
Options:
  -a, --all             Show all images (default hides intermediate images)					# 列出所有映象
      --digests         Show digests  # 格式化
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs  # 只顯示映象的ID

# 常用: 顯示所有映象的ID
docker images -aq
docker search # 搜尋映象
[chenkai@centos7 ~]$ docker search mysql

# 可選項, 通過條件過濾搜尋想要的
Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
--filter=STARS=3000		# 搜尋點贊數量大於3000的映象源(stars忽略大小寫)
[chenkai@centos7 ~]$ docker search mysql --filter=stars=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   10247     [OK]       
mariadb   MariaDB is a community-developed fork of MyS…   3785      [OK]
docker pull # 下載映象
[chenkai@centos7 ~]$ docker pull mysql		
Using default tag: latest				# 預設下載最新版本

# 通過 : (冒號) 指定版本
[chenkai@centos7 ~]$ docker pull mysql:5.7
5.7: Pulling from library/mysql

# docker會使用分層下載, 這是docker image的核心 (聯合檔案系統)
docker rmi # 刪除映象
[chenkai@centos7 ~]$ docker rmi ae0658fdbad5

# 刪除所有映象(-f[force] 表示強制)
[chenkai@centos7 ~]$ docker rmi -f  $(docker images -aq)
# 使用 xargs 命令實現刪除所有映象
[chenkai@centos7 ~]$ docker images -aq | xargs docker rmi -f

容器命令

有了映象之後才可以執行容器, 我們下載一個 centos 映象測試一下

docker pull centos
新建容器並啟動
docker run [可選引數] image
# 引數說明
--name="container_name"		# 容器名字,例如tomcat1, tomcat2, 用來區分容器
-i							# 保持容器執行
-d 							# 後臺守護方式執行
-it							# 使用互動方式執行, 進入容器檢視內容
-p							# 指定容器的埠,例如 8080:8080 前面是宿主機器埠
-P							# 大P, 隨機指定埠

# 測試, 啟動並進入容器
[chenkai@centos7 ~]$ docker run -it centos /bin/bash
[root@fc8b9409f4d8 /]# 
退出容器
[root@538f6e2e1f8a /]# exit
exit		# 直接容器停止, 並退出
[chenkai@centos7 ~]$ 
	
ctrl + p + q		# 退出之後, 容器仍在執行
[chenkai@centos7 ~]$ docker run -it centos /bin/bash
[root@62c27b2cc4b3 /]# 
[root@62c27b2cc4b3 /]# [chenkai@centos7 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
62c27b2cc4b3   centos    "/bin/bash"   13 seconds ago   Up 11 seconds             magical_galileo
docker ps # 檢視容器
# docker ps [可選引數]
-a			# 所有容器
-n			# 指定數量的容器資訊
-q			# 只顯示容器ID

# 檢視正在執行中的容器資訊
[chenkai@centos7 ~]$ docker ps

# 檢視所有容器資訊(包括已經停止的容器)
[chenkai@centos7 ~]$ docker ps -a

# 根據建立時間輸出最近的 n 個容器資訊(包括已經停止的容器)
[chenkai@centos7 ~]$ docker ps -n=3
docker rm # 刪除容器
docker rm 容器ID		# 不能刪除正在執行中的容器, 強制刪除需要加 -f 引數

# 刪除所有容器(-f[force] 表示強制)
[chenkai@centos7 ~]$ docker rm -f  $(docker ps -aq)
# 使用 xargs 命令實現刪除所有容器
[chenkai@centos7 ~]$ docker ps -aq | xargs docker rm -f
啟動和停止容器的操作
docker start 容器ID
docker restart 容器ID
docker stop 容器ID
docker kill 容器ID		# 強制停止容器
進入當前正在執行的容器
# 我們通常容器都是後臺方式執行的, 需要進入容器, 修改一些配置

# 方式1 (進入容器後, 開啟一個新的終端, 可以在裡面進行操作)
docker exec -it 容器ID /bin/bash

# 方式2 (進入容器正在執行的終端, 不會啟動新的程序)
docker attach 容器ID

常用其他命令

後臺啟動容器
# 命令: docker run -d 映象名
[chenkai@centos7 ~]$ docker run -d centos /bin/bash

# 問題: docker ps, 發現 centos 停止了
# 常見的坑, docker 容器使用後臺執行, 就必須要有一個前臺程序, docker 發現沒有應用, 就會自動停止
# nginx 容器啟動後, 發現自己沒有啟動服務, 就會立刻停止, 就是沒有程式了...
檢視日誌
# 檢視最後 10 條日誌, -f 是 follow, -t 是timestamps 時間戳, 也可以寫成 -tf
docker logs -f -t --tail 10 容器ID

# 動態顯示所有日誌
docker logs -f -t 容器ID

# demo
[chenkai@centos7 ~]$ docker run -d centos /bin/bash -c "while true; do echo kaichenkai; sleep 1; done"
0c36e7a02175d97c371b754295a93a34ebc0dc94cb20355a7bbc4ac0b2b7485a
[chenkai@centos7 ~]$ 
[chenkai@centos7 ~]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
0c36e7a02175   centos    "/bin/bash -c 'while…"   5 seconds ago   Up 4 seconds             trusting_aryabhata
[chenkai@centos7 ~]$ docker logs -f -t --tail 10 0c36
2020-12-13T13:32:52.898576651Z kaichenkai
2020-12-13T13:32:53.900576323Z kaichenkai
2020-12-13T13:32:54.902584598Z kaichenkai
2020-12-13T13:32:55.905237048Z kaichenkai
2020-12-13T13:32:56.907263964Z kaichenkai
2020-12-13T13:32:57.909457535Z kaichenkai
2020-12-13T13:32:58.911857015Z kaichenkai
2020-12-13T13:32:59.913973956Z kaichenkai
檢視容器中的程序資訊
# 命令: docker top 容器ID

# demo
[chenkai@centos7 Desktop]$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
0c36e7a02175   centos    "/bin/bash -c 'while…"   20 minutes ago   Up 20 minutes             trusting_aryabhata
[chenkai@centos7 Desktop]$ docker top 0c36
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5910                5889                0                   08:32               ?                   00:00:00            /bin/bash -c while true; do echo kaichenkai; sleep 1; done
root                9461                5910                0                   08:53               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
從容器內拷貝檔案到宿主機器上
docker cp 容器id:容器內路徑 宿主機器路徑

# demo (注意空格)
[chenkai@centos7 ~]$ docker cp fd17070accec:/test/test.py ~/
[chenkai@centos7 ~]$ ll
total 4
drwxr-xr-x. 5 chenkai chenkai 184 Dec 13 08:54 Desktop
drwxr-xr-x. 2 chenkai chenkai   6 Sep  8  2019 Documents
drwxr-xr-x. 2 chenkai chenkai  30 Dec 10 02:06 Downloads
drwxr-xr-x. 2 chenkai chenkai   6 Sep  8  2019 Music
drwxr-xr-x. 3 chenkai chenkai  44 Sep 11  2019 Pictures
drwxr-xr-x. 2 chenkai chenkai   6 Sep  8  2019 Public
drwxr-xr-x. 2 chenkai chenkai   6 Sep  8  2019 Templates
-rw-r--r--. 1 chenkai chenkai  13 Dec 13 09:30 test.py
drwxr-xr-x. 2 chenkai chenkai   6 Sep  8  2019 Videos

# 拷貝是一個手動過程, 需要使用掛載卷的方式來實現

完 ~