#记录下docker中的常规命令,以及使用方式,方便以后使用和观看#

一、Docker 基础概念

什么是Docker?

Docker 是一个容器化平台,可以将应用程序及其依赖打包到轻量级、可移植的容器中,在任何环境中都能一致运行。

核心概念

概念

说明

类比

镜像(Image)

只读模板,包含运行应用所需的一切

类(Class)

容器(Container)

镜像的运行实例

对象(Object)

仓库(Registry)

存储和分发镜像的地方

应用商店

Dockerfile

构建镜像的脚本文件

构建说明书

Volume

数据卷,持久化数据存储

移动硬盘

Network

容器网络,容器间通信

虚拟局域网

二、Docker 安装与配置

1. 安装 Docker
# Ubuntu/Debian
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

# CentOS/RHEL
sudo yum install docker
sudo systemctl start docker
sudo systemctl enable docker

# 一键安装脚本(Linux)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Windows/Mac
# 下载 Docker Desktop 安装包
# https://www.docker.com/products/docker-desktop
2. 验证安装
# 检查版本
docker --version
docker-compose --version
docker info

# 运行测试容器
docker run hello-world
3. 配置 Docker(可选)
# 添加用户到docker组(避免每次用sudo)
sudo usermod -aG docker $USER
# 需要重新登录生效

# 配置镜像加速器(中国用户)
# 创建或修改 /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
sudo systemctl restart docker

 三、Docker 基础命令

1. 镜像管理
# 搜索镜像
docker search nginx
docker search --filter stars=1000 nginx
docker search --filter is-official=true nginx

# 拉取镜像
docker pull nginx                    # 拉取最新版
docker pull nginx:1.21              # 拉取指定版本
docker pull alpine:latest           # 小体积Linux镜像
docker pull mysql:8.0
docker pull redis:alpine

# 列出镜像
docker images                        # 本地镜像列表
docker image ls                      # 同上
docker images -a                     # 包括中间层镜像
docker images --no-trunc             # 完整ID显示
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
docker images -q                     # 只显示镜像ID

# 镜像详细信息
docker image inspect nginx           # 查看镜像详细信息
docker image history nginx           # 查看镜像构建历史
docker image inspect nginx | grep -i size  # 查看镜像大小

# 删除镜像
docker rmi nginx                    # 删除镜像
docker rmi nginx:1.21               # 删除指定版本
docker rmi $(docker images -q)      # 删除所有镜像
docker image prune                  # 删除悬空镜像(无标签)
docker image prune -a               # 删除所有未使用的镜像
docker rmi -f nginx                 # 强制删除(即使有容器)

# 镜像标签
docker tag nginx mynginx:v1         # 给镜像打标签
docker tag nginx:latest myrepo/nginx:prod  # 推送到仓库前打标签

# 导出导入
docker save nginx > nginx.tar       # 导出镜像为tar文件
docker load < nginx.tar             # 从tar文件导入镜像
docker save -o nginx.tar nginx      # 另一种写法

# 保存为压缩包
docker save nginx:latest | gzip > nginx.tar.gz
2. 容器管理
# 运行容器
docker run nginx                     # 运行容器
docker run -d nginx                  # 后台运行
docker run -it nginx bash           # 交互式运行
docker run --name mynginx nginx     # 指定容器名称
docker run --rm nginx               # 退出后自动删除
docker run -p 8080:80 nginx         # 端口映射
docker run -v /data:/app nginx      # 挂载数据卷
docker run -e ENV=value nginx       # 设置环境变量

# 容器列表
docker ps                           # 运行中的容器
docker ps -a                        # 所有容器(包括已停止)
docker ps -l                        # 最近创建的容器
docker ps -n 5                      # 最近创建的5个容器
docker ps -q                        # 只显示容器ID
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
docker ps --filter status=running   # 过滤运行中的
docker ps --filter status=exited    # 过滤已停止的
docker ps --filter name=mynginx     # 按名称过滤
docker ps -f ancestor=nginx         # 使用nginx镜像的容器

# 启动/停止/重启容器
docker start mynginx                # 启动容器
docker stop mynginx                 # 停止容器
docker restart mynginx              # 重启容器
docker kill mynginx                 # 强制停止
docker pause mynginx                # 暂停容器
docker unpause mynginx              # 恢复容器
docker wait mynginx                 # 等待容器停止

