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

posted @ 2022-04-30 11:14  changlinlo  阅读(340)  评论(0编辑  收藏  举报