Docker操作命令實戰
阿新 • • 發佈:2020-12-14
基本命令
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
# 拷貝是一個手動過程, 需要使用掛載卷的方式來實現
完 ~