Docker 常用命令

Docker 常用命令詳細教程

目錄


1. Docker 基礎(chǔ)命令

1.1 查看 Docker 版本

docker --version
docker version

說明:

  • --version: 顯示簡短版本信息
  • version: 顯示詳細的客戶端和服務(wù)端版本信息

1.2 查看 Docker 系統(tǒng)信息

docker info

說明: 顯示 Docker 系統(tǒng)的詳細信息,包括容器數(shù)量、鏡像數(shù)量、存儲驅(qū)動、網(wǎng)絡(luò)配置等。

1.3 查看幫助信息

docker --help
docker <command> --help

示例:

docker run --help  # 查看 run 命令的幫助

2. 鏡像管理命令

2.1 搜索鏡像

docker search <鏡像名>
docker search --filter stars=100 <鏡像名>
docker search --limit 10 <鏡像名>

示例:

docker search nginx
docker search --filter stars=500 python

2.2 拉取鏡像

docker pull <鏡像名>[:標簽]

示例:

docker pull nginx
docker pull nginx:1.21.6
docker pull mysql:8.0
docker pull redis:alpine

2.3 查看本地鏡像

docker images
docker image ls
docker images -a  # 顯示所有鏡像(包括中間層)
docker images -q  # 只顯示鏡像ID
docker images --no-trunc  # 顯示完整的鏡像ID

示例:

docker images
docker images nginx
docker images --filter "dangling=true"  # 查看懸空鏡像

2.4 刪除鏡像

docker rmi <鏡像ID/鏡像名>
docker rmi -f <鏡像ID>  # 強制刪除
docker image prune  # 刪除所有懸空鏡像
docker image prune -a  # 刪除所有未使用的鏡像

示例:

docker rmi nginx:latest
docker rmi $(docker images -q)  # 刪除所有鏡像

2.5 構(gòu)建鏡像

docker build -t <鏡像名>[:標簽] <Dockerfile路徑>
docker build -t <鏡像名> .
docker build --no-cache -t <鏡像名> .
docker build --build-arg VERSION=1.0 -t <鏡像名> .

參數(shù)說明:

  • -t, --tag: 指定鏡像名稱和標簽
  • -f, --file: 指定 Dockerfile 文件
  • --no-cache: 不使用緩存
  • --build-arg: 設(shè)置構(gòu)建參數(shù)

示例:

docker build -t myapp:1.0 .
docker build -t myapp:latest -f Dockerfile.prod .

2.6 保存和加載鏡像

# 導出鏡像到文件
docker save -o <文件名.tar> <鏡像名>
docker save <鏡像名> > <文件名.tar>

# 從文件加載鏡像
docker load -i <文件名.tar>
docker load < <文件名.tar>

示例:

docker save -o nginx.tar nginx:latest
docker load -i nginx.tar

2.7 標記鏡像

docker tag <源鏡像>[:標簽] <目標鏡像>[:標簽]

示例:

docker tag nginx:latest myregistry.com/nginx:v1
docker tag myapp:latest myapp:1.0.0

2.8 查看鏡像歷史

docker history <鏡像名>
docker history --no-trunc <鏡像名>

2.9 查看鏡像詳細信息

docker inspect <鏡像名/鏡像ID>
docker image inspect <鏡像名>

示例:

docker inspect nginx:latest
docker inspect --format='{{.Config.ExposedPorts}}' nginx

3. 容器管理命令

3.1 創(chuàng)建并運行容器

docker run [選項] <鏡像名> [命令]

常用參數(shù):

  • -d, --detach: 后臺運行
  • -it: 交互式終端
  • --name: 指定容器名稱
  • -p: 端口映射(主機端口:容器端口)
  • -P: 隨機映射端口
  • -v: 掛載數(shù)據(jù)卷(主機路徑:容器路徑)
  • -e: 設(shè)置環(huán)境變量
  • --rm: 容器停止后自動刪除
  • --restart: 重啟策略(no/on-failure/always/unless-stopped)
  • --network: 指定網(wǎng)絡(luò)
  • -m, --memory: 限制內(nèi)存
  • --cpus: 限制CPU

