Docker 入门
作者:唐亚峰 | battcn
字数统计:1.4k 字
学习目标
掌握 Docker 基础知识,为容器化部署 Wemirr Platform 打下基础
什么是 Docker?
Docker 是一个开源的容器化平台,可以将应用及其依赖打包成一个轻量级的容器,实现"一次构建,到处运行"。
Docker vs 传统部署
| 对比项 | 传统部署 | Docker 部署 |
|---|---|---|
| 环境一致性 | 环境差异大 | 环境完全一致 |
| 部署速度 | 手动安装依赖,耗时长 | 秒级启动 |
| 资源隔离 | 进程级别 | 容器级别 |
| 迁移难度 | 复杂 | 简单 |
| 扩展性 | 手动扩展 | 一键扩展 |
安装 Docker
macOS
bash
# 方式一:下载 Docker Desktop
# https://www.docker.com/products/docker-desktop/
# 方式二:使用 Homebrew
brew install --cask dockerWindows
- 下载
Docker Desktop for Windows https://www.docker.com/products/docker-desktop/ - 启用 WSL 2(推荐)或 Hyper-V
- 安装并启动 Docker Desktop
Linux (Ubuntu/Debian)
bash
# 更新包索引
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
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 添加当前用户到 docker 组(免 sudo)
sudo usermod -aG docker $USER验证安装
bash
# 查看版本
docker --version
docker-compose --version
# 运行测试容器
docker run hello-worldDocker 核心概念
镜像(Image)
镜像是一个只读模板,包含创建容器的指令。类比:安装包/ISO 文件。
bash
# 搜索镜像
docker search mysql
# 拉取镜像
docker pull mysql:8.0
# 查看本地镜像
docker images
# 删除镜像
docker rmi mysql:8.0容器(Container)
容器是镜像的运行实例。类比:正在运行的程序。
bash
# 创建并运行容器
docker run -d --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 停止容器
docker stop my-mysql
# 启动容器
docker start my-mysql
# 删除容器
docker rm my-mysql
# 进入容器
docker exec -it my-mysql bash网络(Network)
Docker 网络让容器之间可以相互通信。
bash
# 创建网络
docker network create wemirr
# 查看网络
docker network ls
# 容器加入网络
docker run -d --name mysql --net wemirr mysql:8.0
# 删除网络
docker network rm wemirr为什么要创建 wemirr 网络?
Wemirr 的 附件/docker/docker-compose.yml 默认使用 外部网络 wemirr(external.name: wemirr)。
- 如果你的机器上还没有创建该网络,直接执行
docker-compose up -d会失败 - 生产/测试环境建议统一使用该网络,便于容器互通、迁移
数据卷(Volume)
数据卷用于持久化容器数据。
bash
# 创建数据卷
docker volume create mysql-data
# 挂载数据卷
docker run -d --name mysql -v mysql-data:/var/lib/mysql mysql:8.0
# 查看数据卷
docker volume ls
# 删除数据卷
docker volume rm mysql-data常用命令速查
镜像相关
| 命令 | 说明 |
|---|---|
docker pull <image> | 拉取镜像 |
docker images | 列出本地镜像 |
docker rmi <image> | 删除镜像 |
docker build -t <name> . | 构建镜像 |
docker tag <image> <new-name> | 重命名镜像 |
容器相关
| 命令 | 说明 |
|---|---|
docker run <image> | 创建并启动容器 |
docker ps | 列出运行中容器 |
docker ps -a | 列出所有容器 |
docker stop <container> | 停止容器 |
docker start <container> | 启动容器 |
docker restart <container> | 重启容器 |
docker rm <container> | 删除容器 |
docker logs <container> | 查看容器日志 |
docker exec -it <container> bash | 进入容器 |
docker run 常用参数
| 参数 | 说明 | 示例 |
|---|---|---|
-d | 后台运行 | docker run -d nginx |
--name | 指定容器名 | --name my-nginx |
-p | 端口映射 | -p 8080:80 |
-v | 数据卷挂载 | -v /data:/app/data |
-e | 环境变量 | -e MYSQL_ROOT_PASSWORD=123456 |
--net | 指定网络 | --net wemirr |
--restart | 重启策略 | --restart always |
Wemirr 中间件安装
Wemirr 官方中间件版本
Wemirr 后端仓库内置了可直接使用的中间件编排文件:
- 路径:
wemirr-platform/附件/docker/docker-compose.yml
该文件内的镜像版本如下(建议以此为准,避免文档与实际不一致):
| 组件 | 镜像 | 版本 |
|---|---|---|
| MySQL | mysql | 8.0.19 |
| Redis | redis | 5.0 |
| Nacos | nacos/nacos-server | 2.4.2 |
| RabbitMQ | docker.io/macintoshplus/rabbitmq-management | 镜像未固定 tag(以仓库文件为准) |
创建网络
bash
docker network create wemirrMySQL
bash
docker run -d \
--name mysql \
--net wemirr \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
--restart always \
mysql:8.0.19 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ciRedis
bash
docker run -d \
--name redis \
--net wemirr \
-p 6379:6379 \
-v redis-data:/data \
--restart always \
redis:5.0 \
redis-server --appendonly yesNacos
bash
docker run -d \
--name nacos \
--net wemirr \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
-e MODE=standalone \
--restart always \
nacos/nacos-server:2.4.2关于 Nacos 数据源
仓库内置的 附件/docker/docker-compose.yml 采用 standalone 模式启动 Nacos,并未强制绑定 MySQL。
如果你希望让 Nacos 元数据落库到 MySQL,请以 Nacos 官方文档为准增加数据库相关环境变量,并确保初始化 Nacos 的表结构。
RabbitMQ(动态数据源/消息总线相关)
Wemirr 仓库提供的编排文件里包含 RabbitMQ(管理端口也已映射):
bash
docker run -d \
--name wemirr-platform-rabbitmq \
--net wemirr \
-p 5671:5671 \
-p 5672:5672 \
-p 15672:15672 \
-p 25672:25672 \
--restart always \
docker.io/macintoshplus/rabbitmq-management管理后台:
http://localhost:15672
账号密码以该镜像默认配置为准;如果你在生产环境使用,建议自定义账号/密码并限制端口暴露。
