【Docker 系列】docker 學(xué)習(xí) 二,Docker 的常用命令

【Docker 系列】docker 學(xué)習(xí) 二,Docker 的常用命令

基本幫助命令

# 查看 docker 的基本版本信息
docker version

# 查看 docker 的系統(tǒng)信息,如鏡像和容器數(shù)量
docker info

# 查看某個(gè)命令的幫助
docker xx命令 --help

咱們可以看官方的幫助文檔:https://docs.docker.com/reference/

image

鏡像命令

docker images 查看鏡像

Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]

查看本機(jī)上的鏡像

# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
ubuntu            latest    1318b700e415   5 days ago     72.8MB
hello-world       latest    d1165f221234   4 months ago   13.3kB
關(guān)鍵字 解釋
REPOSITORY 倉(cāng)庫(kù)源
TAG 鏡像標(biāo)簽
IMAGE ID 鏡像 ID
CREATED 創(chuàng)建時(shí)間
SIZE 鏡像大小

可選參數(shù):

Options:
  -a, --all             顯示所有的鏡像
  -q, --quiet           只顯示鏡像ID

docker search 搜索鏡像

搜索 redis 為例

# docker search redis
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                            Redis is an open source key-value store that…   9734      [OK]
sameersbn/redis                                                                  83                   [OK]
grokzen/redis-cluster            Redis cluster 3.0, 3.2, 4.0, 5.0, 6.0, 6.2      78
rediscommander/redis-commander   Alpine image for redis-commander - Redis man…   63                   [OK]

加上參數(shù)

過(guò)濾 STARS 大于 2000 的 鏡像

# docker search redis -f STARS=2000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis     Redis is an open source key-value store that…   9734      [OK]

我們也可以在 dockerhub 上面直接在頁(yè)面上搜索鏡像

image

搜索到的結(jié)果和使用命令搜索的結(jié)果一致

image

docker pull 下載鏡像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

下載 redis 鏡像為例

# docker pull redis
Using default tag: latest           # 默認(rèn)拉最新版本
latest: Pulling from library/redis  # redis 的庫(kù)
33847f680f63: Pull complete         # 分層下載
26a746039521: Pull complete
18d87da94363: Pull complete
5e118a708802: Pull complete
ecf0dbe7c357: Pull complete
46f280ba52da: Pull complete
Digest: sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59                                 # 簽名
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest      # redis 真實(shí)下載地址

因此上述的下載操作
docker pull redis 與 docker pull docker.io/library/redis:latest 一致

dockerhub 上面 可以查看到 redis 支持的版本

image

我們下載一個(gè) 6 版本的 redis

# docker pull redis:6
6: Pulling from library/redis
Digest: sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59
Status: Downloaded newer image for redis:6
docker.io/library/redis:6

可以看到 下載 版本 6 的 redis 的時(shí)候,沒(méi)有分層下載了,說(shuō)明在上述看到的分層下載他們是共用的

查看剛才的安裝的鏡像

docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
redis             6         aa4d65e670d6   8 days ago     105MB
redis             latest    aa4d65e670d6   8 days ago     105MB
hello-world       latest    d1165f221234   4 months ago   13.3kB

docker rmi 刪除鏡像

  • 刪除單個(gè)鏡像
docker rmi -f 容器ID
  • 刪除多個(gè)鏡像
docker rmi -f 容器ID 容器ID 容器ID 
  • 刪除全部鏡像
docker rmi -f $(docker images -q)

容器命令

容器是基于鏡像創(chuàng)建的,我們來(lái)下載一個(gè) ubuntu 鏡像

docker pull ubuntu

docker run 新建并啟動(dòng)容器

docker run [參數(shù)] 鏡像名字 [指令] [參數(shù)]

常用參數(shù)說(shuō)明:

--name="xxx"    # 運(yùn)行容器的名字
-d              # 后臺(tái)方式運(yùn)行
-it             # 交互的方式運(yùn)行
-p              # 指定容器的端口號(hào) 例如 -p 6379:6380
                常用的操作有 -p 主機(jī)端口:容器端口
-P              # 隨機(jī)指定端口號(hào)

啟動(dòng) 容器里面的 ubuntu,通過(guò)主機(jī)名字,我們已經(jīng)可以看出來(lái)主機(jī)切換了

root@iZuf66y3tuzn4wp3h02t7pZ:~# docker run -it ubuntu /bin/bash
root@87fb04e2a6e7:/#

退出容器

  • 鍵入 exit命令,容器會(huì)退出
  • 使用快捷鍵 Ctrl + P + Q ,回到主機(jī),容器不會(huì)退出

docker ps 查看容器

docker ps [OPTIONS]

# docker ps -a
CONTAINER ID   IMAGE          COMMAND           CREATED          STATUS                      PORTS                     NAMES
73f951b70438   ubuntu         "/bin/bash"       2 minutes ago    Up 2 minutes                                          vigorous_buck
87fb04e2a6e7   ubuntu         "/bin/bash"       7 minutes ago    Exited (0) 3 minutes ago                              flamboyant_tu

可選參數(shù):

            # 查看正在運(yùn)行的容器
-a          # 查看運(yùn)行過(guò)的容器
-n=xx       # 查看運(yùn)行過(guò)的前 xx 個(gè)容器
-s          # 查看容器運(yùn)行的 大小
-q          # 查看容器 ID

docker rm 刪除容器

docker rm 容器ID      # 刪除未運(yùn)行的容器
docker rm -f 容器ID   # 強(qiáng)制刪除正在運(yùn)行的容器
docker rm -f $(docker ps -aq)       # 刪除所有容器
docker ps -aq | xargs docker rm     # 刪除所有容器

start,restart,stop,kill 開(kāi)啟,重啟,停止,強(qiáng)制停止容器

