Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

本文主要讲解如何在Linux环境下使用 Docker 部署前后端分离项目,其中涉及到使用 Docker 安装本人项目相关的一些环境 ,例如mysql、rabbitmq、redis,基于CenterOS7.0

Docker 环境安装

1.安装 Docker 客户端

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

2.配置镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://sq2b0kv9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装 Portainer

Portainer 是一个轻量级 Web 端的 Docker 管理 UI,Portainer 够轻松地管理不同的 Docker 环境(Docker 主机或集群)。Portainer 的部署和使用十分简单。Portainer 可以部署为 Linux 容器或 Windows 本机容器,也支持其他平台。Portainer 允许您管理所有 Docker 资源(容器、映像、卷、网络等)!它与独立的 Docker 引擎和 Docker 集群模式兼容。

1.安装

# 拉取官方镜像
docker pull portainer/portainer
# 运行镜像到容器
docker run -d -p 9000:9000\
    --restart=always\
    -v /var/run/docker.sock:/var/run/docker.sock\
    -m 20M --oom-kill-disable --memory-swap=-1\
    --name portainer\
    portainer/portainer

2.访问页面

访问地址:http://localhost:9000,第一次打开需要设置用户名、密码,docker 模式我一般选择 Local 本机模式。通过此工具我们可以更加简便的对镜像和容器进行操作和管理。

登录页

le6ftua7.png

面板页

le6fu44c.png

安装 mysql

# docker search mysql 可通过此命令查看可用版本
# 拉取mysql镜像,默认会拉取最新版本,我这里加上版本号
docker pull mysql:8.0.0
# 查看镜像是否拉取成功
docker images
# 在/home/docker/mysql目录下创建mysql挂载目录
mkdir {data,logs,conf}
# 运行容器
docker run -d -p 3306:3306 -v /home/docker/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /home/docker/mysql/data:/var/lib/mysql -v /home/docker/mysql/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test mysql:8.0.0

说明:

  • --name:容器名
  • -e:配置信息,此处配置 mysql 的 root 用户登陆密码
  • -d:后台运行容器,保证在退出终端后容器继续运行
  • -p:端口映射,此处映射 主机 3306 端口 到 容器的 3306 端口
  • -v:挂载目录

此处需要注意不要直接挂载容器中的 mysql 配置文件目录,可能会将容器内的配置文件目录清空。个人建议将容器中的 my.cnf 文件复制出来进行选择性的修改,再挂载 mysql.cnf 文件即可。

docker cp :用于容器与主机之间的数据拷贝。

# 语法
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
# 实例
docker cp  96f7f14e99ab:/etc/mysql/conf.d/mysqld.cnf /home/docker/mysql/my.cnf

安装 redis

因为 redis 默认配置只能够本地连接,不能进行远程访问,使用 Redis 客户端工具连接都会报错,因此需要手动挂载 redis 配置文件。

# /home/docker/redis目录下新增挂载文件夹
mkdir {data,conf}
# 下载最新版本的Redis镜像
docker pull redis
# 新增redis配置文件
cd /home/docker/redis/conf
touch redis.conf
vim redis.conf

添加以下内容

#bind 127.0.0.1 
protected-mode no
appendonly yes 
requirepass 123456

说明:

  • bind 127.0.0.1 ,注释掉这部分,这是限制 redis 只能本地访问
  • protected-mode:默认 yes,开启保护模式,限制为本地访问
  • appendonly:redis 持久化(可选)
  • requirepass:设置访问密码为 123456

运行容器

docker run --name myredis -p 6379:6379 -v /home/docker/redis/data:/data -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf

说明:

  • --name:容器名称
  • -p :表示将服务器的 6379(冒号前的 6379)端口映射到 docker 的 6379(冒号后的 6379)端口
  • -d :表示以后台服务的形式运行 redis
  • -v :挂载宿主机目录
  • redis redis-server /etc/redis/redis.conf:表示运行 redis 服务器程序,并且指定运行时的配置文件

经过以上步骤,便可以通过 redis 客户端工具进行连接,如果连接不上,检查安全组和服务器防火墙端口是否开放

安装 rabbitmq

# 拉取带图形化管理界面的镜像
docker pull rabbitmq:3.7.7-management
# 根据下载的镜像创建和启动容器
docker run -d --name rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin df80af9ca0c9

说明:

  • -d:后台运行容器;
  • --name:指定容器名;
  • -p:指定服务运行的端口(5672:应用访问端口;15672:控制台 Web 端口号);
  • -v:映射目录或文件;
  • --hostname :主机名(RabbitMQ 的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
  • -e:指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

Rabbitmq 访问地址:http://localhost:15672

le6get7f.png

至此,基本的运行环境都安装完毕,下面就是关键的打包步骤了。

Vue 前端项目打包

le6g3uvd.png

将 dist 下的所有文件目录拷贝到 SpringBoot 后端项目的 ​​resources\static​​ 目录下,static 目录需要新建。

le6g5kya.png

如果你的项目中用到了 shiro 或者 spring security 等安全框架,需要对静态资源放行。

le6g603o.png

以上配置完成后,先在本地运行,再用 maven 进行打包。

le6g6ns1.png

将 jar 包上传到服务器后,就要开始制作自己的镜像了,首先在与 jar 包同目录下新建 Dockerfile 文件。
# 新建Dockerfile文件
touch Dockerfile
# 编写Dockerfile文件
vim Dockerfile
加入以下内容
# Docker image for springboot file run
# VERSION 0.0.1
FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD demo-01.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

执行 ​​docker build -t [镜像名称] .​​​ ,至此镜像文件就制作完成了。docker images查看镜像是否存在。最后一步,创建并启动容器,​​docker run --name [容器名称] -d -p 80:8080 [镜像名]​​。

le6g9bnt.png

最后修改:2023 年 05 月 04 日
如果觉得我的文章对你有用,请随意赞赏o(* ̄▽ ̄*)ブ