示例:

# 基本運行
docker run nginx

# 后臺運行并命名
docker run -d --name my-nginx nginx

# 端口映射
docker run -d -p 8080:80 --name web nginx

# 多端口映射
docker run -d -p 8080:80 -p 8443:443 nginx

# 掛載數(shù)據(jù)卷
docker run -d -v /host/path:/container/path nginx
docker run -d -v my-volume:/data nginx

# 設(shè)置環(huán)境變量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql

# 交互式運行
docker run -it ubuntu /bin/bash

# 容器停止后自動刪除
docker run --rm -it ubuntu /bin/bash

# 設(shè)置重啟策略
docker run -d --restart=always nginx

# 資源限制
docker run -d --memory="512m" --cpus="1.5" nginx

# 綜合示例
docker run -d \
  --name my-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v mysql-data:/var/lib/mysql \
  --restart=always \
  mysql:8.0

3.2 查看容器

# 查看運行中的容器
docker ps
docker container ls

# 查看所有容器(包括停止的)
docker ps -a
docker container ls -a

# 只顯示容器ID
docker ps -q

# 查看最近創(chuàng)建的容器
docker ps -l

# 顯示容器大小
docker ps -s

參數(shù)說明:

  • -a, --all: 顯示所有容器
  • -q, --quiet: 只顯示容器ID
  • -l, --latest: 顯示最近創(chuàng)建的容器
  • -s, --size: 顯示容器大小

示例:

docker ps
docker ps -a
docker ps --filter "status=exited"
docker ps --filter "name=nginx"

3.3 啟動和停止容器

# 啟動容器
docker start <容器ID/容器名>

# 停止容器
docker stop <容器ID/容器名>

# 重啟容器
docker restart <容器ID/容器名>

# 強制停止容器
docker kill <容器ID/容器名>

# 暫停容器
docker pause <容器ID/容器名>

# 恢復容器
docker unpause <容器ID/容器名>

示例:

docker start my-nginx
docker stop my-nginx
docker restart my-nginx

# 批量操作
docker start $(docker ps -a -q)  # 啟動所有容器
docker stop $(docker ps -q)  # 停止所有運行中的容器

3.4 刪除容器

docker rm <容器ID/容器名>
docker rm -f <容器ID>  # 強制刪除運行中的容器
docker rm -v <容器ID>  # 刪除容器并刪除關(guān)聯(lián)的匿名卷
docker container prune  # 刪除所有停止的容器

示例:

docker rm my-nginx
docker rm -f my-nginx
docker rm $(docker ps -a -q)  # 刪除所有容器
docker rm $(docker ps -a -q -f status=exited)  # 刪除所有已停止的容器

3.5 進入容器

# 執(zhí)行命令(推薦)
docker exec -it <容器ID/容器名> /bin/bash
docker exec -it <容器ID/容器名> sh

# 附加到容器(不推薦)
docker attach <容器ID/容器名>

區(qū)別說明:

  • exec: 在容器中啟動新進程,退出不會停止容器
  • attach: 附加到容器主進程,退出會停止容器

示例:

docker exec -it my-nginx /bin/bash
docker exec -it my-mysql mysql -uroot -p
docker exec my-nginx ls /etc/nginx

3.6 查看容器日志

docker logs <容器ID/容器名>
docker logs -f <容器ID>  # 實時查看日志
docker logs --tail 100 <容器ID>  # 查看最后100行
docker logs --since "2024-01-01" <容器ID>  # 查看指定時間后的日志
docker logs -t <容器ID>  # 顯示時間戳

參數(shù)說明:

  • -f, --follow: 實時跟蹤日志
  • --tail: 顯示最后N行
  • --since: 顯示指定時間后的日志
  • --until: 顯示指定時間前的日志
  • -t, --timestamps: 顯示時間戳