# 进入容器
docker exec -it mynginx bash        # 进入运行中的容器
docker exec -it mynginx sh          # 如果bash不存在,用sh
docker exec -it mynginx /bin/bash   # 同上
docker exec -u root mynginx bash    # 以root用户进入
docker exec -e VAR=value mynginx bash  # 带环境变量进入
docker exec mynginx ls -la          # 在容器内执行命令

# 容器日志
docker logs mynginx                 # 查看容器日志
docker logs -f mynginx              # 实时查看日志
docker logs --tail 100 mynginx      # 查看最后100行
docker logs --since 10m mynginx     # 查看10分钟内的日志
docker logs -t mynginx              # 显示时间戳
docker logs --details mynginx       # 显示详细信息

# 容器操作
docker rename oldname newname       # 重命名容器
docker update --memory 512m mynginx # 更新容器配置
docker top mynginx                  # 查看容器内进程
docker stats mynginx                # 查看容器资源使用
docker stats                        # 查看所有容器资源使用
docker stats --no-stream           # 一次性显示资源使用

# 删除容器
docker rm mynginx                   # 删除已停止的容器
docker rm -f mynginx                # 强制删除(运行中的)
docker rm $(docker ps -aq)         # 删除所有停止的容器
docker container prune             # 删除所有停止的容器
docker rm -v mynginx               # 删除容器及相关卷
docker rm -f $(docker ps -aq)      # 强制删除所有容器

# 容器信息
docker inspect mynginx              # 查看容器详细信息
docker inspect --format='{{.NetworkSettings.IPAddress}}' mynginx  # 获取IP
docker inspect --format='{{.State.Status}}' mynginx  # 获取状态
docker diff mynginx                 # 查看容器文件变化
docker port mynginx                 # 查看端口映射
3. 容器生命周期管理
# 创建但不启动
docker create --name mynginx nginx
docker create -it --name myalpine alpine sh

# 运行容器(完整示例)
docker run -d \
  --name myweb \
  --hostname myweb \
  -p 80:80 \
  -p 443:443 \
  -v /data:/var/www/html \
  -e MYSQL_HOST=db \
  --memory="512m" \
  --cpus="0.5" \
  --restart=always \
  nginx:alpine

# 复制文件
docker cp file.txt mynginx:/app/file.txt    # 本地→容器
docker cp mynginx:/app/file.txt ./file.txt  # 容器→本地
docker cp mynginx:/app ./app-backup        # 复制整个目录

# 导出导入容器
docker export mynginx > nginx-container.tar
cat nginx-container.tar | docker import - mynginx:backup
docker import http://example.com/exampleimage.tgz

四、Dockerfile 详解

1. Dockerfile 指令
# 基础指令
FROM ubuntu:20.04                    # 基础镜像
MAINTAINER Your Name <email@example.com>  # 维护者
LABEL version="1.0" description="My App"  # 标签

# 构建指令
RUN apt update && apt install -y nginx  # 执行命令
RUN ["/bin/bash", "-c", "echo hello"]   # exec格式
WORKDIR /app                          # 工作目录
ADD ./app.tar.gz /app                 # 添加文件(自动解压)
COPY ./app /app                       # 复制文件
COPY --from=0 /app/build /app         # 多阶段构建复制

# 环境配置
ENV NODE_ENV production              # 环境变量
ENV APP_HOME=/app \
    USER=appuser
ARG BUILD_VERSION=1.0                # 构建参数
EXPOSE 80 443                        # 暴露端口
VOLUME ["/data"]                     # 数据卷

# 运行时指令
USER appuser                         # 运行用户
CMD ["nginx", "-g", "daemon off;"]  # 容器启动命令
ENTRYPOINT ["docker-entrypoint.sh"] # 入口点
HEALTHCHECK --interval=30s CMD curl -f http://localhost/ || exit 1

# ONBUILD
ONBUILD ADD . /app                   # 触发指令
2. Dockerfile 最佳实践示例
# 多阶段构建示例
# 第一阶段:构建阶段
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

# 第二阶段:运行阶段
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
3. 构建镜像
# 基本构建
docker build .                      # 使用当前目录Dockerfile
docker build -t myapp:1.0 .        # 指定标签
docker build -f Dockerfile.dev .   # 指定Dockerfile文件

