Docker的安装与常用服务部署实践
一、引言
Docker是目前最常用的容器化部署工具之一。它可以将应用程序及其运行环境打包为镜像,再通过容器的方式在不同服务器上快速运行,从而降低环境差异带来的部署成本。
本文只讨论Docker在Linux发行版操作系统中的安装和使用,不涉及Docker Desktop、Windows Server或macOS环境。文章内容以服务器部署实践为主,覆盖Docker Engine安装、国内镜像源配置、常用命令,以及Nginx、MySQL、Redis、RabbitMQ等常用服务的容器部署。
二、安装前准备
1.查看系统信息
在安装Docker前,建议先确认当前系统发行版、内核版本和CPU架构。
1 | cat /etc/os-release |
常见服务器系统如Ubuntu、Debian、CentOS、Rocky Linux、AlmaLinux、RHEL、Fedora等都可以安装Docker Engine。如果是生产环境,建议优先选择仍处于维护周期内的系统版本。
2.卸载旧版本组件
如果服务器之前通过系统默认仓库安装过旧版本Docker或兼容组件,可能会与官方Docker CE包冲突,安装前可以先清理。
Ubuntu、Debian等Debian系系统执行:
1 | for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do |
CentOS、RHEL、Rocky Linux、AlmaLinux、Fedora等RedHat系系统执行:
1 | sudo dnf remove -y docker \ |
上述命令只会删除软件包,不会主动删除/var/lib/docker中的镜像、容器和数据卷。如果服务器上已有重要容器数据,不要直接删除该目录。
三、安装Docker Engine
1.使用官方软件仓库安装
生产环境推荐使用软件仓库方式安装,后续升级和维护更清晰。
1)Ubuntu/Debian安装
安装基础依赖并添加Docker官方GPG密钥。
1 | sudo apt-get update |
添加Docker软件源。
1 | sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF |
安装Docker Engine、命令行工具、containerd、Buildx和Docker Compose插件。
1 | sudo apt-get update |
如果使用的是Linux Mint、Deepin等衍生系统,${ID}可能不是ubuntu或debian,此时需要根据上游系统手动调整软件源地址和版本代号。
2)RedHat系系统安装
安装仓库管理工具。
1 | sudo dnf -y install dnf-plugins-core |
根据发行版选择一个仓库地址进行添加。
1 | # CentOS |
三条命令不要全部执行,应按当前系统选择其中一条。对于Rocky Linux、AlmaLinux等兼容发行版,如果官方源适配不顺利,可以优先使用后文介绍的LinuxMirrors脚本方式安装。
安装Docker相关软件包并启动服务。
1 | sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
2.验证安装结果
安装完成后查看版本信息。
1 | docker version |
执行官方测试镜像。
1 | sudo docker run --rm hello-world |
如果输出欢迎信息,说明Docker Engine可以正常拉取镜像并运行容器。
3.配置普通用户执行Docker命令
默认情况下,普通用户执行docker命令可能需要加sudo。如果希望当前用户直接使用docker命令,可以将用户加入docker用户组。
1 | sudo groupadd docker || true |
然后重新验证:
1 | docker run --rm hello-world |
需要注意的是,docker用户组拥有较高权限。生产服务器上是否允许普通用户直接操作Docker,应结合服务器权限管理要求来决定。
四、国内镜像源配置
1.区分Docker CE软件源和镜像加速器
配置国内源时,容易混淆两个概念:
Docker CE软件源:用于安装和升级docker-ce、docker-ce-cli、containerd.io等软件包;Docker Registry镜像加速器:用于加速docker pull拉取镜像的过程。
如果已经安装好了Docker,但拉取镜像很慢或失败,通常只需要配置Docker Registry镜像加速器。如果连Docker软件包都安装失败,则需要同时考虑系统软件源和Docker CE软件源。
2.使用LinuxMirrors脚本安装和换源
SuperManito/LinuxMirrors是一个开源的GNU/Linux换源脚本项目,同时提供Docker安装与换源脚本。它支持多种Linux发行版,适合国内网络环境下快速安装Docker或更换镜像加速器。
安装Docker Engine并在交互过程中选择软件源和镜像仓库:
1 | bash <(curl -sSL https://linuxmirrors.cn/docker.sh) |
如果服务器已经安装过Docker,只想更换镜像加速器,可以使用--only-registry参数:
1 | bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --only-registry |
也可以直接指定镜像仓库地址,多个地址之间使用英文逗号分隔:
1 | bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ |
如果需要直接使用GitHub仓库中的脚本,也可以执行:
1 | bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/DockerInstallation.sh) --only-registry |
使用一键脚本前,建议先阅读项目说明和脚本内容,确认脚本行为符合当前服务器环境要求。对于生产环境,更建议在测试服务器验证后再应用到正式服务器。
3.手动配置镜像加速器
如果不想使用脚本,也可以直接编辑/etc/docker/daemon.json配置镜像加速器和日志轮转。
1 | sudo mkdir -p /etc/docker |
重新加载并重启Docker服务。
1 | sudo systemctl daemon-reload |
查看是否生效。
1 | docker info |
在输出结果中查看Registry Mirrors部分,确认镜像加速器地址已经写入配置。
五、Docker常用命令
1.镜像相关命令
1 | docker pull nginx:stable-alpine |
docker pull用于拉取镜像,docker images用于查看本地镜像,docker rmi用于删除不再需要的镜像。
2.容器相关命令
1 | docker ps |
docker ps只查看正在运行的容器,docker ps -a会查看全部容器。
3.日志和进入容器
1 | docker logs -f --tail=200 容器名或容器ID |
如果镜像基于Alpine Linux构建,容器内通常没有bash,需要使用sh进入。
4.网络和数据卷
1 | docker network ls |
部署多个服务时,建议创建自定义网络,让容器之间通过容器名访问,避免全部依赖宿主机端口。
六、常用服务部署实践
以下示例统一将容器数据放在/opt/docker目录下,便于备份和迁移。执行前先创建公共网络。
1 | docker network create service-net |
1.部署Nginx
创建测试页面。
1 | sudo mkdir -p /opt/docker/nginx/html |
启动Nginx容器。
1 | docker run -d \ |
查看容器状态。
1 | docker ps |
如果云服务器访问不通,需要同时检查安全组、防火墙和宿主机端口占用情况。
2.部署MySQL
创建数据目录和配置目录。
1 | sudo mkdir -p /opt/docker/mysql/data /opt/docker/mysql/conf /opt/docker/mysql/logs |
添加基础配置。
1 | sudo tee /opt/docker/mysql/conf/my.cnf >/dev/null <<'EOF' |
启动MySQL 8容器。
1 | docker run -d \ |
进入数据库。
1 | docker exec -it mysql8 mysql -uroot -p |
正式部署时应修改默认密码,并限制3306端口的公网访问范围。
3.部署Redis
创建配置和数据目录。
1 | sudo mkdir -p /opt/docker/redis/conf /opt/docker/redis/data |
编写Redis配置文件。
1 | sudo tee /opt/docker/redis/conf/redis.conf >/dev/null <<'EOF' |
启动Redis容器。
1 | docker run -d \ |
连接测试。
1 | docker exec -it redis7 redis-cli -a ChangeMe_redis_123 ping |
输出PONG即表示服务正常。
4.部署RabbitMQ
创建数据目录。
1 | sudo mkdir -p /opt/docker/rabbitmq/data |
启动带管理后台的RabbitMQ容器。
1 | docker run -d \ |
访问管理后台:
1 | http://服务器IP:15672 |
默认示例账号为rabbitmq,密码为ChangeMe_rabbitmq_123。正式环境不要继续使用示例密码。
5.使用Docker Compose管理多个服务
单个服务可以使用docker run部署,多个服务更适合使用Docker Compose管理。下面以MySQL和Redis为例。
1 | sudo mkdir -p /opt/docker/compose-demo |
编写compose.yml。
1 | sudo tee compose.yml >/dev/null <<'EOF' |
启动服务。
1 | docker compose up -d |
停止服务。
1 | docker compose down |
如果希望删除容器时同时删除数据卷,需要额外加-v参数,但生产环境不要随意执行。
1 | docker compose down -v |
七、维护与排错
1.查看服务状态
1 | systemctl status docker |
如果容器启动后立即退出,优先查看docker logs输出,一般可以直接定位配置文件错误、端口冲突或权限问题。
2.更新镜像和容器
docker run方式部署的容器需要先拉取新镜像,再删除旧容器并按原参数重新启动。
1 | docker pull redis:7-alpine |
然后重新执行原来的docker run命令。
如果使用Docker Compose部署,则可以执行:
1 | docker compose pull |
3.备份服务数据
对于数据库类服务,优先使用数据库自身的备份工具。例如备份MySQL全部数据库:
1 | sudo mkdir -p /opt/docker/backup |
对于普通文件数据,可以基于挂载目录进行归档。
1 | tar -czf /opt/docker/backup/redis-data.tar.gz -C /opt/docker/redis/data . |
备份前最好先确认服务写入状态,避免在高并发写入时得到不完整数据。
4.清理无用资源
查看磁盘占用:
1 | docker system df |
清理未使用的镜像、停止的容器和构建缓存:
1 | docker system prune |
如果确认连未使用的数据卷也可以清理,再执行:
1 | docker system prune --volumes |
数据卷可能保存数据库、上传文件等业务数据,不要在不了解影响的情况下执行带--volumes的清理命令。
5.常见问题
1)提示permission denied
如果普通用户执行docker ps提示没有权限,说明当前用户还没有正确加入docker用户组,重新执行用户组配置并重新登录即可。
1 | sudo usermod -aG docker $USER |
2)镜像拉取失败
先检查网络和镜像名是否正确,再检查daemon.json中的registry-mirrors是否生效。
1 | docker info |
国内服务器可以优先使用LinuxMirrors的--only-registry方式重新配置镜像加速器。
3)端口无法访问
依次检查容器端口映射、宿主机监听、防火墙和云服务器安全组。
1 | docker ps |
如果使用ufw或firewalld管理防火墙,需要注意Docker会修改底层网络规则。生产环境应统一规划端口开放策略,不要只依赖容器启动命令中的-p参数。
八、总结
在Linux服务器中使用Docker部署服务,核心流程可以总结为:
- 先安装并验证
Docker Engine和Docker Compose插件; - 根据网络环境配置
Docker Registry镜像加速器; - 使用
docker run部署单个服务,使用Docker Compose管理多个服务; - 将业务数据挂载到宿主机固定目录,便于备份、迁移和排错;
- 定期检查日志、磁盘占用、镜像版本和端口暴露范围。
对于个人开发和测试服务器,可以使用LinuxMirrors快速完成安装与换源;对于生产环境,建议先在测试机验证脚本行为,明确数据目录、端口、安全组和备份策略后再上线。
九、参考资料
- Title: Docker的安装与常用服务部署实践
- Author: QingchenJia
- Created at : 2026-05-17 20:43:51
- Updated at : 2026-08-04 16:14:38
- Link: https://qingchenjia.github.io/2026/05/17/Docker的安装与常用服务部署实践/
- License: This work is licensed under CC BY-NC-SA 4.0.