#记录下docker中的常规命令,以及使用方式,方便以后使用和观看#
一、Docker 基础概念
什么是Docker?
Docker 是一个容器化平台,可以将应用程序及其依赖打包到轻量级、可移植的容器中,在任何环境中都能一致运行。
核心概念
| 概念 | 说明 | 类比 |
|---|---|---|
| **镜像(Image)** | 只读模板,包含运行应用所需的一切 | 类(Class) |
| **容器(Container)** | 镜像的运行实例 | 对象(Object) |
| **仓库(Registry)** | 存储和分发镜像的地方 | 应用商店 |
| Dockerfile | 构建镜像的脚本文件 | 构建说明书 |
| Volume | 数据卷,持久化数据存储 | 移动硬盘 |
| Network | 容器网络,容器间通信 | 虚拟局域网 |
二、Docker 安装与配置
1. 安装 Docker
bash
# 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. 验证安装
bash
# 检查版本
docker --version
docker-compose --version
docker info
# 运行测试容器
docker run hello-world
3. 配置 Docker(可选)
bash
# 添加用户到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. 镜像管理
bash
# 搜索镜像
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. 容器管理
bash
# 运行容器
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. 容器生命周期管理
bash
# 创建但不启动
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 指令
bash
# 基础指令
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 最佳实践示例
bash
# 多阶段构建示例
# 第一阶段:构建阶段
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. 构建镜像
bash
# 基本构建
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 结构
bash
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 命令
bash
# 启动服务
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)
bash
# 创建和管理卷
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. 数据持久化最佳实践
bash
# 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. 网络管理命令
bash
# 网络列表
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. 容器资源限制
bash
# 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. 容器健康检查
bash
# 运行带健康检查的容器
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. 多阶段构建实战
bash
# 第一阶段:构建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
bash
# 初始化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. 编排示例
bash
# 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. 部署和管理
bash
# 部署应用栈
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. 安全配置
bash
# 以非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. 镜像安全扫描
bash
# 使用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. 单页应用部署
bash
# 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 集成示例
bash
# .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. 开发环境配置
bash
# 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. 调试技巧
bash
# 查看容器日志
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. 常用问题解决
bash
# 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. 监控和性能分析
bash
# 资源监控
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. 官方文档
-
Docker Documentation- 官方文档
-
Docker Hub- 镜像仓库
-
Play with Docker- 在线练习
-
Dockerfile Reference- Dockerfile参考
2. 常用镜像
bash
# 基础镜像
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. 学习路径
bash
1. 基础阶段(1-2周)
- Docker安装和配置
- 镜像和容器基本操作
- Dockerfile编写
- 数据卷使用
2. 进阶阶段(2-3周)
- Docker Compose
- Docker网络
- Docker Swarm
- 多阶段构建
3. 生产阶段(持续)
- 安全最佳实践
- 性能优化
- 监控和日志
- CI/CD集成
十四、快速参考表
命令速查表
bash
# 镜像
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 # 部署应用栈
常用参数速查
bash
-d, --detach # 后台运行
-i, --interactive # 交互模式
-t, --tty # 分配伪终端
--name # 指定容器名
-p, --publish # 端口映射
-v, --volume # 数据卷挂载
-e, --env # 环境变量
--network # 指定网络
--restart # 重启策略
--memory # 内存限制
--cpus # CPU限制
--rm # 退出时删除
💡 使用技巧和最佳实践
日常使用技巧
1.使用别名 :在 ~/.bashrc中添加:
bash
alias dps='docker ps'
alias dcu='docker-compose up'
alias dcd='docker-compose down'
alias dcl='docker-compose logs -f'
2.清理命令
bash
# 清理所有未使用资源
docker system prune -a -f
# 清理特定资源
docker container prune
docker image prune
docker volume prune
docker network prune
3.快速进入容器:
bash
# 在 ~/.bashrc 中添加
dsh() { docker exec -it $1 sh; }
dbash() { docker exec -it $1 bash; }
4.查看容器IP:
bash
dip() { docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1; }
生产环境建议
-
永远不要在生产中使用最新标签:使用特定版本标签
-
使用非root用户运行容器
-
设置资源限制:防止容器占用所有资源
-
启用日志轮转:避免日志占满磁盘
-
使用只读根文件系统:增加安全性
-
定期更新基础镜像:获取安全补丁
-
扫描镜像漏洞:使用Trivy等工具
-
使用私有仓库:控制镜像分发