Docker 學習之 Docker 常用命令

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站 遇見狂神說

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章