Skip to content

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 docker

Windows

  1. 下载
    Docker Desktop for Windows
    https://www.docker.com/products/docker-desktop/
  2. 启用 WSL 2(推荐)或 Hyper-V
  3. 安装并启动 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-world

Docker 核心概念

镜像(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 默认使用 外部网络 wemirrexternal.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

该文件内的镜像版本如下(建议以此为准,避免文档与实际不一致):

组件镜像版本
MySQLmysql8.0.19
Redisredis5.0
Nacosnacos/nacos-server2.4.2
RabbitMQdocker.io/macintoshplus/rabbitmq-management镜像未固定 tag(以仓库文件为准)

创建网络

bash
docker network create wemirr

MySQL

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_ci

Redis

bash
docker run -d \
  --name redis \
  --net wemirr \
  -p 6379:6379 \
  -v redis-data:/data \
  --restart always \
  redis:5.0 \
  redis-server --appendonly yes

Nacos

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

账号密码以该镜像默认配置为准;如果你在生产环境使用,建议自定义账号/密码并限制端口暴露。

下一步