环境搭建——docker-compose搭建
1.Docker 的作用
1.什么是 Docker?
Docker 是一个开源的容器化平台,可以帮助我们快速部署和管理应用程序。简单来说,它就像一个“打包箱”,把程序运行所需的一切打包在一起(包括代码、依赖库、运行环境等),放到任何一台电脑或服务器上都可以直接运行,而不用担心环境不兼容的问题。
2.Docker 在 IM 项目中的作用
在 IM 项目中,我们需要用到很多中间件,比如数据库(MySQL、Redis)、消息队列(Kafka、RabbitMQ),还有后端服务和前端项目。这些中间件通常都需要复杂的安装和配置工作,而 Docker 的主要作用是 简化这些部署操作。
为什么使用 Docker?
-
避免环境差异:
开发环境和生产环境可能会有很大的不同,比如不同版本的操作系统或依赖库。而 Docker 提供了一个一致的运行环境,解决了“在我电脑上可以运行,换到服务器上就不行”的问题。 -
节省时间:
使用 Docker,我们可以通过一条命令快速启动所需的中间件,而不需要逐步手动安装。 -
便于维护:
如果我们需要升级中间件或者迁移项目,只需修改 Docker 配置文件,其他操作几乎不用改动。 -
提高效率:
Docker 可以让所有团队成员的开发环境保持一致,避免配置不当导致的功能失效。
3.举个例子:传统方式 vs Docker
假设我们需要在 IM 项目中使用 MySQL 数据库:
-
传统方式:
-
下载 MySQL 安装包。
-
按步骤安装 MySQL,配置用户名、密码。
-
手动启动 MySQL 服务,并检查是否可以正常使用。
问题:
传统安装方式需要关注很多细节,比如操作系统兼容性、文件路径配置等。一旦有一步出错,就可能导致无法运行。 -
-
使用 Docker:
-
编写一段简单的配置文件,定义 MySQL 的版本和初始配置。
-
使用 Docker 一键启动,MySQL 直接可以运行。
优势:
- 简单快速: 几分钟内完成部署。
- 容易扩展: 如果需要多个 MySQL 实例,只需调整配置即可。
- 可移植性: 换到其他服务器上,只需要复制配置文件。
-
总结
Docker 是一种非常高效的工具,能够让中间件的部署变得简单、快捷,同时也大幅降低了出错的可能性。在 IM 项目中,Docker 的核心作用就是:简化部署、保证环境一致性、节省时间。
2.购买和设置服务器
在使用 Docker 部署 IM 项目前,我们需要先准备一个服务器。服务器是项目运行的基础,就像家用电器需要插座一样,我们的程序需要一个稳定的环境来运行。
1. 为什么需要服务器?
本地电脑虽然可以运行程序,但它有以下问题:
- 不稳定: 如果你的电脑关机或断网,程序就无法运行。而服务器可以 24 小时不间断运行。
- 访问限制: 本地电脑的 IP 地址是动态的,别人无法通过固定的地址访问程序。服务器有固定的公网 IP,可以让其他人随时访问。
- 性能需求: IM 项目需要运行多个中间件,本地电脑可能性能不足,而服务器的配置通常更高。
因此,我们需要购买一台云服务器,用来部署和运行我们的项目。
2. 购买服务器
推荐平台:
市面上有很多提供云服务器的厂商,比如腾讯云、阿里云、华为云等。这里以 腾讯云 为例,讲解如何购买服务器。
购买步骤:
-
登录腾讯云官网
打开 腾讯云官网,注册一个账号。如果已有账号,直接登录。 -
选择服务器类型
- 地域选择: 选择靠近你的用户的地域,比如中国大陆用户可以选择“华北”或“华东”地区。
- 配置选择: 根据项目的需求,选择合适的配置(比如 2 核 CPU、4G 内存、50G 硬盘)。
- 小提示: 一开始可以选择较低的配置,后续可以随时升级。
-
操作系统选择:
- 选择 Linux 系统,推荐使用 CentOS 7.9(稳定、适合 Docker 部署)。
-
购买时长:
- 一般建议按月购买,先尝试使用,后续可以续费或调整配置。
-
支付订单:
填写完所有配置后,确认订单并完成支付。
3. 设置登录方式
为什么要设置登录方式?
服务器默认需要用户名和密码登录,但这既不安全也不方便。为了更安全快速地登录,我们使用 密钥登录(基于公钥和私钥的方式)。
密钥登录原理:
- 服务器生成一对密钥:公钥 和 私钥。
- 公钥 存放在服务器上,私钥 存放在你的本地电脑上。
- 当你登录时,服务器会通过公钥和私钥配合,验证你的身份,避免使用密码。
设置步骤:
-
生成密钥对:
- 在购买服务器时,选择“使用密钥登录”。
- 点击“新建密钥对”,会自动生成一对密钥。
- 保存私钥文件: 私钥文件(.pem 格式)会下载到你的电脑,请妥善保存。
-
绑定密钥到服务器:
购买完成后,腾讯云会自动将公钥绑定到你的服务器。
4. 使用 Xshell 登录服务器
Xshell 是什么?
Xshell 是一款终端工具,用来连接服务器,执行各种操作。简单来说,它是你和服务器之间的“遥控器”。
登录步骤:
-
下载并安装 Xshell:
到官网 Xshell 下载页面 下载并安装。 -
新建会话:
- 打开 Xshell,点击“新建会话”。
- 在“主机”一栏,输入你的服务器公网 IP 地址(可在腾讯云控制台查看)。
- 在“用户名”一栏,输入
root
(Linux 系统的默认管理员账号)。 - 在“连接方式”中选择“密钥”。
-
配置密钥:
- 点击“浏览”,选择刚刚保存的私钥文件。
- 如果密钥文件受密码保护,需要输入对应的密码。
-
连接服务器:
点击“确定”,然后点击“连接”。如果一切顺利,你会看到类似以下内容的欢迎界面:Welcome to CentOS Linux 7
5. 总结
到这里,你已经成功购买并登录到一台云服务器。服务器就像是我们项目的“家”,接下来,我们将在这台服务器上配置 Docker 环境,让它具备部署中间件的能力。
3.配置 Docker 环境
接下来我们要配置 Docker 环境。Docker 是一个非常流行的工具,可以用来快速部署和运行程序。
1. 什么是 Docker?
Docker 是一种容器化技术,可以帮助你将程序和它的运行环境打包到一个“容器”中。这个容器就像是一个小型虚拟机,里面包含了运行程序所需的所有东西(代码、库、依赖等)。
Docker 的好处是:
- 运行环境一致: 不管在你的电脑、服务器,还是其他地方运行,效果都是一样的。
- 部署快: 一条命令就可以启动一个程序。
- 资源利用高: 比传统虚拟机更轻量,占用资源少。
2. 安装 Docker
为什么需要安装 Docker?
因为 Docker 是我们项目的核心工具,用来运行各种中间件(比如 MySQL、Redis 等)。安装 Docker 是项目启动的第一步。
步骤 1:阿里云镜像源
直接通过官方源安装 Docker 可能会比较慢,所以我们先使用阿里云提供的加速镜像源。
输入以下命令:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
解释:
yum-config-manager
是 CentOS 中管理软件源的工具。--add-repo
是添加一个新软件源的命令。- 后面的 URL 是阿里云的 Docker 软件源地址。
这个操作会告诉系统,从阿里云下载 Docker,速度更快。
步骤 2:安装 Docker
执行以下命令,正式安装 Docker:
yum install -y docker-ce
解释:
yum
是 CentOS 的包管理工具,用来安装和管理软件。install
表示安装软件。-y
表示自动回答“是”,不用每一步都手动确认。docker-ce
是 Docker 的社区版本(Community Edition)。
这个命令会下载并安装 Docker 的最新版本。
步骤 3:启动 Docker 服务
安装完成后,需要启动 Docker 服务才能使用。运行以下命令:
service docker start
解释:
service
是用来管理系统服务的命令。docker
是服务的名字。start
表示启动服务。
启动后,你的服务器就可以运行 Docker 容器了。
步骤 4:设置开机自启
为了避免服务器重启后 Docker 停止工作,我们需要设置 Docker 开机自启:
chkconfig docker on
解释:
chkconfig
是用来管理服务是否开机自启的工具。docker
是服务名字。on
表示开启开机自启。
3. 测试 Docker 是否安装成功
输入以下命令检查 Docker 是否正常安装:
docker version
解释:
- 这个命令会显示 Docker 的版本信息。
- 如果看到类似以下输出,说明 Docker 安装成功:
Client: Docker Engine - Community Version: 20.xx.xx API version: 1.xx
4. 设置国内镜像加速
Docker 从国外拉取镜像(程序的运行环境)时可能会比较慢,所以我们需要配置国内镜像加速。
步骤 1:编辑配置文件
执行以下命令,打开 Docker 的配置文件:
vi /etc/docker/daemon.json
解释:
/etc/docker/daemon.json
是 Docker 的配置文件,里面可以设置镜像源等参数。
步骤 2:添加以下内容
按下 i
键进入编辑模式,粘贴以下内容:
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"live-restore": true
}
解释:
"registry-mirrors"
:指定 Docker 从哪个镜像源拉取镜像,这里使用腾讯云的加速镜像。"live-restore"
:设置为true
,表示当 Docker 服务停止时,容器依然可以继续运行。
编辑完成后,按下 Esc
键退出编辑模式,输入 :wq
保存并退出。
步骤 3:重启 Docker
修改完配置后,需要重启 Docker 服务让配置生效:
systemctl daemon-reload
service docker restart
解释:
systemctl daemon-reload
:重新加载配置文件。service docker restart
:重启 Docker 服务。
步骤 4:验证镜像加速是否生效
输入以下命令查看 Docker 信息:
docker info
在输出中找到以下字段:
Registry Mirrors:
https://mirror.ccs.tencentyun.com/
如果显示了加速器地址,说明镜像加速配置成功。
4.安装 Docker Compose
在完成 Docker 的安装后,我们需要安装 Docker Compose。这是一个工具,可以通过一个配置文件(docker-compose.yml
)来一次性启动多个容器,非常适合用来管理复杂的项目环境,比如我们这个 IM 项目。
1. 什么是 Docker Compose?
Docker Compose 是 Docker 的一个补充工具,用来管理多个容器的运行。它可以让你通过一个配置文件描述项目中需要用到的所有服务,以及它们之间的依赖关系,比如:
- 启动 MySQL 数据库容器
- 启动 Redis 缓存容器
- 启动 Web 应用容器
只需要一条命令,就可以轻松地同时启动这些服务,而不需要逐个启动。
总结:Docker 管理单个容器,而 Docker Compose 管理多个容器。
2. 为什么需要安装 Docker Compose?
- 简化管理:如果我们用手动命令来启动多个容器,过程会非常繁琐,容易出错。
- 便于维护:通过
docker-compose.yml
文件,团队成员可以快速复现同样的环境。 - 自动处理依赖:比如 Web 服务需要先启动数据库,Docker Compose 会帮你自动处理这些顺序。
3. 安装 Docker Compose
步骤 1:切换到目标目录
我们需要将 Docker Compose 安装到 /usr/local/bin
,这个目录是 Linux 系统中放置可执行文件的地方。输入以下命令切换目录:
cd /usr/local/bin
解释:
cd
是“change directory”的缩写,用来切换工作目录。/usr/local/bin
是系统的路径目录,存放全局命令,这样我们就可以直接使用docker-compose
。
步骤 2:上传安装文件
我们需要将 Docker Compose 的安装文件上传到服务器。这里用到了 rz
命令(如果没有安装 rz
,需要先安装 yum install lrzsz
)。
运行以下命令启动文件上传工具:
rz
解释:
rz
是一种文件传输工具,可以从本地电脑上传文件到服务器。- 在执行命令后,会弹出一个文件选择窗口,从本地选择
docker-compose
安装文件上传到服务器。
上传成功后,你会看到文件已经出现在 /usr/local/bin
目录下。
步骤 3:赋予执行权限
为了让 docker-compose
可以被执行,我们需要为它赋予可执行权限。运行以下命令:
sudo chmod +x /usr/local/bin/docker-compose
解释:
chmod +x
是用来为文件添加执行权限的命令。/usr/local/bin/docker-compose
是我们刚刚上传的文件。
执行完这个命令后,docker-compose
就变成了一个可执行程序。
步骤 4:检查安装是否成功
输入以下命令查看 Docker Compose 的版本信息,验证是否安装成功:
docker-compose --version
解释:
- 这个命令会显示 Docker Compose 的版本号。如果能看到类似以下内容,说明安装成功:
docker-compose version 1.29.2, build 5becea4c
5.部署服务容器
在完成 Docker 和 Docker Compose 的安装与测试后,接下来是利用 Docker Compose 部署 IM 项目所需的服务容器。这一步是项目环境搭建的核心,通过合理的配置文件和命令,将所有服务容器化,形成一个整体的运行环境。
1. 定义 Docker Compose 配置文件
操作步骤:
-
进入项目目录:
cd /path/to/your/project
原因: 确保
docker-compose.yml
文件保存在项目根目录中,方便管理和启动服务。 -
创建
docker-compose.yml
文件:vi docker-compose.yml
原因:
docker-compose.yml
是定义服务容器的核心文件,所有需要启动的容器信息都写在这里。 -
编辑配置文件: 根据 IM 项目需要的服务,例如数据库、后端服务、前端服务等,编写以下内容:
示例配置:
version: '3.8' services: db: image: mysql:8.0 container_name: im_mysql environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: im_database MYSQL_USER: im_user MYSQL_PASSWORD: im_password ports: - "3306:3306" volumes: - db_data:/var/lib/mysql networks: - im_network backend: image: openjdk:17 container_name: im_backend ports: - "8080:8080" volumes: - ./backend:/app working_dir: /app command: ["java", "-jar", "im-backend.jar"] depends_on: - db networks: - im_network frontend: image: node:16 container_name: im_frontend ports: - "3000:3000" volumes: - ./frontend:/app working_dir: /app command: ["npm", "start"] networks: - im_network volumes: db_data: networks: im_network: driver: bridge
配置解读:
version: '3.8'
:指定 Docker Compose 的版本。services
:定义服务,每个服务代表一个容器:- db:MySQL 容器,提供数据库服务。
- backend:后端服务容器,运行 Java 程序。
- frontend:前端服务容器,运行 Node.js 项目。
depends_on
:确保服务启动的顺序,例如后端依赖数据库。networks
:让所有服务共享同一个网络,便于容器间通信。
2. 启动服务
操作步骤:
-
一键启动服务:
docker-compose up -d
原因:
docker-compose up
启动所有在docker-compose.yml
文件中定义的服务。-d
表示以后台模式运行,不占用终端。
-
检查服务运行状态:
docker ps
原因: 确保所有服务都处于
Up
状态。
3. 验证服务是否正常运行
数据库验证:
- 进入 MySQL 容器:
输入docker exec -it im_mysql mysql -u root -p
rootpassword
登录 MySQL。 - 查看数据库是否创建成功:
SHOW DATABASES;
后端服务验证:
- 在浏览器中访问:
原因: 检查后端服务是否正确启动,是否返回预期的 API 或页面。http://<服务器IP>:8080
前端服务验证:
- 在浏览器中访问:
原因: 检查前端页面是否正确显示,是否能与后端通信。http://<服务器IP>:3000
4. 停止和重启服务
停止所有服务:
docker-compose down
原因: 停止服务并释放资源。
重启所有服务:
docker-compose up -d
原因: 恢复服务运行状态,所有配置和数据依然保留。
通过以上步骤,我们已经成功利用 Docker Compose 部署了 IM 项目所需的服务容器。如果需要添加更多的服务,只需修改 docker-compose.yml
文件即可,整个过程高效且便捷。