示例:

docker logs my-nginx
docker logs -f --tail 50 my-nginx
docker logs --since "2024-10-20T00:00:00" my-nginx

3.7 查看容器詳細信息

docker inspect <容器ID/容器名>
docker inspect --format='{{.NetworkSettings.IPAddress}}' <容器名>

示例:

docker inspect my-nginx
docker inspect --format='{{.State.Status}}' my-nginx
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx

3.8 查看容器進程

docker top <容器ID/容器名>

3.9 查看容器資源使用

docker stats  # 查看所有容器的資源使用
docker stats <容器ID>  # 查看指定容器
docker stats --no-stream  # 只顯示一次

3.10 復制文件

# 從容器復制到主機
docker cp <容器ID>:<容器路徑> <主機路徑>

# 從主機復制到容器
docker cp <主機路徑> <容器ID>:<容器路徑>

示例:

docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
docker cp ./app.conf my-nginx:/etc/nginx/conf.d/

3.11 導出和導入容器

# 導出容器為tar文件
docker export <容器ID> > <文件名.tar>
docker export -o <文件名.tar> <容器ID>

# 導入容器快照為鏡像
docker import <文件名.tar> <鏡像名>[:標簽]

3.12 容器提交為鏡像

docker commit [選項] <容器ID> <鏡像名>[:標簽]

參數(shù)說明:

  • -a, --author: 作者信息
  • -m, --message: 提交信息

示例:

docker commit my-nginx my-nginx-custom:v1
docker commit -a "author" -m "add custom config" my-nginx my-nginx:v2

3.13 容器重命名

docker rename <舊容器名> <新容器名>

3.14 更新容器配置

docker update [選項] <容器ID>

示例:

docker update --restart=always my-nginx
docker update --memory="1g" --cpus="2" my-nginx

4. 網(wǎng)絡(luò)管理命令

4.1 查看網(wǎng)絡(luò)

docker network ls
docker network ls --filter driver=bridge

4.2 創(chuàng)建網(wǎng)絡(luò)

docker network create <網(wǎng)絡(luò)名>
docker network create --driver <驅(qū)動類型> <網(wǎng)絡(luò)名>
docker network create --subnet <子網(wǎng)> <網(wǎng)絡(luò)名>

驅(qū)動類型:

  • bridge: 橋接網(wǎng)絡(luò)(默認)
  • host: 主機網(wǎng)絡(luò)
  • overlay: 覆蓋網(wǎng)絡(luò)(Swarm)
  • macvlan: MAC地址網(wǎng)絡(luò)
  • none: 無網(wǎng)絡(luò)

示例:

docker network create my-network
docker network create --driver bridge my-bridge
docker network create --subnet=172.18.0.0/16 my-net
docker network create --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1 custom-net

4.3 查看網(wǎng)絡(luò)詳情

docker network inspect <網(wǎng)絡(luò)名>

4.4 連接和斷開網(wǎng)絡(luò)

# 連接容器到網(wǎng)絡(luò)
docker network connect <網(wǎng)絡(luò)名> <容器名>

# 斷開容器網(wǎng)絡(luò)連接
docker network disconnect <網(wǎng)絡(luò)名> <容器名>

4.5 刪除網(wǎng)絡(luò)

docker network rm <網(wǎng)絡(luò)名>
docker network prune  # 刪除所有未使用的網(wǎng)絡(luò)

4.6 創(chuàng)建容器時指定網(wǎng)絡(luò)

docker run -d --network <網(wǎng)絡(luò)名> --name <容器名> <鏡像名>

示例:

docker run -d --network my-network --name web nginx
docker run -d --network host --name app myapp

5. 數(shù)據(jù)卷管理命令

5.1 查看數(shù)據(jù)卷

docker volume ls
docker volume ls -q
docker volume ls --filter dangling=true

