docker 部署微服务
微服务ms-net网络配置清单
nginx 172.20.0.1:80
mysql 172.19.0.14:3336
nacos 172.19.0.14:8848
minio 172.20.0.30:9090
redis 172.20.0.40:6379
gateway 172.20.0.50:8080
auth 172.20.0.60:9200
system 172.20.0.70
message 172.20.0.80:9400
创建专用网络
docker network create --driver bridge --subnet 172.20.1.0/16 --gateway 172.20.1.1 ms-net
部署mysql
获取镜像
docker pull mysql:5.7
创建配置文件目录、数据文件目录、创建my.cnf配置文件
mkdir -p /jyx/erp/mysql/conf.d && mkdir -p /jyx/erp/mysql/data
vim /jyx/erp/mysql/conf.d/my.cnf
创建容器
docker run -d --name erp-mysql \
-p 3316:3306 \
--network ms-net \
--ip 172.20.0.10 \
-v /jyx/erp/mysql/conf.d/my.cnf:/etc/mysql/conf.d/mysql.cnf \
-v /jyx/erp/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD='R@@t2022' \
mysql:5.7
进入容器
docker exec -it mysql bash
登录mysql
mysql -uroot -p
创建数据库远程用户并配置权限
create user 'root'@'%' identified by 'R@@t2022';
grant all privileges on . to 'root'@'%' identified by 'R@@t2022' with grant option;
部署Nacos
登录mysql(root用户)创建数据库、创建数据库用户
create database nacos default character set utf8;
create user 'nacos'@'%' identified by 'nacos2022';
grant all privileges on nacos.* to 'nacos'@'%' with grant option;
创建目录
mkdir -p /jyx/erp/nacos
进入/jyx/erp/nacos目录,下载nacos数据库sql文件
curl -O https://raw.githubusercontent.com/alibaba/nacos/master/distribution/conf/nacos-mysql.sql
复制sql文件到mysql容器内
docker cp nacos-mysql.sql erp-mysql:/etc/mysql
登录mysql(root用户)执行sql文件
use nacos
source /etc/mysql/nacos-mysql.sql;
创建 nacos 配置、日志、数据存放目录
mkdir -p /jyx/erp/nacos/conf && chown -R 200 /jyx/erp/nacos/conf
mkdir -p /jyx/erp/nacos/logs && chown -R 200 /jyx/erp/nacos/logs
mkdir -p /jyx/erp/nacos/data && chown -R 200 /jyx/erp/nacos/data
获取镜像
docker pull nacos/nacos-server
创建容器
docker run -d --name erp-nacos \
-p 8848:8848 \
--network ms-net \
--ip 172.20.0.20 \
--env MODE=standalone \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=172.20.0.10 \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_DB_NAME=nacos \
--env MYSQL_SERVICE_USER=nacos \
--env MYSQL_SERVICE_PASSWORD=nacos2022 \
nacos/nacos-server
把容器中的 nacos 相关文件复制出来
docker cp -a erp-nacos:/home/nacos/conf /jyx/erp/nacos/
docker cp -a erp-nacos:/home/nacos/logs /jyx/erp/nacos/
docker cp -a erp-nacos:/home/nacos/data /jyx/erp/nacos/
删除容器
docker rm -f nacos
重新创建容器,挂载相关目录实现双向共享文件
docker run -d --name erp-nacos \
-p 8848:8848 \
--network ms-net \
--ip 172.20.0.20 \
--env JVM_XMS=256m \
--env JVM_XMX=256m \
--env MODE=standalone \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=172.19.0.14 \
--env MYSQL_SERVICE_PORT=3336 \
--env MYSQL_SERVICE_DB_NAME=nacos \
--env MYSQL_SERVICE_USER=nacos \
--env MYSQL_SERVICE_PASSWORD=nacos2022 \
nacos/nacos-server
部署Minio
获取镜像
docker pull minio/minio
创建配置目录、上传文件目录
mkdir -p /jyx/erp/minio/config && mkdir -p /jyx/erp/minio/data
创建容器
docker run -d --name erp-minio \
-p 9010:9000 -p 9090:9090 \
--network ms-net \
--ip 172.20.0.30 \
-e "MINIO_ACCESS_KEY=minioJYX" \
-e "MINIO_SECRET_KEY=minioJYX" \
-v /jyx/erp/minio/data:/data \
-v /jyx/erp/minio/config:/root/.minio \
minio/minio server /data --console-address ":9090" -address ":9010"
部署Redis
获取镜像
docker pull redis
创建配置目录、缓存目录
mkdir -p /jyx/erp/redis/data
创建容器
docker run -d --name erp-redis \
-p 6389:6379 \
--network ms-net \
--ip 172.20.0.40 \
-v /jyx/erp/redis/data:/data \
-v /jyx/erp/redis/conf/redis.conf:/etc/redis/redis.conf \
redis redis-server /etc/redis/redis.conf
部署Nginx
获取镜像
docker pull nginx
创建配置目录
mkdir -p /jyx/erp/nginx/config/conf.d && mkdir -p /jyx/erp/nginx/logs
上传nginx配置文件到/jyx/erp/nginx/config目录
sudo rz
创建容器
docker run -d --name erp-nginx \
-p 8008:80 \
--network ms-net \
--ip 172.20.0.1 \
-v /jyx/erp/nginx/config/nginx.conf:/etc/nginx/nginx.conf \
-v /jyx/erp/nginx/config/conf.d:/etc/nginx/conf.d \
-v /jyx/erp/nginx/logs:/var/log/nginx \
-v /jyx/erp/web/dist:/dist \
nginx
构建jdk镜像
下载jdk-8u311-linux-x64.tar.gz上传到/jdk目录并创建一个dockerfile文件
vim dockerfile
填写以下内容:
# 以centos为基础,因为jdk必须运行在操作系统之上
FROM centos:7.9.2009
# 维护者
MAINTAINER jyx
# 创建一个新目录来存储jdk文件
RUN mkdir /usr/local/java \
# 设置时区
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-8u311-linux-x64.tar.gz /usr/local/java/
# 设置环境变量
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV LANGUAGE C.UTF-8
ENV JAVA_HOME /usr/local/java/jdk1.8.0_311
ENV JRE_HOME /usr/local/java/jdk1.8.0_311/jre
ENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
# VOLUME 指定了临时文件目录为/tmp 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
将Dockerfile文件转为镜像
docker build --no-cache -t jdk:8 .
部署JAVA应用方式1:使用jdk:8镜像创建应用容器
gateway
创建应用日志目录
mkdir -p /jyx/erp/services/gateway/logs
创建容器
docker run -d --name erp-gateway --privileged=true \
--network ms-net \
--network-alias gateway \
--ip 172.20.0.50 \
-v /jyx/erp/services/gateway/gateway.jar:/gateway.jar \
-v /jyx/erp/services/gateway/logs/:/logs \
jdk:8 java -jar \
-Xmx400m \
-Duser.timezone=GMT+08 \
/gateway.jar
auth
创建应用日志目录
mkdir /jyx/erp/services/auth/logs
创建容器
docker run -d --name erp-auth --privileged=true \
--network ms-net \
--network-alias auth \
--ip 172.20.0.60 \
-v /jyx/erp/services/auth/auth.jar:/auth.jar \
-v /jyx/erp/services/auth/logs/:/logs \
jdk:8 java -jar \
-Xmx400m \
-Duser.timezone=GMT+08 \
/auth.jar
system
创建应用日志目录
mkdir /jyx/erp/services/system/logs
创建容器
docker run -d --name erp-system --privileged=true \
--network ms-net \
--network-alias system \
--ip 172.20.0.70 \
-v /jyx/erp/services/system/system.jar:/system.jar \
-v /jyx/erp/services/system/logs/:/logs \
jdk:8 java -jar \
-Xmx400m \
-Duser.timezone=GMT+08 \
/system.jar
message
创建应用日志目录
mkdir /jyx/erp/services/message/logs
创建容器
docker run -d --name erp-message --privileged=true \
--network ms-net \
--network-alias message \
--ip 172.20.0.80 \
-v /jyx/erp/services/message/message.jar:/message.jar \
-v /jyx/erp/services/message/logs/:/logs \
jdk:8 java -jar \
-Xmx400m \
-Duser.timezone=GMT+08 \
/message.jar
部署JAVA应用方式2:使用dockerfile创建应用镜像
获取java镜像
docker pull openjdk:8-jre
以创建auth应用镜像为例
创建应用文件所在目录
mkdir -p /jyx/erp/services/auth
上传应用jar包到应用目录下
sudo rz
在应用目录下创建dockerfile文件
vim dockerfile
填入以下内容:
FROM openjdk:8-jre
MAINTAINER JYX
COPY auth.jar /auth.jar
ENTRYPOINT ["java","-jar","/auth.jar"]
开始构建镜像
docker build -t erp-auth .
其他应用创建镜像操作类似
运行应用
docker run -d -m 512m --name erp-auth \
--network ms-net \
--ip 172.20.0.60 \
erp-auth
docker run -d -m 512m --name erp-gateway \
--network ms-net \
--ip 172.20.0.50 \
erp-gateway
docker run -d -m 512m --name erp-system \
--network ms-net \
--ip 172.20.0.70 \
erp-system
docker run -d -m 512m --name erp-message \
--network ms-net \
--ip 172.20.0.80 \
erp-message
部署前端
上传zip文件到/jyx/erp/web/目录并解压
sudo rz
unzip dist.zip
修改nginx配置文件
vim /jyx/erp/nginx/config/nginx.conf
写入以下配置
root /jyx/erp/web/dist;
location / {
try_files $uri $uri/ @router;
index index.html index.html;
}
location /api/ {
proxy_pass http://172.20.0.50:8080/;
}
location @router {
rewrite ^.*$ /index.html last;
}
docker重启nginx容器
docker restart erp-nginx