悠米是只猫

悠米是只猫

Docker 命令使用完整手册(Linux 环境)

2025-04-03

目录

  1. Docker 简介

  2. 安装与配置

  3. 镜像管理

  4. 容器操作

  5. 网络管理

  6. 数据卷与存储

  7. Docker Compose

  8. Docker Swarm

  9. 日志与监控

  10. 安全最佳实践

  11. 常见问题排查


Docker 简介

Docker 是一个开源的应用容器引擎,允许开发者打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。

主要组件:

  • Docker Daemon:后台服务

  • Docker Client:命令行工具

  • Docker Images:容器模板

  • Docker Containers:运行中的镜像实例

  • Docker Registry:镜像仓库(如 Docker Hub)


安装与配置

Ubuntu/Debian 安装

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker run hello-world

CentOS/RHEL 安装

# 卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker run hello-world

配置非root用户使用

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker  # 刷新组权限

镜像管理

基础命令

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 列出本地镜像
docker images
docker image ls

# 删除镜像
docker rmi <image_id>
docker image rm <image_id>

# 查看镜像详情
docker inspect <image_id>

# 导出镜像
docker save -o nginx.tar nginx:latest

# 导入镜像
docker load -i nginx.tar

构建镜像

# 通过Dockerfile构建
docker build -t my-image:1.0 .

# 指定Dockerfile路径
docker build -f /path/to/Dockerfile -t my-image:1.0 .

# 构建时不使用缓存
docker build --no-cache -t my-image:1.0 .

镜像标签

# 添加标签
docker tag nginx:latest my-nginx:v1

# 推送镜像到仓库
docker login
docker push my-nginx:v1

容器操作

基础命令

# 运行容器
docker run -d --name my-nginx -p 8080:80 nginx:latest

# 列出运行中的容器
docker ps

# 列出所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop my-nginx

# 启动已停止的容器
docker start my-nginx

# 重启容器
docker restart my-nginx

# 删除容器
docker rm my-nginx

# 强制删除运行中的容器
docker rm -f my-nginx

# 查看容器日志
docker logs my-nginx

# 实时查看日志
docker logs -f my-nginx

# 查看容器资源使用
docker stats my-nginx

交互式操作

# 进入运行中的容器
docker exec -it my-nginx /bin/

# 以root身份进入
docker exec -u 0 -it my-nginx /bin/

# 运行临时交互式容器
docker run -it --rm ubuntu:latest /bin/

容器配置

# 设置环境变量
docker run -e "ENV_VAR=value" nginx

# 设置容器主机名
docker run --hostname myhost nginx

# 设置容器DNS
docker run --dns 8.8.8.8 nginx

# 限制容器资源
docker run --memory="512m" --cpus="1.5" nginx

网络管理

基础命令

# 列出网络
docker network ls

# 创建网络
docker network create my-network

# 查看网络详情
docker network inspect my-network

# 删除网络
docker network rm my-network

# 连接容器到网络
docker network connect my-network my-nginx

# 断开容器网络
docker network disconnect my-network my-nginx

网络类型

# 使用桥接网络(默认)
docker run --network bridge nginx

# 使用主机网络
docker run --network host nginx

# 使用none网络(无网络)
docker run --network none nginx

# 使用自定义网络
docker run --network my-network nginx

端口映射

# 随机端口映射
docker run -P nginx

# 指定端口映射
docker run -p 8080:80 nginx

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

# 指定IP端口映射
docker run -p 192.168.1.100:8080:80 nginx

数据卷与存储

数据卷操作

# 创建数据卷
docker volume create my-volume

# 列出数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect my-volume

# 删除数据卷
docker volume rm my-volume

# 删除未使用的数据卷
docker volume prune

挂载方式

# 挂载数据卷
docker run -v my-volume:/data nginx

# 挂载主机目录
docker run -v /host/path:/container/path nginx

# 只读挂载
docker run -v /host/path:/container/path:ro nginx

# 使用--mount语法(更详细)
docker run --mount type=bind,source=/host/path,target=/container/path,readonly nginx

# 临时文件系统
docker run --tmpfs /tmp:rw,size=64m nginx

Docker Compose

基础命令

# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 构建服务
docker-compose build

# 重新创建容器
docker-compose up -d --force-recreate

# 扩展服务实例
docker-compose up -d --scale web=3

示例 docker-compose.yml

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend

volumes:
  db-data:

networks:
  frontend:
  backend:

Docker Swarm

集群管理

# 初始化Swarm
docker swarm init --advertise-addr <MANAGER-IP>

# 加入工作节点
docker swarm join --token <TOKEN> <MANAGER-IP>:2377

# 查看节点
docker node ls

# 查看服务
docker service ls

# 创建服务
docker service create --name web --replicas 3 -p 8080:80 nginx

# 扩展服务
docker service scale web=5

# 更新服务
docker service update --image nginx:1.19 web

# 删除服务
docker service rm web

日志与监控

日志管理

# 查看日志
docker logs <container_id>

# 跟踪日志
docker logs -f <container_id>

# 显示时间戳
docker logs -t <container_id>

# 限制日志行数
docker logs --tail=100 <container_id>

# 配置日志驱动
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx

监控命令

# 查看容器资源使用
docker stats

# 查看容器进程
docker top <container_id>

# 查看容器详细信息
docker inspect <container_id>

# 查看事件流
docker events

安全最佳实践

使用非root用户运行容器

docker run -u 1000 nginx

限制容器能力

docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

设置只读文件系统

docker run --read-only nginx

使用资源限制

docker run --memory="512m" --cpus="1.0" nginx

定期更新镜像

docker pull nginx:latest

扫描镜像漏洞

docker scan nginx

常见问题排查

容器无法启动

# 查看错误日志
docker logs <container_id>

# 检查容器配置
docker inspect <container_id>

# 以调试模式运行
docker run -it --entrypoint /bin/sh nginx

网络连接问题

# 检查容器网络
docker network inspect <network_id>

# 测试容器网络连接
docker exec -it <container_id> ping google.com

# 检查端口映射
docker port <container_id>

存储空间不足

# 查看磁盘使用
docker system df

# 清理未使用的对象
docker system prune

# 清理包括未使用的镜像
docker system prune -a

总结

本手册涵盖了Docker在Linux环境下的主要命令和操作,从基础安装到高级功能。随着Docker生态的发展,建议定期查阅官方文档获取最新信息。

注意:生产环境使用Docker时,请务必遵循安全最佳实践,并考虑使用容器编排工具(如Kubernetes)管理大规模部署。