5.2 創(chuàng)建數(shù)據(jù)卷

docker volume create <卷名>
docker volume create --driver <驅(qū)動> <卷名>

示例:

docker volume create my-volume
docker volume create --driver local my-data

5.3 查看數(shù)據(jù)卷詳情

docker volume inspect <卷名>

5.4 刪除數(shù)據(jù)卷

docker volume rm <卷名>
docker volume prune  # 刪除所有未使用的數(shù)據(jù)卷

5.5 使用數(shù)據(jù)卷

# 命名卷
docker run -d -v <卷名>:<容器路徑> <鏡像名>

# 綁定掛載
docker run -d -v <主機路徑>:<容器路徑> <鏡像名>

# 只讀掛載
docker run -d -v <卷名>:<容器路徑>:ro <鏡像名>

示例:

docker run -d -v mysql-data:/var/lib/mysql mysql
docker run -d -v /host/data:/app/data nginx
docker run -d -v config:/etc/nginx:ro nginx

6. Docker Compose 命令

6.1 啟動服務(wù)

docker-compose up
docker-compose up -d  # 后臺運行
docker-compose up --build  # 構(gòu)建并啟動
docker-compose up --force-recreate  # 強制重新創(chuàng)建容器
docker-compose up --scale <服務(wù)名>=<數(shù)量>  # 擴展服務(wù)

6.2 停止服務(wù)

docker-compose down  # 停止并刪除容器
docker-compose down -v  # 同時刪除數(shù)據(jù)卷
docker-compose down --rmi all  # 同時刪除鏡像
docker-compose stop  # 僅停止容器

6.3 查看服務(wù)

docker-compose ps
docker-compose ps -a

6.4 查看日志

docker-compose logs
docker-compose logs -f  # 實時查看
docker-compose logs -f <服務(wù)名>  # 查看指定服務(wù)
docker-compose logs --tail=100

6.5 執(zhí)行命令

docker-compose exec <服務(wù)名> <命令>
docker-compose exec -it <服務(wù)名> /bin/bash

6.6 構(gòu)建服務(wù)

docker-compose build
docker-compose build --no-cache
docker-compose build <服務(wù)名>

6.7 其他命令

docker-compose restart  # 重啟服務(wù)
docker-compose pause  # 暫停服務(wù)
docker-compose unpause  # 恢復服務(wù)
docker-compose top  # 查看進程
docker-compose config  # 驗證配置文件
docker-compose pull  # 拉取鏡像
docker-compose push  # 推送鏡像

7. 系統(tǒng)管理命令

7.1 清理系統(tǒng)

# 清理未使用的數(shù)據(jù)
docker system prune

# 清理所有未使用的數(shù)據(jù)(包括未使用的鏡像)
docker system prune -a

# 清理所有數(shù)據(jù)(包括數(shù)據(jù)卷)
docker system prune -a --volumes

# 強制清理(不提示確認)
docker system prune -f

7.2 查看磁盤使用

docker system df
docker system df -v  # 詳細信息

7.3 查看系統(tǒng)事件

docker events
docker events --since '2024-10-20'
docker events --filter 'type=container'

7.4 登錄和登出鏡像倉庫

# 登錄 Docker Hub
docker login

# 登錄私有倉庫
docker login <倉庫地址>

# 登出
docker logout

7.5 推送和拉取鏡像

# 推送鏡像
docker push <鏡像名>[:標簽]

# 拉取鏡像
docker pull <鏡像名>[:標簽]

8. 實用技巧與最佳實踐

8.1 批量操作

停止所有容器

docker stop $(docker ps -q)

刪除所有容器

docker rm $(docker ps -a -q)

刪除所有鏡像

docker rmi $(docker images -q)

刪除所有未使用的資源

docker system prune -a --volumes

刪除懸空鏡像

docker rmi $(docker images -f "dangling=true" -q)

刪除已停止的容器

docker rm $(docker ps -a -q -f status=exited)

8.2 常用組合命令