docker start 容器ID
docker restart 容器ID
docker stop 容器ID
docker kill 容器ID

常用其他命令

docker run -d 后臺(tái)啟動(dòng)容器

# 后臺(tái)啟動(dòng)一個(gè) ubuntu
docker run -d ubuntu

# 查看 運(yùn)行的容器
docker ps 
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES

發(fā)現(xiàn)沒(méi)有容器正在運(yùn)行

原因如下:

  • docker 后臺(tái)啟動(dòng)服務(wù),需要有一個(gè)前臺(tái)的進(jìn)程,否則docker 發(fā)現(xiàn)沒(méi)有應(yīng)用,則會(huì)將該服務(wù)停止

我們主動(dòng)加一個(gè)前臺(tái)進(jìn)程,看看效果

# 臨時(shí)加上一個(gè)前臺(tái)進(jìn)程
docker run -d ubuntu /bin/bash -c "while true;do echo xiaozhupeiqi;sleep 2;done"

# 查看正在運(yùn)行的容器
docker ps
CONTAINER ID   IMAGE     COMMAND
10ba0e687434   ubuntu    "/bin/bash -c 'while…" 

可以看出,docker ps 命令已經(jīng)可以查看到正在運(yùn)行的容器了,OK

docker logs 查看日志

docker logs [參數(shù)] 容器ID

Options:
  -f        # 和輸出保持一致
  -n        # 輸出最近的幾行
  -t        # 打印時(shí)間戳

查看上述容器的日志

# docker logs -tf -n 5 10ba0e687434
2021-08-01T08:02:51.380512218Z xiaozhupeiqi
2021-08-01T08:02:53.381606198Z xiaozhupeiqi
2021-08-01T08:02:55.382780869Z xiaozhupeiqi
2021-08-01T08:02:57.383890580Z xiaozhupeiqi
2021-08-01T08:02:59.384977473Z xiaozhupeiqi
2021-08-01T08:03:01.386430484Z xiaozhupeiqi

docker top 查看容器中進(jìn)程信息

docker top 容器ID

# docker top 10ba0e68743
UID                 PID                 PPID        CMD
root                11101               11073       bin/bash -c while true;do echo xiaozhupeiqi;sleep 2;done
root                11504               11101

docker inspect 查看鏡像元數(shù)據(jù)

docker inspect 容器 ID

輸出信息中省略了大量信息

[
    {
        "Id": "10ba0e6874341b2e2f002c22613a71223ca981dc36df0d1ea4ed3bb5a7a6c58e",
        "Created": "2021-08-01T07:57:52.725305443Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo xiaozhupeiqi;sleep 2;done"
        ],
        "State": {
            ...
        },
       ...
        "GraphDriver": {
      ...
        },
        "Mounts": [],
        "Config": {
            "Hostname": "10ba0e687434",
            ...
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash",
                "-c",
                "while true;do echo xiaozhupeiqi;sleep 2;done"
            ],
            "Image": "ubuntu",
            ...
        },
        "NetworkSettings": {
            ...
                }
    }
]

docker exec 進(jìn)入當(dāng)前運(yùn)行的容器

docker exec [參數(shù)] 容器 ID 指令[指令的參數(shù)]

# docker exec -it 10ba0e687434 /bin/bash
root@10ba0e687434:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:04 ?        00:00:00 /bin/bash -c while true;do echo xiaozhupeiqi;sleep 2;done
root       922     0  0 08:34 pts/0    00:00:00 /bin/bash
root       963     0  0 08:35 pts/1    00:00:00 /bin/bash
root       972     1  0 08:35 ?        00:00:00 sleep 2
root       973   963  0 08:35 pts/1    00:00:00 ps -ef

docker attach 進(jìn)入容器中正在執(zhí)行的程序

docker attach 容器ID

docker attach 10ba0e687434

docker exec 和 docker attach 的區(qū)別

  • docker exec

進(jìn)入容器,會(huì)新開(kāi)一個(gè)終端,可以正常操作

  • docker attach

進(jìn)入容器正在執(zhí)行的終端,不會(huì)啟動(dòng)新的終端

docker cp 將容器內(nèi)文件拷貝到主機(jī)內(nèi)

docker cp 容器ID:容器文件路徑 主機(jī)路徑

# 進(jìn)入容器,在容器的/home 目錄下 建一個(gè)文件 xiaomotong.go
 docker exec -it 10ba0e687434 /bin/bash
 cd /home/
 touch xiaomotong.go
# Ctrl + P + Q 退出容器

# 將容器內(nèi)文件拷貝到主機(jī)內(nèi)
docker cp 10ba0e687434:/home/xiaomotong.go ./

docker stats 查看 docker 內(nèi)服務(wù)內(nèi)存狀態(tài)

# docker stats
CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT    MEM %     NET I/O           BLOCK I/O     PIDS
2772a4050157   nginx1        0.00%     3.02MiB / 1.946GiB   0.15%     25.8kB / 33.1kB   0B / 8.19kB   3
10ba0e687434   loving_bohr   0.00%     4.07MiB / 1.946GiB   0.20%     810B / 0B         1.95MB / 0B   5

總結(jié)

關(guān)于 docker 的命令還是非常的多,大家可以嘗試按照下面的圖梳理了一下常用的命令列表,便于查詢,如下圖片來(lái)源于網(wǎng)絡(luò),僅供學(xué)習(xí)使用

image

參考資料:

docker docs

歡迎點(diǎn)贊,關(guān)注,收藏

朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力

image

好了,本次就到這里

技術(shù)是開(kāi)放的,我們的心態(tài),更應(yīng)是開(kāi)放的。擁抱變化,向陽(yáng)而生,努力向前行。

我是小魔童哪吒,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容