Linux 系统安装部署 Docker 完全指南
Docker 是目前最主流的容器化技术,基于 Linux 内核的命名空间与控制组(cgroups)实现轻量级虚拟化,让应用及其依赖打包为镜像,秒级启动、跨环境一致运行。本指南覆盖从安装、配置、运行到安全加固与故障排查的全流程。
一、Docker 核心概念
- 镜像(Image):只读模板,包含运行应用所需的文件系统、依赖与配置。
- 容器(Container):镜像的运行实例,拥有独立网络、进程空间与文件系统视图。
- 仓库(Registry):集中存放和分发镜像,如 Docker Hub、私有 Harbor。
- Docker Engine:运行时核心,包含
dockerd守护进程与containerd、runc容器运行时。
二、安装前检查
# 1. 确认内核版本需 >= 3.10
uname -r
# 2. 确认发行版与架构
cat /etc/os-release
arch
# 3. 卸载旧版本(CentOS/RHEL)
sudo yum remove -y docker docker-client docker-common docker-engine docker-selinux docker-ce containerd.io podman
# 4. 卸载旧版本(Ubuntu/Debian)
sudo apt remove -y docker docker.io containerd runc
三、安装方式
3.1 官方一键脚本(推荐新手快速体验)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
3.2 通过发行版仓库安装
CentOS / RHEL / Rocky / AlmaLinux
# 安装 yum 工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker Engine 全家桶
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ubuntu / Debian
# 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 添加源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
# 安装
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
四、启动服务并验证
# 启动并设置开机自启
sudo systemctl enable --now docker
# 检查状态
sudo systemctl status docker
# 查看版本信息
docker version
# 运行测试容器
docker run --rm hello-world
输出 Hello from Docker! 即表示安装与网络正常。
五、配置镜像加速与守护进程
国内访问 Docker Hub 较慢,建议配置镜像加速。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true
}
EOF
# 重启生效
sudo systemctl daemon-reload
sudo systemctl restart docker
live-restore: true允许守护进程重启时容器继续运行,生产环境强烈建议开启。
六、免 sudo 运行 Docker
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 重新登录会话生效
newgrp docker
# 验证
docker ps
安全提示:加入 docker 组等价于获得 root 权限,共享主机需谨慎。
七、常用命令速查
# 拉取与镜像
docker pull nginx:latest
docker images
docker rmi nginx:latest
# 容器生命周期
docker run -d --name web -p 80:80 nginx
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker stop web
docker rm web
# 进入容器
docker exec -it web /bin/sh
# 查看日志
docker logs -f --tail=100 web
# 复制文件
docker cp web:/var/log/nginx/error.log ./error.log
docker cp ./index.html web:/usr/share/nginx/html/index.html
# 清理未使用的资源
docker system prune -a
八、数据卷与持久化
容器文件系统是临时的,删除即丢失。使用数据卷(volume)持久化数据。
# 创建命名卷
docker volume create nginx-data
# 运行容器并挂载卷
docker run -d --name web -p 80:80 -v nginx-data:/usr/share/nginx/html nginx
# 绑定挂载宿主机目录(适合开发)
docker run -d --name dev -p 8080:80 -v $(pwd)/html:/usr/share/nginx/html nginx
# 查看与管理卷
docker volume ls
docker volume inspect nginx-data
docker volume rm nginx-data
九、网络模型
Docker 默认桥接网络实现容器互联。
# 查看内置网络
docker network ls
# 创建自定义网络
docker network create --driver bridge mynet
# 容器加入网络后可通过容器名互访
docker run -d --name app --network mynet nginx:alpine
docker exec -it app ping web
驱动类型:
bridge:单机默认,隔离性好。host:使用宿主机网络栈,性能高但无隔离。overlay:Swarm 多主机互联。macvlan:容器直接获得二层物理网 IP。
十、Dockerfile 构建自定义镜像
以构建一个静态站点为例:
mkdir mysite && cd mysite
创建 index.html:
<h1>Hello Docker</h1>
创建 Dockerfile:
FROM nginx:alpine
LABEL maintainer="you@example.com"
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
构建与运行:
docker build -t mysite:1.0 .
docker run -d -p 8000:80 mysite:1.0
多阶段构建(减小体积):
# 编译阶段
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .
# 运行阶段
FROM alpine:3.19
WORKDIR /root/
COPY --from=builder /app/myapp .
ENTRYPOINT ["./myapp"]
十一、Docker Compose 多容器编排
现代版本集成在 docker compose 命令中,无需单独安装 docker-compose。
# 验证
docker compose version
示例 compose.yml 部署 Web + 数据库:
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
networks:
- backend
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- backend
networks:
backend:
driver: bridge
volumes:
pgdata:
常用命令:
docker compose up -d # 后台启动
docker compose ps
docker compose logs -f web
docker compose exec db psql -U app
docker compose down -v # 停止并删除数据卷
十二、资源限制与性能
# 限制内存 512MB、CPU 1 核
docker run -d --name cgroup --memory=512m --memory-swap=512m --cpus=1 nginx
# 限制进程数
docker run --ulimit nproc=100:200 --ulimit nofile=1024:2048 nginx
# 查看实时资源
docker stats
十三、安全加固建议
- 最小镜像原则:优先使用
alpine、distroless、slim变体。 - 非 root 用户运行容器:
FROM node:20-alpine RUN addgroup -S app && adduser -S app -G app USER app - 不挂载危险路径:避免
-v /var/run/docker.sock:/var/run/docker.sock、/、/proc等。 - 只读根文件系统:
docker run --read-only --tmpfs /tmp nginx。 - 镜像扫描:集成
trivy等扫描工具。 - 使用 rootless 模式:让
dockerd以非特权用户运行,降低内核攻击面。 - 网络隔离:仅暴露必要端口,敏感服务使用内部网络,不映射宿主机端口。
十四、故障排查
1. 服务无法启动,日志查看位置
journalctl -u docker.service --since "10 min ago"
2. overlay2 挂载失败
确认内核模块加载:
lsmod | grep overlay
modprobe overlay
3. 端口未放行
sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
# 或
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
4. 容器访问外网失败
检查 dockerd 是否开启 IPv4 转发:
sysctl net.ipv4.ip_forward
5. 存储目录权限或空间不足
docker system df
sudo du -sh /var/lib/docker
迁移数据目录:
# 编辑 /etc/docker/daemon.json
{
"data-root": "/data/docker"
}
# 重启并迁移旧数据
十五、卸载 Docker
# 停止服务
sudo systemctl stop docker
sudo systemctl disable docker
# 卸载包(Ubuntu/Debian)
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 清理数据与配置
sudo rm -rf /var/lib/docker /var/lib/containerd /etc/docker
sudo apt autoremove
十六、总结
Docker 让应用打包、部署与扩容变得简单一致。生产部署建议:
- 使用官方仓库安装并保持版本可控;
- 配置镜像加速与日志轮转;
- 优先使用
Dockerfile+compose.yml固化环境; - 重视安全,采用最小权限与镜像扫描;
- 配合
healthcheck、重启策略与资源限制提升稳定性。
进一步可学习 docker context、Docker Swarm、Kubernetes、Podman 与 BuildKit 等进阶主题。
参考:Docker 官方文档