常用 、實用的 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)