# 构建参数
docker build --build-arg VERSION=1.0 .
docker build --no-cache .          # 不使用缓存
docker build --pull .              # 总是尝试拉取新基础镜像
docker build --progress=plain .    # 明文输出构建过程
docker build --target builder .    # 多阶段构建指定阶段

# 构建上下文优化
# .dockerignore 文件内容
.git
node_modules
*.log
Dockerfile
*.md

五、Docker Compose 详解

1. docker-compose.yml 结构
version: '3.8'  # 指定版本

services:  # 定义服务
  web:     # 服务名称
    image: nginx:alpine
    container_name: my-nginx
    build: .  # 从Dockerfile构建
    ports:
      - "80:80"
      - "443:443"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://user:pass@db:5432/db
    env_file:
      - .env
    volumes:
      - ./html:/usr/share/nginx/html
      - nginx_data:/etc/nginx
    networks:
      - frontend
      - backend
    depends_on:
      - db
      - redis
    restart: always
    command: nginx -g "daemon off;"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
    
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - backend
    
  redis:
    image: redis:alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    networks:
      - backend

volumes:  # 数据卷定义
  nginx_data:
  postgres_data:
  redis_data:

networks:  # 网络定义
  frontend:
    driver: bridge
  backend:
    driver: bridge
2. Docker Compose 命令
# 启动服务
docker-compose up                    # 启动所有服务
docker-compose up -d                 # 后台启动
docker-compose up web               # 只启动web服务
docker-compose up --build           # 重新构建镜像
docker-compose up --force-recreate  # 强制重建容器
docker-compose up --scale web=3     # 扩展web服务到3个实例

# 停止服务
docker-compose down                 # 停止并删除容器
docker-compose down -v              # 停止并删除容器和卷
docker-compose stop                 # 停止服务
docker-compose pause                # 暂停服务
docker-compose unpause              # 恢复服务

# 管理服务
docker-compose ps                   # 查看服务状态
docker-compose logs                 # 查看所有服务日志
docker-compose logs -f web         # 实时查看web服务日志
docker-compose logs --tail=100     # 查看最后100行日志
docker-compose exec web bash       # 进入web服务容器
docker-compose exec db psql -U postgres  # 执行命令

# 构建和配置
docker-compose build               # 构建镜像
docker-compose build --no-cache    # 不使用缓存构建
docker-compose config              # 验证配置文件
docker-compose config --services   # 列出所有服务
docker-compose config --volumes    # 列出所有卷

# 其他命令
docker-compose restart             # 重启服务
docker-compose kill                # 强制停止
docker-compose rm                  # 删除已停止的容器
docker-compose pull                # 拉取镜像
docker-compose push                # 推送镜像
docker-compose images              # 列出使用的镜像
docker-compose top                 # 显示运行进程
docker-compose run web bash        # 运行一次性命令

六、Docker 数据管理

1. 数据卷(Volumes)
# 创建和管理卷
docker volume create myvolume       # 创建卷
docker volume ls                    # 列出所有卷
docker volume inspect myvolume     # 查看卷详细信息
docker volume rm myvolume          # 删除卷
docker volume prune                # 删除未使用的卷

# 使用卷
docker run -v myvolume:/app/data nginx      # 挂载卷
docker run --mount source=myvolume,target=/app/data nginx
docker run -v /host/path:/container/path nginx  # 绑定挂载

# 卷备份和恢复
# 备份
docker run --rm -v myvolume:/data -v $(pwd):/backup alpine \
  tar czf /backup/backup.tar.gz -C /data .

# 恢复
docker run --rm -v myvolume:/data -v $(pwd):/backup alpine \
  tar xzf /backup/backup.tar.gz -C /data
2. 数据持久化最佳实践
# docker-compose.yml 示例
version: '3.8'
services:
  db:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
      - ./conf.d:/etc/mysql/conf.d:ro
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: mydb

volumes:
  mysql_data:
    driver: local
    driver_opts:
      type: none
      device: /data/mysql
      o: bind

七、Docker 网络

1. 网络管理命令
# 网络列表
docker network ls                    # 列出网络
docker network inspect bridge        # 查看网络详情
docker network inspect --format='{{range .Containers}}{{.Name}} {{end}}' bridge

