Docker系统部署技术详解

1. Docker简介

Docker 是一个开源的应用容器引擎,基于Go语言开发,遵循Apache 2.0协议。它允许开发者将应用及其依赖、配置打包到一个轻量级、可移植的“容器”中,从而实现快速交付、部署和运行

核心概念与架构

  • 镜像:只读的模板,用于创建容器,包含运行应用所需的文件系统、依赖和配置。
  • 容器:镜像的运行实例,是一个隔离的进程空间,拥有自己的文件系统、网络和进程树。
  • 仓库:集中存放镜像的地方。公共仓库如Docker Hub,私有仓库可自行搭建。
  • Docker Daemon:常驻后台的守护进程,负责管理镜像、容器、网络和存储卷。
  • Docker Client:用户通过命令行工具或API与Docker Daemon交互。
  • Docker Registry:存储镜像的服务器。

与传统虚拟化的区别

特性 Docker容器 传统虚拟机
虚拟化级别 操作系统级,共享宿主机内核 硬件级,每个VM有独立内核
启动速度 秒级甚至毫秒级 分钟级
性能开销 极低,接近原生 较高,存在Hypervisor开销
磁盘占用 MB级,镜像层可共享 GB级,每个VM包含完整系统
隔离性 进程级别隔离,安全性较弱 完全硬件隔离,安全性强
部署密度 ,单机可运行数百容器 ,资源占用大

2. Docker与Docker Compose安装和设置

Docker安装步骤

Linux系统(以Ubuntu为例)

  1. 卸载旧版本(如有):

    1
    sudo apt-get remove docker docker-engine docker.io containerd runc
  2. 设置仓库并安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 更新包索引并安装依赖
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg lsb-release

    # 添加Docker官方GPG密钥
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/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/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 docker-compose-plugin
  3. 验证安装

    1
    sudo docker run hello-world

Windows/macOS

  • 下载 Docker Desktop 安装包,图形化安装即可。
  • Docker Desktop集成了Docker引擎、CLI、Compose和图形化管理界面。

Docker Compose安装

Linux系统单独安装(若未安装docker-compose-plugin):

1
2
3
4
5
6
7
8
# 下载最新稳定版
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

:推荐使用Docker官方提供的docker-compose-plugin(通过docker compose命令使用),它是未来的发展方向。

服务管理设置

Linux系统服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动Docker服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 查看服务状态
sudo systemctl status docker

# 重启服务
sudo systemctl restart docker

# 停止服务
sudo systemctl stop docker

配置非root用户使用Docker(安全考虑,避免总用sudo):

1
2
3
4
5
6
7
8
# 将当前用户添加到docker组
sudo usermod -aG docker $USER

# 注销后重新登录使组更改生效
newgrp docker # 或直接重新登录系统

# 验证无需sudo即可运行docker命令
docker ps

3. Docker常用配置

Docker主要配置文件位于 /etc/docker/daemon.json(Linux),若不存在可手动创建。

日志配置

Docker支持多种日志驱动,控制容器日志的存储和行为:

1
2
3
4
5
6
7
8
9
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "production",
"env": "os,customer"
}
}

参考配置: sudo curl -L "https://haies.cn/assets/daemon.json" -o /etc/docker/daemon.json

常用日志驱动

  • json-file:默认驱动,日志以JSON格式存储在主机文件系统中。
  • journald:日志发送到systemd journal。
  • syslog:日志发送到syslog。
  • none:不保存任何容器日志。

镜像与数据存储位置配置

默认情况下,Docker镜像、容器等数据存储在 /var/lib/docker。若要更改存储位置:

  1. 停止Docker服务

    1
    sudo systemctl stop docker
  2. 迁移数据(如已有数据):

    1
    sudo rsync -aqxP /var/lib/docker/ /new/path/docker/
  3. 修改配置 /etc/docker/daemon.json

    1
    2
    3
    {
    "data-root": "/new/path/docker"
    }
  4. 重启服务

    1
    sudo systemctl start docker

