
本文内容覆盖安装、常用命令、存储、网络、Redis 主从、MySQL、Docker Compose、Dockerfile,以及一键安装常用中间件的思路。
一、为什么需要 Docker?
Docker 的核心价值可以用一句话概括:把应用和它的运行环境一起打包,做到“一次构建,到处运行”。
它常被用于:
快速搭建开发、测试环境
隔离不同应用依赖
一键部署 MySQL、Redis、Nacos 等中间件
配合 Docker Compose 管理多容器应用
作为 CI/CD 和云原生应用的基础
下面从安装开始,逐步进入 Docker 的常见用法。
二、安装 Docker(Alibaba Cloud Linux 4)
Alibaba Cloud Linux 4 兼容 RHEL 9 / EL9,默认包管理器为 dnf,yum 只是它的别名,两者命令可以互换。下面以 Alibaba Cloud Linux 4 为例,国内常见云平台还有腾讯云、华为云、青云等。
1. 移除旧版本 Docker
只卸载可能与新版本冲突的 Docker 软件包,不动镜像、容器和卷,数据是安全的:
BASH
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine提示某个包“未安装 / No match for argument”属于正常现象,忽略即可。如果之前装过较新的组件,也可以用同样温和的方式卸载,例如 sudo yum remove docker-ce docker-ce-cli containerd.io。
2. 配置 Docker Yum 源
BASH
# 安装依赖工具
sudo dnf install -y dnf-plugins-core yum-utils wget
# 添加 Docker CE 软件源
# 阿里云 ECS 推荐使用内网源,免流量且速度更快:
sudo wget -O /etc/yum.repos.d/docker-ce.repo \
http://mirrors.cloud.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's|https://mirrors.aliyun.com|http://mirrors.cloud.aliyuncs.com|g' \
/etc/yum.repos.d/docker-ce.repo
# 公网环境则改用阿里云公网源(与上一段二选一):
# sudo wget -O /etc/yum.repos.d/docker-ce.repo \
# https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 修正软件源版本号:Alibaba Cloud Linux 4 的 $releasever 为 4,
# 而 Docker CE 没有对应的 4 目录,需替换为 9(兼容 EL9)
sudo sed -i 's#$releasever#9#g' /etc/yum.repos.d/docker-ce.repo
# 清除并重建缓存
sudo yum clean all
sudo yum makecache不执行
$releasever替换,安装时会因为访问不存在的目录而报404。
3. 安装最新版 Docker
BASH
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这里连同 Buildx 和 Compose 插件一起安装,之后即可直接使用 docker compose 命令。
4. 启动并设置开机自启
BASH
sudo systemctl enable docker --now5. 配置镜像加速
BASH
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://hub.rat.dev",
"https://docker.1panel.live",
"https://docker.xuanyuan.me"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker以上均为公共镜像源,Docker 会按顺序依次尝试;在阿里云 ECS 上还可在控制台“容器镜像服务 ACR → 镜像工具 → 镜像加速器”获取专属地址,并放到列表首位(内网免流量、速度最快)。公共镜像源会不定期变动,建议每季度复核一次。
安装完成后,可以用 docker version 或 docker info 检查是否正常。
三、Docker 常用命令速查
Docker 命令很多,但入门阶段先掌握“镜像”和“容器”两类即可。
1. 容器查看与生命周期
BASH
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 停止容器
docker stop <容器名或ID>
# 启动容器
docker start <容器名或ID>
# 重启容器
docker restart <容器名或ID>
# 查看容器资源占用
docker stats <容器名或ID>
# 查看容器日志
docker logs <容器名或ID>
# 删除指定容器
docker rm <容器名或ID>
# 强制删除指定容器
docker rm -f <容器名或ID>2. 镜像搜索、下载与查看
BASH
# 搜索镜像
docker search nginx
# 下载镜像
docker pull nginx
# 下载指定版本镜像
docker pull nginx:1.30.4
# 查看所有镜像
docker images
# 删除指定 ID 的镜像
docker rmi e784f4560448
# 删除多个镜像
docker rmi bde7d154a67f 94543a6c1aef e784f45604483. 运行容器
BASH
# 运行一个新容器
docker run nginx
# 后台启动容器
docker run -d --name mynginx nginx
# 后台启动并暴露端口
docker run -d --name mynginx -p 80:80 nginx
# 进入容器内部
docker exec -it mynginx /bin/bash4. 提交、保存、加载与推送镜像
BASH
# 提交容器变化,打成一个新的镜像
docker commit -m "update index.html" mynginx mynginx:v1.0
# 保存镜像为指定文件
docker save -o mynginx.tar mynginx:v1.0
# 加载镜像
docker load -i mynginx.tar
# 登录 Docker Hub
docker login
# 重新给镜像打标签
docker tag mynginx:v1.0 leifengyang/mynginx:v1.0
# 推送镜像
docker push leifengyang/mynginx:v1.0四、存储:目录挂载 vs 卷映射
Docker 存储有两种常见方式,初学时要区分清楚:
目录挂载:把宿主机目录挂载到容器内,例如
-v /app/nghtml:/usr/share/nginx/html卷映射:使用 Docker 管理的卷,例如
-v ngconf:/etc/nginx
示例:
BASH
docker run -d -p 99:80 \
-v /app/nghtml:/usr/share/nginx/html \
-v ngconf:/etc/nginx \
--name app03 \
nginx简单理解:
目录挂载适合你明确知道宿主机目录,方便直接修改文件。
卷映射由 Docker 管理,适合持久化数据,迁移和备份更省心。
五、网络:自定义网络与多容器通信
Docker 默认网络下,容器之间可以通过 IP 通信,但 IP 不稳定。更好的方式是创建自定义网络,让容器通过容器名互相访问。
BASH
docker network create mynet1. Redis 主从同步集群
主节点:
BASH
docker run -d -p 6379:6379 \
-v /app/rd1:/data \
--network mynet --name redis01 \
redis:8.10 --requirepass 123456从节点:
BASH
docker run -d -p 6380:6379 \
-v /app/rd2:/data \
--network mynet --name redis02 \
redis:8.10 --replicaof redis01 6379 --masterauth 123456 --requirepass 123456这里 redis02 通过 redis01 这个容器名连接主节点,这就是自定义网络的好处。
补充:教程原本使用的
bitnami/redis镜像,其免费公共仓库自 2025 年 8 月起已迁移、旧版本标签不再维护,因此这里改用官方redis镜像,通过命令行参数配置主从复制。
2. 启动 MySQL
BASH
docker run -d -p 3306:3306 \
-v /app/myconf:/etc/mysql/conf.d \
-v /app/mydata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.4生产环境中不要把密码设置得这么简单,也不要随意暴露到公网。
六、Docker Compose:多容器编排
当容器越来越多,一个个 docker run 会非常麻烦。Docker Compose 可以用一个 YAML 文件描述多个服务。
1. 命令式安装 WordPress
先创建网络:
BASH
docker network create blog启动 MySQL:
BASH
docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \
--network blog \
mysql:8.4启动 WordPress:
BASH
docker run -d -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=123456 \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \
--restart always --name wordpress-app \
--network blog \
wordpress:latest2. 使用 compose.yaml
同样的效果,用 Compose 写起来更清晰:
BASH
name: myblog
services:
mysql:
container_name: mysql
image: mysql:8.4
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=wordpress
volumes:
- mysql-data:/var/lib/mysql
- /app/myconf:/etc/mysql/conf.d
restart: always
networks:
- blog
wordpress:
image: wordpress
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 123456
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress:/var/www/html
restart: always
networks:
- blog
depends_on:
- mysql
volumes:
mysql-data:
wordpress:
networks:
blog:启动:
BASH
docker compose up -d停止并删除容器:
BASH
docker compose down3. Compose 的特性
增量更新:修改 Compose 文件后重新启动,只会触发修改项的重启。
数据不删:默认
down容器时,挂载的卷不会被移除,数据比较安全。
七、Dockerfile:把应用打包成镜像
假设有一个 app.jar,可以这样写 Dockerfile:
BASH
FROM eclipse-temurin:21-jre
LABEL author=leifengyang
COPY app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]构建镜像:
BASH
docker build -t myapp:1.0 .运行:
BASH
docker run -d -p 8080:8080 myapp:1.0Dockerfile 的核心思路是:选择基础镜像、复制文件、暴露端口、指定启动命令。
八、附录:一键安装常用中间件
如果经常需要搭建开发环境,可以用 Docker Compose 一键启动 Redis、MySQL、RabbitMQ、OpenSearch、Kafka、Nacos、Prometheus、Grafana 等中间件。
1. 系统参数调整
BASH
# 关闭内存分页和交换,提升性能
sudo swapoff -a
# 编辑 sysctl 配置
sudo vi /etc/sysctl.conf
# 添加或修改
vm.max_map_count=262144
# 重新加载内核参数
sudo sysctl -p
# 验证
cat /proc/sys/vm/max_map_count2. compose.yaml 注意事项
准备一个 compose.yaml,其中如果包含 Kafka,需要把里面的服务器 IP 改成你自己的 IP,例如:
BASH
119.45.147.122:9094改成:
BASH
你的服务器IP:90943. 启动
在 compose.yaml 所在目录执行:
BASH
docker compose up -d如果重启了服务器,有些容器可能启动失败,再执行一遍:
BASH
docker compose up -d所有程序通常都能恢复运行,并且不会丢失数据。
4. 常用组件访问表
组件(容器名) | 介绍 | 访问地址 | 账号/密码 | 特性 |
|---|---|---|---|---|
Redis(redis) | K-V 库 | 你的IP:6379 | 单密码:123456 | 已开启 AOF |
MySQL(mysql) | 数据库 | 你的IP:3306 | root/123456 | 默认 utf8mb4 |
Rabbit(rabbit) | 消息队列 | 你的IP:15672 | rabbit/rabbit | 暴露 5672 和 15672 |
OpenSearch(opensearch-node1/2) | 检索引擎 | 你的IP:9200 | 无 | 内存 512MB,两个节点 |
opensearch-dashboards | 搜索可视化 | 你的IP:5601 | 无 | |
Zookeeper(zookeeper) | 分布式协调 | 你的IP:2181 | 允许匿名登录 | |
kafka(kafka) | 消息队列 | 你的IP:9092,外部:9094 | 无 | 占用内存 512MB |
kafka-ui(kafka-ui) | Kafka 可视化 | 你的IP:8080 | 无 | |
nacos(nacos) | 注册/配置中心 | 你的IP:8848 | nacos/nacos | 持久化到 MySQL |
nacos-mysql(nacos-mysql) | Nacos 配套数据库 | 你的IP:13306 | root/root | |
prometheus(prometheus) | 时序数据库 | 你的IP:9090 | 无 | |
grafana(grafana) | 可视化监控 | 你的IP:3000 | admin/admin |
注意:以上默认密码仅适合本地学习,生产环境务必修改为强密码,并配置防火墙和安全组。
九、总结
Docker 入门可以按照这条路线学习:
安装 Docker:配置好镜像加速。
掌握常用命令:镜像、容器、日志、进入、提交、推送。
理解存储:目录挂载和卷映射。
理解网络:自定义网络让容器通过名字通信。
使用 Compose:用一个 YAML 管理多容器应用。
编写 Dockerfile:把自己的应用打包成镜像。
一键部署中间件:用 Compose 快速搭建开发环境。
Docker 并不难,关键是多动手。先从一个 Nginx 容器开始,再尝试 MySQL、Redis,最后用 Compose 把多个服务串起来。练完这些,你就已经具备 Docker 的日常使用能力了。



请登录后发表评论