# 创建和管理网络
docker network create mynet         # 创建网络
docker network create --driver bridge mybridge
docker network create --subnet 172.20.0.0/16 --gateway 172.20.0.1 mynet
docker network create --internal my-internal-net  # 内部网络
docker network rm mynet             # 删除网络
docker network prune                # 删除未使用的网络
docker network connect mynet mycontainer  # 连接容器到网络
docker network disconnect mynet mycontainer  # 断开连接

# 容器网络配置
docker run --network=host nginx     # 使用主机网络
docker run --network=none nginx     # 不使用网络
docker run --network=bridge nginx   # 使用桥接网络(默认)
docker run --network=mynet nginx    # 使用自定义网络
docker run --dns 8.8.8.8 nginx      # 自定义DNS
docker run --add-host hostname:ip nginx  # 添加hosts记录
2. 网络模式对比

模式

说明

隔离性

性能

bridge

默认模式,容器有独立IP

中等

host

使用主机网络栈

最好

none

无网络

完全隔离

N/A

container

共享另一个容器的网络

最好

overlay

Swarm集群网络

中等

macvlan

MAC地址虚拟网络

最好

八、Docker 高级特性

1. 容器资源限制
# CPU限制
docker run --cpus=0.5 nginx        # 最多使用0.5个CPU核心
docker run --cpus=".5" nginx        # 同上
docker run --cpus=2 nginx          # 最多使用2个CPU核心
docker run --cpu-period=100000 --cpu-quota=50000 nginx  # 更细粒度控制

# 内存限制
docker run -m 512m nginx           # 内存限制为512MB
docker run --memory=1g nginx       # 内存限制为1GB
docker run --memory-reservation=256m nginx  # 内存软限制
docker run --memory-swap=1g nginx  # 内存+交换分区限制
docker run --oom-kill-disable nginx  # 禁用OOM Killer

# 其他限制
docker run --pids-limit 100 nginx  # 进程数限制
docker run --ulimit nofile=1024:1024 nginx  # 文件描述符限制
docker run --device-read-bps /dev/sda:1mb nginx  # 设备读取速度
docker run --device-write-iops /dev/sda:100 nginx  # 设备写入IOPS
2. 容器健康检查
# 运行带健康检查的容器
docker run \
  --name myapp \
  --health-cmd "curl -f http://localhost/ || exit 1" \
  --health-interval 30s \
  --health-timeout 10s \
  --health-retries 3 \
  --health-start-period 5s \
  nginx

# 查看健康状态
docker inspect --format='{{.State.Health.Status}}' myapp
docker inspect myapp | grep -A 10 "Health"
3. 多阶段构建实战
# 第一阶段:构建Go应用
FROM golang:1.19 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o app .

# 第二阶段:运行应用
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/app .
EXPOSE 8080
CMD ["./app"]

# 第三阶段:测试(可选)
FROM alpine:latest AS tester
COPY --from=builder /app/app .
RUN ./app --version

九、Docker 集群与编排

1. Docker Swarm
# 初始化Swarm
docker swarm init                     # 初始化Swarm
docker swarm init --advertise-addr 192.168.1.100
docker swarm join-token manager       # 显示管理节点加入令牌
docker swarm join-token worker        # 显示工作节点加入令牌

# 节点管理
docker node ls                        # 查看节点列表
docker node promote <node-id>        # 升级为管理节点
docker node demote <node-id>         # 降级为工作节点
docker node update --availability drain <node-id>  # 排空节点
docker node ps <node-id>              # 查看节点上运行的任务
docker node inspect <node-id>         # 查看节点详情

# 服务管理
docker service create --name web --replicas 3 -p 80:80 nginx
docker service ls                     # 查看服务列表
docker service ps web                 # 查看服务任务
docker service scale web=5            # 扩展服务实例数
docker service update --image nginx:latest web
docker service update --force --update-parallelism 2 web
docker service logs web               # 查看服务日志
docker service rm web                 # 删除服务

# 网络
docker network create --driver overlay mynet
docker service create --network mynet --name myapp nginx

# 配置和密钥
echo "myconfig" | docker config create myconfig -
docker service create --config myconfig nginx
echo "secret" | docker secret create mysecret -
docker service create --secret mysecret nginx
2. 编排示例
# docker-stack.yml
version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
        delay: 5s
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
    networks:
      - webnet

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet

networks:
  webnet:
    driver: overlay
