1. 程式人生 > 其它 >常用 、實用的 Docker命令

常用 、實用的 Docker命令

Docker簡介

Docker是一個開源的應用容器引擎,讓開發者可以打包應用及依賴包到一個可移植的映象中,然後釋出到任何流行的Linux或Windows機器上。使用Docker可以更方便地打包、測試以及部署應用程式。

Docker環境安裝

  • 安裝yum-utils;
    yum install -y yum-utils device-mapper-persistent-data lvm2
  • 為yum源新增docker倉庫位置;
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安裝docker服務;
    yum install docker-ce
  • 啟動docker服務。
    systemctl start docker

Docker映象常用命令

搜尋映象

docker search java

下載映象

docker pull java:8

檢視映象版本

由於docker search命令只能查找出是否有該映象,不能找到該映象支援的版本,所以我們需要通過Docker Hub來搜尋支援的版本。

  • 進入Docker Hub的官網,地址:https://hub.docker.com

  • 然後搜尋需要的映象:

  • 檢視映象支援的版本:

  • 進行映象的下載操作:

docker pull mysql:8.0.25
 # 直接使用 docker pull mysql 會下載最新版本

列出映象

docker images

刪除映象

  • 指定名稱刪除映象:
    docker rmi java:8
  • 指定名稱刪除映象(強制):
    docker rmi -f java:8
  • 刪除所有沒有引用的映象:
docker rmi `docker images | grep none | awk '{print $3}'`
  • 強制刪除所有映象:
    docker rmi -f $(docker images)

打包映象

# -t 表示指定映象倉庫名稱/映象名稱:映象標籤 .表示使用當前目錄下的Dockerfile檔案
docker build -t hwkj/hwkj-docker:.0.0.1-SNAPSHOT .

推送映象

# 登入Docker Hub
docker login
# 給本地映象打標籤為遠端倉庫名稱
docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT
# 推送到遠端倉庫
docker push macrodocker/mall-admin:1.0-SNAPSHOT

Docker容器常用命令

新建並啟動容器

docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.17.0
  • -p:將宿主機和容器埠進行對映,格式為:宿主機埠:容器埠;
  • --name:指定容器名稱,之後可以通過容器名稱來操作容器;
  • -e:設定容器的環境變數,這裡設定的是時區;
  • -v:將宿主機上的檔案掛載到宿主機上,格式為:宿主機檔案目錄:容器檔案目錄;
  • -d:表示容器以後臺方式執行。

列出容器

  • 列出執行中的容器:
    docker ps

  • 列出所有容器:
    docker ps -a

停止容器

注意:$ContainerName表示容器名稱,$ContainerId表示容器ID,可以使用容器名稱的命令,基本也支援使用容器ID,比如下面的停止容器命令。

docker stop $ContainerName(or $ContainerId)
例如:

docker stop nginx
#或者
docker stop c5f5d5125587

強制停止容器

docker kill $ContainerName

啟動容器

docker start $ContainerName

進入容器

  • 先查詢出容器的pid:
    docker inspect --format "{{.State.Pid}}" $ContainerName
  • 根據容器的pid進入容器:
    nsenter --target "$pid" --mount --uts --ipc --net --pid

刪除容器

  • 刪除指定容器:
    docker rm $ContainerName

  • 按名稱萬用字元刪除容器,比如刪除以名稱mall-開頭的容器:

docker rm `docker ps -a | grep mall-* | awk '{print $1}'`
  • 強制刪除所有容器;
    docker rm -f $(docker ps -a -q)

檢視容器的日誌

  • 檢視容器產生的全部日誌:
    docker logs $ContainerName

  • 動態檢視容器產生的日誌:
    docker logs -f $ContainerName

檢視容器的IP地址

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName

修改容器的啟動方式

# 將容器啟動方式改為always
docker container update --restart=always $ContainerName

同步宿主機時間到容器

docker cp /etc/localtime $ContainerName:/etc/

指定容器時區

docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-d nginx:1.17.0

檢視容器資源佔用狀況

  • 檢視指定容器資源佔用狀況,比如cpu、記憶體、網路、io狀態:
    docker stats $ContainerName

  • 檢視所有容器資源佔用情況:
    docker stats -a

檢視容器磁碟使用情況

docker system df

執行容器內部命令

docker exec -it $ContainerName /bin/bash

指定賬號進入容器內部

# 使用root賬號進入容器內部
docker exec -it --user root $ContainerName /bin/bash

檢視所有網路

docker network ls

[root@local-linux ~]# docker network ls
NETWORK ID          NAME                     DRIVER              SCOPE
59b309a5c12f        bridge                   bridge              local
ef34fe69992b        host                     host                local
a65be030c632        none     

建立外部網路

docker network create -d bridge my-bridge-network

指定容器網路

docker run -p 80:80 --name nginx \
--network my-bridge-network \
-d nginx:1.17.0

修改映象的存放位置

  • 檢視Docker映象的存放位置:
    docker info | grep "Docker Root Dir"

  • 關閉Docker服務:
    systemctl stop docker

  • 先將原映象目錄移動到目標目錄:
    mv /var/lib/docker /mydata/docker

  • 建立軟連線:
    ln -s /mydata/docker /var/lib/docker

再次檢視可以發現映象存放位置已經更改。

Docker容器清理

檢視Docker佔用的磁碟空間情況:

docker system df

刪除所有關閉的容器:

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

刪除所有dangling映象(沒有Tag的映象):
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
刪除所有dangling資料卷(即無用的 volume):

docker volume rm $(docker volume ls -qf dangling=true)