Ubuntu 22.04 Server Docker 安装配置与运维完全指南
下面从安装、配置、运维三个维度为你整理一份完整的技术笔记。一、环境准备1.1 系统要求Ubuntu 22.04 LTS (Jammy) 64位内核版本 ≥ 5.10建议配置2核CPU、4GB内存、20GB以上磁盘空间1.2 更新系统并安装依赖sudo apt update sudo apt upgrade -y sudo apt install -y \ ca-certificates \ curl \ gnupg \ lsb-release \ apt-transport-https \ software-properties-common1.3 卸载旧版本冲突包for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg 2/dev/null done二、Docker 安装2.1 配置官方仓库# 创建密钥目录 sudo install -m 0755 -d /etc/apt/keyrings # 下载并安装 GPG 密钥 sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod ar /etc/apt/keyrings/docker.asc # 添加 Docker 软件源 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt update2.2 安装 Docker Engine# 安装最新版本 sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 sudo docker run hello-world2.3 安装特定版本可选# 查看可用版本 apt-cache madison docker-ce # 安装指定版本 sudo VERSION_STRING5:28.4.0-1~ubuntu.22.04~jammy sudo apt install docker-ce$VERSION_STRING docker-ce-cli$VERSION_STRING containerd.io三、Docker 配置3.1 配置普通用户免 sudo 使用 Docker# 将当前用户加入 docker 组 sudo usermod -aG docker $USER # 立即生效或退出重新登录 newgrp docker # 验证 docker run hello-world3.2 配置镜像加速器创建/etc/docker/daemon.json文件sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.m.daocloud.io, https://docker.imgdb.de, https://docker.1ms.run ], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, storage-driver: overlay2, max-concurrent-downloads: 10 } EOF3.3 重启 Docker 服务sudo systemctl daemon-reload sudo systemctl restart docker # 验证配置 docker info | grep -A 5 Registry Mirrors3.4 设置开机自启sudo systemctl enable docker sudo systemctl start docker四、运维管理4.1 服务管理命令# 查看服务状态 sudo systemctl status docker # 启动/停止/重启 sudo systemctl start docker sudo systemctl stop docker sudo systemctl restart docker # 查看 Docker 系统信息 docker info docker version4.2 镜像管理# 搜索镜像 docker search nginx --limit 5 # 拉取镜像 docker pull nginx:latest docker pull ubuntu:22.04 # 列出镜像 docker images # 删除镜像 docker rmi image_id # 清理无用镜像 docker image prune -a # 导出/导入镜像 docker save -o nginx.tar nginx:latest docker load -i nginx.tar4.3 容器管理# 运行容器 docker run -d --name my-nginx -p 80:80 nginx # 交互式运行 docker run -it --name my-ubuntu ubuntu:22.04 /bin/bash # 查看运行中的容器 docker ps # 查看所有容器含停止的 docker ps -a # 停止/启动/重启容器 docker stop container_name docker start container_name docker restart container_name # 删除容器 docker rm container_name # 进入容器 docker exec -it my-nginx /bin/bash # 查看容器日志 docker logs -f --tail 100 my-nginx # 查看容器资源占用 docker stats --no-stream docker top my-nginx4.4 资源限制# CPU 和内存限制 docker run -d \ --name limited-app \ --cpus1.5 \ --memory1g \ --memory-swap2g \ myapp:latest # 更新运行中容器的资源限制 docker update --cpus1 --memory512m limited-app4.5 数据持久化# 创建并挂载卷 docker volume create my-data docker run -d -v my-data:/app/data --name app-with-data myapp # 绑定挂载宿主机目录 docker run -d -v /host/data:/container/data myapp # 查看卷信息 docker volume ls docker volume inspect my-data4.6 网络管理# 创建自定义网络 docker network create my-net # 运行容器并连接到网络 docker run -d --name web --network my-net nginx docker run -d --name app --network my-net myapp # 查看网络 docker network ls docker network inspect my-net # 断开/连接网络 docker network disconnect my-net web docker network connect my-net web4.7 磁盘清理# 查看磁盘使用情况 docker system df # 一键清理慎用 docker system prune -a --volumes # 清理特定类型 docker container prune # 停止的容器 docker image prune -a # 未使用的镜像 docker volume prune # 未使用的卷 docker network prune # 未使用的网络五、Docker Compose 使用5.1 验证安装docker compose version5.2 示例docker-compose.ymlversion: 3.8 services: web: image: nginx:latest ports: - 80:80 volumes: - ./html:/usr/share/nginx/html restart: unless-stopped db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: mysecret MYSQL_DATABASE: appdb volumes: - mysql-data:/var/lib/mysql restart: unless-stopped volumes: mysql-data:5.3 Compose 常用命令# 启动服务 docker compose up -d # 查看服务状态 docker compose ps # 查看日志 docker compose logs -f # 停止服务 docker compose down # 停止并删除数据卷 docker compose down -v # 重启服务 docker compose restart # 拉取最新镜像并重建 docker compose pull docker compose up -d --build六、安全加固6.1 防火墙注意⚠️重要Docker 直接操作iptables会绕过ufw规则。# 查看 Docker 暴露的端口 docker ps --format table {{.Names}}\t{{.Ports}} # 如需严格限制可编辑 /etc/docker/daemon.json { iptables: true, userland-proxy: false }6.2 安全最佳实践# 避免使用特权模式 docker run --privileged false # 默认就是 false # 限制容器权限 docker run --cap-dropALL --cap-addNET_ADMIN myapp # 只读根文件系统 docker run --read-only myapp # 使用非 root 用户运行容器 docker run -u 1000:1000 myapp6.3 定期更新# 更新 Docker 自身 sudo apt update sudo apt upgrade docker-ce # 清理旧版本镜像 docker image prune -a # 设置安全扫描使用 trivy docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image --severity CRITICAL myapp:latest七、故障排查7.1 常见问题速查表7.2 日志位置7.2 日志位置问题排查命令Docker 服务未启动systemctl status docker权限被拒绝groups $USER检查是否在 docker 组镜像拉取超时检查docker info中的镜像加速配置端口冲突netstat -tulpn | grep 端口磁盘空间不足docker system df容器无法启动docker logs 容器名内核兼容性问题curl -fsSL https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh | sudo bash7.2 日志位置# Docker 守护进程日志 sudo journalctl -u docker -n 100 --no-pager # 容器日志 docker logs --since 2024-01-01 container_name7.3 完全卸载 Docker# 停止服务 sudo systemctl stop docker # 卸载软件包 sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 删除数据 sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -f /etc/apt/sources.list.d/docker.list sudo rm -f /etc/apt/keyrings/docker.asc八、快速命令参考卡片# 安装 curl -fsSL get.docker.com | sudo sh sudo usermod -aG docker $USER newgrp docker # 镜像加速 sudo tee /etc/docker/daemon.json -EOF {registry-mirrors: [https://docker.m.daocloud.io]} EOF sudo systemctl restart docker # 常用运维 docker ps -a # 查看所有容器 docker images # 查看镜像 docker system prune -a # 清理 docker logs -f 容器名 # 实时日志 docker exec -it 容器名 bash # 进入容器 docker compose up -d # 启动编排