3. 部署和管理
# 部署应用栈
docker stack deploy -c docker-stack.yml myapp
docker stack services myapp          # 查看服务
docker stack ps myapp                # 查看任务
docker stack rm myapp                # 删除应用栈
docker stack ls                      # 查看所有应用栈

# 滚动更新
docker service update \
  --image nginx:1.21 \
  --update-parallelism 2 \
  --update-delay 10s \
  web

十、Docker 安全最佳实践

1. 安全配置
# 以非root用户运行
docker run -u 1000:1000 nginx
# Dockerfile中
USER 1000

# 只读文件系统
docker run --read-only nginx
docker run --read-only --tmpfs /tmp nginx

# 安全选项
docker run --security-opt=no-new-privileges nginx
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
docker run --security-opt="apparmor=docker-default" nginx
docker run --security-opt="seccomp=unconfined" nginx

# 资源限制
docker run --memory=256m --cpus=0.5 nginx
docker run --pids-limit 100 nginx
2. 镜像安全扫描
# 使用Trivy扫描镜像
trivy image nginx:latest
trivy image --severity HIGH,CRITICAL nginx:latest
trivy image --format json nginx:latest

# 使用Docker Bench Security
docker run -it --net host --pid host --userns host --cap-add audit_control \
  -e DOCKER_CONTENT_TRUST=1 \
  -v /var/lib:/var/lib \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --label docker_bench_security \
  docker/docker-bench-security

# 内容信任
export DOCKER_CONTENT_TRUST=1
docker pull nginx:latest
docker push myrepo/myimage:latest

十一、Docker 实战项目

1. 单页应用部署
# docker-compose.yml
version: '3.8'
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:80"
    environment:
      - NODE_ENV=production
    depends_on:
      - backend
    
  backend:
    build: ./backend
    ports:
      - "3001:3001"
    environment:
      - DB_HOST=db
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis
    
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
    
  redis:
    image: redis:alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - frontend
      - backend

volumes:
  postgres_data:
  redis_data:
2. CI/CD 集成示例
# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""

build:
  stage: build
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

test:
  stage: test
  script:
    - docker run $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA npm test

deploy:
  stage: deploy
  script:
    - docker stack deploy -c docker-compose.prod.yml myapp
  only:
    - master
3. 开发环境配置
# docker-compose.dev.yml
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - CHOKIDAR_USEPOLLING=true
    command: npm start
  
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: app_dev
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
  
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  
  adminer:
    image: adminer
    ports:
      - "8080:8080"

volumes:
  postgres_data:

十二、Docker 故障排查

1. 调试技巧
# 查看容器日志
docker logs [容器]                    # 查看日志
docker logs -f [容器]                 # 实时日志
docker logs --since 10m [容器]        # 最近10分钟日志
docker logs --tail 100 [容器]         # 最后100行
docker logs --details [容器]          # 显示详细日志

# 检查容器状态
docker ps -a                          # 查看所有容器
docker inspect [容器]                 # 查看容器详细信息
docker stats [容器]                   # 查看资源使用
docker top [容器]                     # 查看容器内进程
docker events                         # 查看Docker事件

# 网络调试
docker exec [容器] ping google.com    # 测试网络连通性
docker exec [容器] nslookup google.com
docker network inspect [网络]         # 查看网络配置
iptables -t nat -L -n                # 查看NAT规则

# 文件系统检查
docker diff [容器]                    # 查看容器文件变化
docker cp [容器]:/path/to/file ./    # 从容器复制文件
docker export [容器] > container.tar  # 导出容器文件系统
2. 常用问题解决
# 1. 容器启动失败
docker logs [容器]                    # 查看启动日志
docker run -it --rm image sh         # 调试模式启动
docker inspect [容器] | grep -A 10 State

# 2. 端口被占用
netstat -tulpn | grep :80           # 查找占用80端口的进程
docker ps -a                         # 查看所有容器端口映射

# 3. 磁盘空间不足
docker system df                     # 查看磁盘使用
docker system prune                  # 清理未使用的资源
docker system prune -a               # 清理所有未使用的资源
docker volume prune                  # 清理未使用的卷
docker image prune                   # 清理未使用的镜像

# 4. 网络问题
docker network ls                    # 查看网络
docker network inspect bridge        # 查看网络详情
docker run --network=host nginx     # 测试使用主机网络
3. 监控和性能分析
# 资源监控
docker stats                         # 实时监控容器资源
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
docker stats --no-stream             # 一次性查看