構(gòu)建并運行

docker build -t myapp . && docker run -d -p 8080:80 myapp

停止并刪除容器

docker stop my-nginx && docker rm my-nginx

查看容器IP地址

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <容器名>

查看容器環(huán)境變量

docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' <容器名>

8.3 常用 Dockerfile 指令

# 基礎(chǔ)鏡像
FROM nginx:alpine

# 維護者信息
LABEL maintainer="your@email.com"

# 設(shè)置工作目錄
WORKDIR /app

# 復制文件
COPY . /app
ADD archive.tar.gz /app

# 運行命令
RUN apk add --no-cache python3

# 設(shè)置環(huán)境變量
ENV NODE_ENV=production

# 暴露端口
EXPOSE 80 443

# 掛載點
VOLUME ["/data"]

# 設(shè)置用戶
USER nginx

# 容器啟動命令
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["nginx"]

8.4 常用 docker-compose.yml 模板

version: '3.8'

services:
  web:
    image: nginx:alpine
    container_name: web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    networks:
      - app-network
    restart: always
    environment:
      - TZ=Asia/Shanghai
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    networks:
      - app-network
    restart: always

  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    networks:
      - app-network
    restart: always

networks:
  app-network:
    driver: bridge

volumes:
  mysql-data:
  redis-data:

8.5 性能優(yōu)化技巧

1. 減小鏡像體積 - 使用多階段構(gòu)建

FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

2. 使用 .dockerignore

node_modules
npm-debug.log
.git
.gitignore
README.md
.env
*.md

3. 合并 RUN 命令

# 推薦
RUN apt-get update && \
    apt-get install -y nginx && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

8.6 安全最佳實踐

1. 使用非 root 用戶

RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

2. 限制容器資源

docker run -d \
  --memory="512m" \
  --memory-swap="1g" \
  --cpus="1.0" \
  --pids-limit=100 \
  nginx

3. 只讀文件系統(tǒng)

docker run -d --read-only --tmpfs /tmp nginx

8.7 常用調(diào)試命令

# 查看容器詳細信息
docker inspect <容器名>

# 查看容器日志
docker logs -f --tail 100 <容器名>

# 進入容器調(diào)試
docker exec -it <容器名> /bin/sh

# 查看容器進程
docker top <容器名>

# 查看資源使用
docker stats <容器名>

# 查看端口映射
docker port <容器名>

# 查看容器文件系統(tǒng)變化
docker diff <容器名>

8.8 數(shù)據(jù)備份與恢復

備份容器數(shù)據(jù)

# 備份數(shù)據(jù)卷
docker run --rm -v <卷名>:/data -v $(pwd):/backup ubuntu tar czf /backup/backup.tar.gz /data

# 備份容器
docker export <容器名> > container-backup.tar

恢復數(shù)據(jù)

# 恢復數(shù)據(jù)卷
docker run --rm -v <卷名>:/data -v $(pwd):/backup ubuntu tar xzf /backup/backup.tar.gz -C /

# 恢復容器
docker import container-backup.tar <鏡像名>

附錄:快速參考

鏡像命令快查

命令 說明
docker pull 拉取鏡像
docker build 構(gòu)建鏡像
docker images 查看鏡像
docker rmi 刪除鏡像
docker tag 標記鏡像
docker save 保存鏡像
docker load 加載鏡像

容器命令快查

命令 說明
docker run 創(chuàng)建并運行容器
docker ps 查看容器
docker start 啟動容器
docker stop 停止容器
docker restart 重啟容器
docker rm 刪除容器
docker exec 進入容器
docker logs 查看日志

常用參數(shù)快查

參數(shù) 說明
-d 后臺運行
-it 交互式終端
-p 端口映射
-v 數(shù)據(jù)卷掛載
-e 環(huán)境變量
--name 容器名稱
--restart 重啟策略
--network 網(wǎng)絡(luò)設(shè)置

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

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

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