# 一、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 环境不能被多个项目复用

优点:可移植,一个镜像即一个完整的项目

更新于 : 8/7/2024, 2:16:31 PM