# 系统信息
docker info                          # Docker系统信息
docker version                       # Docker版本信息
docker system df                     # 磁盘使用情况
docker system events                 # Docker事件流

# 性能分析
docker run -it --rm --pid=container:[容器] ubuntu top
docker run -it --rm --net=container:[容器] nicolaka/netshoot

十三、学习资源

1. 官方文档
2. 常用镜像
# 基础镜像
alpine:latest          # 轻量级Linux(5MB)
ubuntu:20.04           # Ubuntu
centos:8               # CentOS
debian:buster-slim     # Debian精简版

# 运行时
node:16-alpine         # Node.js
python:3.9-slim        # Python
openjdk:11-jre-slim    # Java
golang:1.19-alpine     # Go

# 数据库
mysql:8.0              # MySQL
postgres:13-alpine     # PostgreSQL
redis:alpine           # Redis
mongo:5.0              # MongoDB

# Web服务器
nginx:alpine           # Nginx
httpd:alpine           # Apache
traefik:v2.5           # Traefik代理

# 工具
busybox:latest         # 工具箱
nicolaka/netshoot      # 网络调试
portainer/portainer    # Docker管理界面
3. 学习路径
1. 基础阶段(1-2周)
   - Docker安装和配置
   - 镜像和容器基本操作
   - Dockerfile编写
   - 数据卷使用

2. 进阶阶段(2-3周)
   - Docker Compose
   - Docker网络
   - Docker Swarm
   - 多阶段构建

3. 生产阶段(持续)
   - 安全最佳实践
   - 性能优化
   - 监控和日志
   - CI/CD集成

十四、快速参考表

命令速查表
# 镜像
docker pull [镜像]           # 拉取镜像
docker build -t [标签] .    # 构建镜像
docker images              # 列出镜像
docker rmi [镜像]          # 删除镜像

# 容器
docker run [镜像]          # 运行容器
docker ps                  # 列出容器
docker exec -it [容器] sh  # 进入容器
docker logs [容器]         # 查看日志
docker stop [容器]         # 停止容器
docker rm [容器]           # 删除容器

# 网络
docker network ls          # 列出网络
docker network create [网络] # 创建网络
docker network inspect [网络] # 查看网络

# 数据卷
docker volume ls           # 列出卷
docker volume create [卷]  # 创建卷
docker volume rm [卷]      # 删除卷

# Compose
docker-compose up         # 启动
docker-compose down       # 停止
docker-compose ps         # 查看状态
docker-compose logs       # 查看日志

# Swarm
docker swarm init         # 初始化
docker service create     # 创建服务
docker service ls         # 列出服务
docker stack deploy       # 部署应用栈
常用参数速查
-d, --detach              # 后台运行
-i, --interactive         # 交互模式
-t, --tty                 # 分配伪终端
--name                    # 指定容器名
-p, --publish             # 端口映射
-v, --volume              # 数据卷挂载
-e, --env                 # 环境变量
--network                 # 指定网络
--restart                 # 重启策略
--memory                  # 内存限制
--cpus                    # CPU限制
--rm                      # 退出时删除

💡 使用技巧和最佳实践

日常使用技巧
1.使用别名:在 ~/.bashrc中添加:
alias dps='docker ps'
alias dcu='docker-compose up'
alias dcd='docker-compose down'
alias dcl='docker-compose logs -f'
2.清理命令
# 清理所有未使用资源
docker system prune -a -f

# 清理特定资源
docker container prune
docker image prune
docker volume prune
docker network prune
3.快速进入容器
# 在 ~/.bashrc 中添加
dsh() { docker exec -it $1 sh; }
dbash() { docker exec -it $1 bash; }
4.查看容器IP
dip() { docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1; }

生产环境建议

  1. 永远不要在生产中使用最新标签:使用特定版本标签

  2. 使用非root用户运行容器

  3. 设置资源限制:防止容器占用所有资源

  4. 启用日志轮转:避免日志占满磁盘

  5. 使用只读根文件系统:增加安全性

  6. 定期更新基础镜像:获取安全补丁

  7. 扫描镜像漏洞:使用Trivy等工具

  8. 使用私有仓库:控制镜像分发

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