# 一、Docker 环境
# 1、Docker 安装
yum install docker # 速度慢
docker --version
Docker 在 centos 上目前有三种安装方式。下面我们采用
具体见:https://docs.docker.com/engine/install/centos/
# 设置docker存储库(使用阿里的镜像)
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
# 安装docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动docker
systemctl start docker
# 开机自启
systemctl enable docker
拓展:docker 镜像加速
要注意是的,registry-mirrors 的值可以使用自己的阿里云镜像服务,具体位置如下:
阿里云-容器镜像服务 ACR-管理控制台-镜像工具-镜像加速器
# 编写docker/daemon.json配置文件
mkdir -p /etc/docker
vim /etc/docker/daemon.json
# 添加
{
"registry-mirrors": ["https://7ykbt77s.mirror.aliyuncs.com"]
}
# 使配置文件生效
systemctl daemon-reload
systemctl restart docker
# 2、docker-compose 安装
- 安装
# 官方
curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
# 国内
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
- 卸载
rm /usr/local/bin/docker-compose
# 3、Portainer 工具
官网:
https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
docker volume create portainer_data
docker run -p 8000:8000 -p 9000:9000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
-d portainer/portainer-ce:2.9.3
- 访问
# 服务器ip地址:9000
admin
[密码设置]
# 二、项目环境
# 准备工作
# 1、目录说明
服务器的文件目录说明:
# 存放docker镜像的地方
docker search redis # docker hub
# 存放软件环境
mkdir -p /data/docker_service
# ----------
# 临时存放Git项目代码
# mkdir -p /home/app_code
# 存放已部署上线的项目
# mkdir -p /data/app
# 2、端口说明
由于本身服务器中可以已经配置了一套 Centos 环境,使用 docker run 启动 Docker 容器,端口映射时默认加 1。
Centos 环境下(直接本地安装的端口) | Docker 环境下(映射到本地的端口) |
---|---|
MySQL --> 3306 | MySQL --> 3307 |
Redis --> 6379 | Redis --> 6380 |
Nginx --> 80 | Nginx --> 81 |
# 后端
# 1、JDK 使用
# 可以忽略(FROM作为基础镜像时会自动安装)
docker pull openjdk:8
# 前端
# 1、Nginx 使用
# 可以忽略(FROM作为基础镜像时会自动安装)
docker pull nginx:1.17.10
拷贝配置文件 nginx.conf
# 方式1
docker run --name nginx -p 81:80 -d nginx:1.17.10
mkdir -p /sources/nginx/conf
docker cp nginx:/etc/nginx/nginx.conf /data/docker_service/nginx/conf/nginx.conf
docker rm -f nginx
# 方式2
# (当然也可以离线下载nginx-1.17.10.tar.gz --- 然后拿取里面的nginx.conf 备用)
mkdir -p /sources/nginx/conf
cp -p /root/code-environment/conf-source/nginx.conf /data/docker_service/nginx/conf
# 拉取镜像
docker pull nginx:1.17.10
docker images
# 初始化容器(后台守护式运行)
docker run --name nginx -p 81:80 --privileged=true \
-v /data/docker_service/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/docker_service/nginx/html:/usr/share/nginx/html \
-v /data/docker_service/nginx/logs:/var/log/nginx \
-d nginx:1.17.10
# 三、项目数据
# 1、Mysql 使用
# 拉取镜像
docker pull mysql:5.7.40
docker images
# 初始化容器(后台守护式运行)
docker run -p 3307:3306 --name mysql --privileged=true \
-e MYSQL_ROOT_PASSWORD=mysql666 \
-d mysql:5.7.40
# 进入容器测试
docker ps -a
docker exec -it mysql /bin/bash
exit
# 远程连接测试
# 使用Navicat等工具进行连接测试即可
拓展:字符编码处理
docker run -p 3307:3306 --name mysql --privileged=true \
-v /data/docker_service/mysql/conf:/etc/mysql/conf.d \
-v /data/docker_service/mysql/data:/var/lib/mysql \
-d mysql:5.7.40 \
-e MYSQL_ROOT_PASSWORD=mysql666 \
docker 容器 mysql:5.7.40 默认的字符编码为 utf8mb4
,它相较于 utf8 编码来说支持更广泛的字符范围,包括 Emoji 表情、一些不常见的汉字、特殊符号等。
但如果我们的应用程序只需要处理常规文本,没有特殊字符需求,并且想要节省一些存储空间,那么 utf8 可能足够。
# 编写my.cof文件
vim /sources/mysql/conf/my.cnf
[mysql]
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
character-set-server=utf8
socket=/var/lib/mysql/mysql.sock
basedir=/data/local_service/mysql
datadir=/data/local_service/mysql/data
port = 3306
max_connections=200
max_allowed_packet=16M
lower_case_table_names=1
# 重启mysql容器
docker restart mysql
# 检查是否配置成功
docker exec -it mysql /bin/bash
mysql -uroot -p
> SHOW VARIABLES LIKE 'character%';
> quit
# 2、Redis 使用
# 拉取镜像
docker pull redis:6.0.8
docker images
# 初始化容器(后台守护式运行)
docker run -p 6380:6379 --name redis --privileged=true \
-d redis:6.0.8 \
--requirepass "redis666"
# 四、Docker 思考 🎈
docker 适合跑轻量级或分布式数据库,当 docker 服务挂掉,会自动启动新容器,而不是继续重启容器服务
# 1、对比本地
使用 docker 安装环境的过程要简单的多:
- 不需要对每个服务设置开机自启了(ruoyi 容器运行状态由 docker 决定)
- 不需要对每个服务设置环境变量(宿主是 docker)
- 像 mysql、redis 等容器的密码设置仅使用 参数即可配置成功
- 可以同时安装多个版本的同类环境(docker 可以进行版本管理)
需要自定义配置文件的换,通过 docker 的 -v 进行映射即可
# 2、docker 优势
# -- 使用方式 1
将除 git、node、Maven 外的环境,都以 docker 镜像的方式存在
缺点:相较于方式 1,虽然 docker 环境被多个项目复用,但好像和在服务器本地安装环境没什么两样
优点 1:利用 Dockerfile 启动一个一个的前后端项目,结合 docker-compose 可以更加方便管理每个项目。
优点 2:由于使用的是 Docker,项目的 👏 数据(mysql、redis 等)可以非常方便的移植
# -- 使用方式 2
拉取一个 centos7 镜像,然后在里面进行一个完整的项目部署
缺点:部署过程依旧繁琐,docker 环境不能被多个项目复用
优点:可移植,一个镜像即一个完整的项目