Docker常用的命令

谢友海發表於2024-09-01

本章將和大家分享Docker中常用的命令。廢話不多說,下面我們直接進入主題。

1、配置映象加速源

拉取映象慢,配置載入映象地址:

建立一個或修改 /etc/docker/daemon.json 檔案(如果不存在則建立):

vim /etc/docker/daemon.json

並新增或修改registry-mirrors欄位,例如:

{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://docker.chenby.cn",
        "https://dockerpull.com",
        "https://dockerhub.jobcher.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub.uuuadc.top",
        "https://mirror.baidubce.com",
        "https://mirror.ccs.tencentyun.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://hus-mirror.c.163.com",
        "https://dockerhub.azk8s.cn",
        "https://registry.cn-hangzhou.aliyuncs.com"
    ]
}

或者

{
    "registry-mirrors": [
        "https://hub.uuuadc.top",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu",
        "https://docker.ckyl.me",
        "https://docker.awsl9527.cn"
    ]
}

或者

{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.1panel.live"
    ]
}

配置映象加速源:

儲存檔案並退出編輯器。

重新載入配置檔案並重啟Docker服務以使配置生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

驗證配置:

重啟Docker服務後,可以透過執行docker info命令來檢視Docker的配置資訊,確認Registry Mirrors部分是否已包含你設定的映象加速器地址。

注意:映象加速源可能會隨時間而變化。

2、拉取映象

此處以拉取 nginx 映象為例:

docker pull nginx

3、首次啟動映象

docker run -d -p 8090:80 --name nginx-container nginx:latest

示例:

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    5ef79149e0ec   10 days ago   188MB
[root@localhost ~]# docker run -d -p 8090:80 --name nginx-container nginx:latest
96a5d9d2505293a05e1d07640f308576856b60147393c0764078f4d3163f8214
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                   NAMES
96a5d9d25052   nginx:latest   "/docker-entrypoint.…"   19 seconds ago   Up 18 seconds   0.0.0.0:8090->80/tcp, :::8090->80/tcp   nginx-container
[root@localhost ~]#

引數說明:

  • -d:這個選項表示以“分離模式”執行容器,即容器在後臺執行。
  • -p 8090:80 :這個選項用於對映容器的埠到宿主機的埠。在這個例子中,它將容器內的80埠(Nginx預設的服務埠)對映到宿主機的8090埠。這意味著,當你訪問宿主機的8090埠時,實際上是在訪問容器中Nginx服務的80埠。
  • --name nginx-container:這個選項用於指定容器的名稱,這裡是nginx-container。為容器指定一個名稱後,你可以透過該名稱來引用容器,而不是使用容器ID或隨機生成的名稱。
  • nginx:latest:這指定了要使用的Docker映象,這裡是Nginx的最新版本(標記為latest)。
  • -it:結合使用 -i(互動式操作)和 -t(分配一個偽終端)。通常用於需要互動式會話的容器。
  • -p:釋出容器埠到宿主機。格式為 <宿主機埠>:<容器埠> 或 <宿主機埠>:<容器埠>/協議>。注意 -p 後面直接跟埠對映,並不直接指定 IP 地址。IP 地址通常在 --network 引數中透過自定義網路來指定容器的網路配置。
  • -v:掛載卷,格式為 <宿主機路徑>:<容器內路徑>:<選項>。<選項> 是可選的,比如 ro 表示只讀。
  • --volumes-from:從指定的容器掛載卷。這允許你從另一個容器繼承卷設定。

檢視日誌:

docker logs 96a5d9d25052(容器的ID)

示例:

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                                   NAMES
96a5d9d25052   nginx:latest   "/docker-entrypoint.…"   19 seconds ago   Up 18 seconds   0.0.0.0:8090->80/tcp, :::8090->80/tcp   nginx-container
[root@localhost ~]# docker logs 96a5d9d25052

容器啟動成功後我們透過瀏覽器來訪問一下nginx服務:

