Linux 系统安装部署 Docker 完全指南

刘小猪 发布于 阅读:9 教程

Linux 系统安装部署 Docker 完全指南

Docker 是目前最主流的容器化技术,基于 Linux 内核的命名空间与控制组(cgroups)实现轻量级虚拟化,让应用及其依赖打包为镜像,秒级启动、跨环境一致运行。本指南覆盖从安装、配置、运行到安全加固与故障排查的全流程。


一、Docker 核心概念


二、安装前检查

# 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

驱动类型:


十、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

十三、安全加固建议


十四、故障排查

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 让应用打包、部署与扩容变得简单一致。生产部署建议:

  1. 使用官方仓库安装并保持版本可控;
  2. 配置镜像加速与日志轮转;
  3. 优先使用 Dockerfile + compose.yml 固化环境;
  4. 重视安全,采用最小权限与镜像扫描;
  5. 配合 healthcheck、重启策略与资源限制提升稳定性。

进一步可学习 docker context、Docker Swarm、Kubernetes、Podman 与 BuildKit 等进阶主题。

参考:Docker 官方文档

Docker Linux 容器 教程 运维

手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

收藏 0