Docker 常用命令
幫助命令
docker version # 顯示docker的版本信息
docker info # 顯示docker的系統信息,包括鏡像和容器的數量
docker 命令 --help # 幫助命令
幫助文檔的地址:https://docs.docker.com/engine/reference/commandline
鏡像命令
docker images 查看所有本地主機上的鏡像
[root@zhujixiang /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 5 months ago 13.3kB
# 解釋
REPOSITORY 鏡像的倉庫源
TAG 鏡像的標籤
IMAGE ID 鏡像的id
CREATED 鏡像創建的時間
SIZE 鏡像的大小
# 可選項
-a, --all # 列出所有鏡像
--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 # 只顯示鏡像的id
docker search 搜索鏡像
[root@zhujixiang /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9582 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3482 [OK]
# 可選項,通過收藏來過濾
--filter=STARS=3000 搜索出來的鏡像就是STARS大於3000的
[root@zhujixiang /]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9582 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3482 [OK]
[root@zhujixiang /]# docker search mysql --filter=STARS=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9582 [OK]
docker pull 下載鏡像
[root@zhujixiang /]# docker pull mysql
Using default tag: latest # 如果不寫tag,默認就是latest
latest: Pulling from library/mysql
afb6ec6fdc1c: Pull complete # 分層下載,docker image的核心 聯合文件系統
0bdc5971ba40: Pull complete
97ae94a2c729: Pull complete
f777521d340e: Pull complete
1393ff7fc871: Pull complete
a499b89994d9: Pull complete
7ebe8eefbafe: Pull complete
597069368ef1: Pull complete
ce39a5501878: Pull complete
7d545bca14bf: Pull complete
211e5bb2ae7b: Pull complete
5914e537c077: Pull complete
Digest: sha256:a31a277d8d39450220c722c1302a345c84206e7fd4cdb619e7face046e89031d # 簽名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真實地址
# 等價於它
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下載
[root@zhujixiang /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
afb6ec6fdc1c: Already exists
0bdc5971ba40: Already exists
97ae94a2c729: Already exists
f777521d340e: Already exists
1393ff7fc871: Already exists
a499b89994d9: Already exists
7ebe8eefbafe: Already exists
4eec965ae405: Pull complete
a531a782d709: Pull complete
270aeddb45e3: Pull complete
b25569b61008: Pull complete
Digest: sha256:d16d9ef7a4ecb29efcd1ba46d5a82bda3c28bd18c0f1e3b86ba54816211e1ac4
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi 刪除鏡像
[root@zhujixiang /]# docker rmi -f 鏡像id # 刪除指定鏡像
[root@zhujixiang /]# docker rmi -f 鏡像id 鏡像id 鏡像id # 刪除多個鏡像
[root@zhujixiang /]# docker rmi -f $(docker images -aq) # 刪除全部鏡像
容器命令
說明:有了鏡像纔可以創建容器,linux,下載一個centos鏡像來測試學習
docker pull centos
新建容器並啓動
docker run [可選參數] image
# 參數說明
--name="Name" 容器名字 01,02,用來區分容器
-d 後臺方式運行
-it 使用交互方式運行,進入容器查看內容
-P 指定容器的端口 -P 8080:8080
-P ip:主機端口:容器端口
-P 主機端口:容器端口 (常用)
-P 容器端口
容器端口
-p 隨機指定端口
# 測試,啓動並進入容器
[root@zhujixiang /]# docker run -it centos /bin/bash
[root@09ef60558872 /]# ls # 查看容器內的centos,基礎版本,很多命令是不完善的!
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# 從容器中退回主機
[root@09ef60558872 /]# exit
exit
[root@zhujixiang /]# ls
bin containerd.io-1.2.6-3.3.el7.x86_64.rpm etc lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
列出所有運行的容器
# docker ps 命令
# 列出當前正在運行的容器
-a # 列出當前正在運行的容器 + 帶出歷史運行的容器
-n=?# 顯示最近創建的容器
-q # 只顯示容器的編號
[root@zhujixiang /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@zhujixiang /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09ef60558872 centos "/bin/bash" 3 minutes ago Exited (0) About a minute ago tender_sutherland
63701fd75c09 bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago peaceful_pare
退出容器
exit # 直接停止容器並退出
Ctrl + P + Q # 容器不停止退出
刪除容器
docker rm 容器id # 刪除指定的容器,並不能刪除正在運行的容器,如果強制刪除 rm -f
docker rm -f $(docker ps -aq) # 刪除所有容器
docker ps -a -q|xargs docker rm # 刪除所有容器
啓動和停止容器的操作
docker start 容器id # 啓動容器
docker restart 容器id # 重啓容器
docker stop 容器id # 停止當前容器
docker kill 容器id # 強制停止當前容器
常用其他命令
後臺啓動容器
# 命令 docker run -d 鏡像名
[root@zhujixiang /]# docker run -d centos
# 問題:docker ps,發現centos停止了
# 常見的坑,docker 容器使用後臺運行,就必須要有一個前臺進程,docker發現沒有應用,就會自動停止
# nginx,容器啓動後,發現自己沒有提供服務,就會立刻停止,就是沒有程序了
查看日誌
docker logs -f -t --tail 容器,沒有日誌
# 自己編寫一段shell腳本
[root@zhujixiang /]# docker run -d centos /bin/sh -c "while true;do echo zhujixiang;sleep 1;done"
[root@zhujixiang /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
993b604570cb centos "/bin/sh -c 'while t…" 4 seconds ago Up 3 seconds
# 顯示日誌
-tf # 顯示全部
--tail number # 顯示日誌條數
[root@zhujixiang /]# docker logs -tf --tail 10 容器id
查看容器中的進程信息
# 命令 docker top 容器id
[root@zhujixiang /]# docker top 993b604570cb
UID PID PPID C STIME TTY
root 2935 2919 0 18:23 ?
root 3414 2935 0 18:29 ?
pid:當前進程id
ppid:父進程id
查看鏡像的元數據
# 命令
docker inspect 容器id
進入當前正在運行的容器
# 我們通常容器都是在後臺方式運行的,需要進入容器,修改一些配置
# 命令
docker exec -it 容器id bashShell
# 測試
[root@zhujixiang /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
993b604570cb centos "/bin/sh -c 'while t…" 19 minutes ago Up 19 minutes sleepy_ptolemy
[root@zhujixiang /]# docker exec -it 993b604570cb /bin/bash
[root@993b604570cb /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@993b604570cb /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:23 ? 00:00:00 /bin/sh -c while true;do echo zhujixiang;sleep 1;done
root 1185 0 0 10:42 pts/0 00:00:00 /bin/bash
root 1217 1 0 10:43 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sl
root 1218 1185 0 10:43 pts/0 00:00:00 ps -ef
# 方式二
docker attach 容器id
# 測試
[root@zhujixiang /]# docker attach 993b604570cb
正在執行當前的代碼...
# docker exec # 進入容器後開啓一個新的終端,可以在裏面操作(常用)
# docker attach # 進入容器正在執行的終端,不會啓動新的進程
從容器內拷貝文件到主機上
docker cp 容器id:容器內路徑 目的主機路徑
# 查看當前主機目錄
[root@zhujixiang home]# ls
zhujixiang.py
[root@zhujixiang home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a11d6ea40b19 centos "/bin/bash" About a minute ago Up About a minute xenodochial_colden
# 進入docker容器內部
[root@zhujixiang home]# docker attach a11d6ea40b19
[root@a11d6ea40b19 /]# cd /home
[root@a11d6ea40b19 home]# ls
# 在容器內新建一個文件
[root@a11d6ea40b19 home]# touch test.py
[root@a11d6ea40b19 home]# ls
test.py
[root@a11d6ea40b19 home]# exit
exit
[root@zhujixiang home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@zhujixiang home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a11d6ea40b19 centos "/bin/bash" 2 minutes ago Exited (0) 12 seconds ago xenodochial_colden
# 將這個文件拷貝出來到主機上
[root@zhujixiang home]# docker cp a11d6ea40b19:/home/test.py /home
[root@zhujixiang home]# ls
test.py zhujixiang.py
# 拷貝是一個手動過程,未來我們使用 -v 卷的技術,可以實現
小結
attach Attach to a running container # 當前 shell 下 attach 連接指定運行容器
build Build an image from a Dockerfile # 通過 Dockerfile 定製鏡像
commit Create a new image from a container changes # 提交當前容器爲鏡像
cp Copy files/folders from the containers filesystem to the host path
# 從容器中拷貝指定文件或者目錄到宿主機中
create Create a new container # 創建一個新的容器,同 run ,但不啓動容器
diff Inspect changes on a container's filesystem # 查看 docker 容器變化
events Get real time events from the server # 從 docker 服務獲取容器實時事件
exec Run a command in an existing container # 在已存在的容器上運行命令
export Stream the contents of a container as a tar archive
# 導出容器的內存劉作爲一個 tar 歸檔文件[對應 import]
history Show the history of an image # 展示一個鏡像形成的歷史
images List images # 列出系統當前鏡像
import Create a new filesystem image from the contents of a tarball
# 從 tar 包中的內容創建一個新的文件系統鏡像[對應 export]
info Display system-wide information # 顯示系統相關信息
inspect Return low-level information on a container # 查看容器詳細信息
kill kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 從一個 tar 包中加載一個鏡像[對應 save]
login Register or Login to the docker registry server # 註冊或者登陸一個 docker 源服務器
logout Log out from a Docker registry server # 從當前 Docker registry 退出
logs Fetch the logs of a container # 輸出當前容器日誌信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
# 查看映射端口對應的容器內部源端口
pause Pause all processes within a container # 暫停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server
# 從 docker 鏡像源服務器拉去指定鏡像或者庫鏡像
push Push an image or a repository to the docker registry server
# 推送指定鏡像或者庫鏡像至 docker 源服務器
restart Restart a running container # 重啓運行的容器
rm Remove one or more container # 移除一個或者多個容器
rmi Remove one or more images
# 移除一個或者多個鏡像[無容器使用該鏡像纔可刪除,否則需刪除相關容器纔可繼續或 -f 強制刪除]
run Run a command in a new container # 創建一個新的容器並運行一個命令
save Save an image to a tar archive # 保存一個鏡像爲一個 tar 包[對應 load]
search Search for an image on the Dcoker Hub # 在 docker hub 中搜索鏡像
start Start a stoppde containers # 啓動容器
stop Stop a running containers # 停止容器
tag Tag an image into a repositry # 給源中鏡像打標籤
top Lookup the running processes of a container # 查看容器中運行的進程信息
unpause Unpause a paused container # 取消暫停容器
version Show the docker version information # 查看 docker 版本號
wait Block until a container stops, then print its exit code
# 截取容器停止時的退出狀態值
PS:我只是一個剛剛開始學習 Docker 的小白,學習源自B站 遇見狂神說