可以發現,nginx執行成功了。

4、inspect命令

docker inspect 命令是 Docker 中的一個非常有用的命令,它允許你獲取 Docker 物件的詳細資訊,包括容器(containers)、映象(images)、網路(networks)、卷(volumes)和外掛(plugins)等。當你需要深入瞭解 Docker 物件的配置和狀態時,這個命令就非常有用了。
對於容器(containers),docker inspect 命令可以顯示容器的配置和狀態資訊,如網路設定、環境變數、掛載的卷、啟動命令等。

基本語法:

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • NAME|ID:指定要檢查的 Docker 物件的名稱或ID。你可以指定多個物件,用空格分隔。
  • [OPTIONS]:可以使用的選項,但大多數情況下,直接執行 docker inspect 而不帶任何選項就足夠了。

示例:

檢視單個容器的詳細資訊

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED       STATUS          PORTS                                   NAMES
96a5d9d25052   nginx:latest   "/docker-entrypoint.…"   5 hours ago   Up 16 minutes   0.0.0.0:8090->80/tcp, :::8090->80/tcp   nginx-container
[root@localhost ~]# docker inspect nginx-container

這裡 nginx-container 是你想要檢視的容器的名稱或ID。

5、啟動已存在容器

docker start <容器 ID/Name>
docker restart 容器id1 [容器id2] [...]  #重啟

6、檢視docker容器列表

docker ps  #檢視正在執行的容器列表
docker ps –a #所有容器列表(包含存活和退出容器)

7、停止容器

docker stop <容器 ID/Name>

8、進入容器

docker exec -it 容器ID或容器別名稱 /bin/bash

從這個容器退出,不會導致容器的停止,推薦大家使用

9、檢視容器的某些程序PID

doker top name

10、刪除容器

docker stop <container_id_or_name> #刪除前先停止容器
docker rm <container_id_or_name>  #刪除容器
docker rm $(docker ps -aq)  #一次性刪除所有已經停止的容器

11、檢視映象列表

docker images

12、啟動所有容器

docker start $(docker ps -a -q)

13、修改Docker容器內的檔案

1)使用docker exec命令和文字編輯器

如果你只是想臨時修改容器內的檔案,並且容器內有可用的文字編輯器(如vi、nano等),你可以使用docker exec命令來啟動一個互動式shell會話,並在這個會話中編輯檔案。例如:

docker exec -it <container_id_or_name> bash  
# 然後,在bash會話中,你可以使用任何可用的編輯器來修改檔案  
# 例如:vi /path/to/your/file  
# 修改完成後,使用:wq退出vi

2)使用docker cp命令

如果你想要從宿主機上直接修改檔案,然後將其複製回容器內,可以使用docker cp命令。首先,從容器中將檔案複製到宿主機:

docker cp <container_id_or_name>:/path/to/container/file /path/to/host/directory

然後,在宿主機上修改檔案,修改完成後,再將檔案複製回容器:

docker cp /path/to/host/directory/file <container_id_or_name>:/path/to/container/file

14、建立容器時指定IP

Docker建立容器時預設採用bridge網路,自動分配ip,不允許自己指定。

在實際部署中,我們需要指定容器ip,不允許其自動分配ip,尤其是搭建叢集時,固定ip是必須的。

我們可以建立自己的bridge網路,例如:mynet,建立容器的時候指定網路為mynet並指定ip即可。

15、檢視網路模式

docker network ls

16、建立一個新的bridge網路

docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 dockercompose

17、檢視網路資訊

docker network inspect dockercompose

18、建立容器並指定容器ip

docker run -it --name nginx-second --network=dockercompose --ip 172.19.0.6 nginx
# 驗證是否固定
docker insepect 容器ID | grep "IpAddress"
"SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.19.0.6",

19、檢視資料卷相關資訊

docker inspect -f {{.Volumes}} 容器名

至此本文就全部介紹完了,希望對您有所幫助!

相關文章