镜像加速器配置(针对国内用户)

1
2
3
4
5
6
7
8
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}

配置生效:每次修改daemon.json后,需执行 sudo systemctl restart docker

其他常用配置

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"storage-driver": "overlay2",
"live-restore": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
},
"debug": false,
"experimental": false
}

4. Docker容器管理与编排命令

容器生命周期管理

功能 命令示例 说明
运行容器 docker run -d --name web -p 80:80 nginx:alpine 后台运行,命名,端口映射
列出容器 docker ps -a 查看所有容器(含停止的)
启动/停止 docker start/stop web 启动/停止已有容器
重启容器 docker restart web 重启运行中的容器
暂停/恢复 docker pause/unpause web 暂停/恢复容器进程
删除容器 docker rm -f web 强制删除运行中的容器
进入容器 docker exec -it web sh 交互式进入运行中的容器
查看日志 docker logs -f --tail 100 web 实时查看最后100行日志

镜像管理

功能 命令示例 说明
拉取镜像 docker pull nginx:alpine 拉取指定标签镜像
列出镜像 docker imagesdocker image ls 查看本地镜像
构建镜像 docker build -t myapp:v1 . 使用当前目录Dockerfile构建
推送镜像 docker push myrepo/myapp:v1 推送到镜像仓库
删除镜像 docker rmi nginx:alpine 删除本地镜像
查看历史 docker history nginx:alpine 查看镜像构建历史
保存/加载 docker save -o nginx.tar nginx:alpine docker load -i nginx.tar 导出/导入镜像文件

Docker Compose编排

docker-compose.yml 示例(定义多服务应用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
networks:
- app-network

db:
image: postgres:13
environment:
POSTGRES_PASSWORD: secret
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- app-network

volumes:
postgres-data:

networks:
app-network:
driver: bridge

常用Compose命令

功能 命令示例 说明
启动服务 docker-compose -f qsh-compose.yml -p qsh up -d 后台启动所有服务
查看状态 docker-compose ps 查看服务运行状态
查看日志 docker-compose logs -f web 跟踪特定服务日志
停止服务 docker-compose -f qsh-compose.yml -p qsh down 停止并移除所有资源
构建服务 docker-compose build 重新构建服务镜像
执行命令 docker-compose exec db psql -U postgres 在服务容器中执行命令
扩展服务 docker-compose up -d --scale web=3 将web服务扩展到3个实例

compose文件若引用dockerfile,dockerfile内有相对路径引用的外部文件,则相对路径以compose文件为基础。

其他实用命令

功能 命令示例 说明
查看资源使用 docker stats 实时查看容器资源使用情况
查看系统信息 docker info 查看Docker系统信息
数据卷管理 docker volume ls/create/rm 管理数据卷
网络管理 docker network ls/create/rm 管理网络
清理资源 docker system prune -a -f 清理所有未使用的资源
清空json.log 日志文件 sudo sh -c 'find /var/lib/docker/containers -name "*-json.log" -exec truncate -s 0 {} \;' 保留文件,仅情况内容
删除json.log 日志文件 sudo find /var/lib/docker/containers -name "*-json.log" -delete 删除文件

总结

Docker提供了一套完整的容器化解决方案,从镜像构建、容器运行到服务编排。与nerdctl+containerd技术栈相比,Docker更加一体化、开箱即用,适合独立应用部署、开发测试环境和中小型项目

选择建议

  • 如果需要与Kubernetes深度集成、更轻量的运行时、生产级集群,选择nerdctl+containerd
  • 如果是老项目维护,或者追求快速上手、一体化体验、独立容器部署或小型项目编排,选择Docker。

掌握Docker的基本概念、安装配置和常用命令,能够显著提升应用部署的效率和一致性,是现代开发运维的必备技能。