基于Docker-Compose 部署前后端分离单体项目(二)

大概部署的思路在上篇文章已经介绍清楚,本文的目的特别简单,只有两件事情需要做:

  • 1.制作镜像。
  • 2.推送镜像。

上文说到,基于maven的java项目的推送和vue的推送是有差别的,那我们也就分为两部分来说明!
上文也说到,原理都是一样的,都是基于docker build命令来制作的,所以大家在阅读这篇文章的时候有必要了解以下docker build这个命令,以及Dockerfile。这里不再赘述,网上资料很多,自行查阅即可!

1.阿里云容器服务配置

1.1 创建命名空间

阿里云容器镜像服务创建命名空间

1.2 创建镜像服务

阿里云容器镜像服务创建镜像仓库

同时也推荐大家在创建镜像仓库的时候,多写镜像描述,如果是公开镜像方便其他人的使用,例如


镜像描述说明

2. maven项目的打包制作镜像以及镜像推送

为什么此处不写java项目或者springboot项目等,是因为我们这里是通过maven插件dockerfile-maven-plugin来进行打包推送的.

从上面我们创建的镜像来看,我们是需要把当前镜像推送到pitaya-vistor这个镜像仓库的。话不多少,先把项目需要配置的贴出来再解释

  • 先看项目结构,以及文件位置


    maven项目结构

    需要修改的只有标出来的几个文件

  • .dockerignore
  • docker-compose.yml
  • Dockerfile (这个文件与镜像制作以及推送无关,放在此处是为了项目更清晰)
  • pom.xml
  • settings.xml (maven的settings.xml配置)

2.1 maven集成docker插件

  • pom.xml添加properties

     
    registry.cn-shenzhen.aliyuncs.com

    
    pitaya

上面的配置信息去哪里找,请查看注释。

  • pom.xml添加plugins

       
       
        pitaya-vistor
        
            
                com.spotify
                dockerfile-maven-plugin
                1.4.10
                
                    ${project.basedir}
                    true
                    ${project.basedir}/Dockerfile
                    ${docker.registry}/${docker.image.prefix}/${project.artifactId}
                    ${project.version}
                    
                        target/${project.build.finalName}.jar
                    
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

这里有一个比较重要的事情是,你pom.xml里面的 artifactId 对应的名字要和镜像仓库的名字对应起来,当然也可以进行修改,


${docker.registry}/${docker.image.prefix}/${project.artifactId}

2.2 maven的settings.xml文件配置,配置远程docker镜像服务账号密码

 
   
     
     
     registry.cn-shenzhen.aliyuncs.com
     
     
     xxx
     
     
     xxx
   

2.3 docker配置

  • Dockerfile
#依赖jdk8镜像构建
FROM java:8

# 维护者信息
MAINTAINER weidan "[email protected]"

#配置一个具有持久化功能的目录
VOLUME /tmp

ARG JAR_FILE

#MYSQL主机地址
ENV MYSQL_HOST=127.0.0.1

#MYSQL端口
ENV MYSQL_PORT=3306

#MYSQL账号
ENV MYSQL_USERNAME=root

#MYSQL密码
ENV MYSQL_PASSWORD=123456

#MYSQL访问数据库schema
ENV MYSQL_SCHEMA=pitaya-vistor

#REDIS主机
ENV REDIS_HOST=127.0.0.1

#REDIS端口
ENV REDIS_PORT=6379

#REDIS密码
ENV REDIS_PASSWORD=""

#REDIS数据库序号
ENV REDIS_DB=0


COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-Denv.mysql.host=${MYSQL_HOST}", "-Denv.mysql.port=${MYSQL_PORT}","-Denv.mysql.username=${MYSQL_USERNAME}","-Denv.mysql.password=${MYSQL_PASSWORD}","-Denv.mysql.schema=${MYSQL_SCHEMA}","-Denv.redis.host=${REDIS_HOST}","-Denv.redis.port=${REDIS_PORT}","-Denv.redis.password=${REDIS_PASSWORD}","-Denv.redis.database=${REDIS_DB}","-jar","/app.jar"]

说明:
为了实现在docker运行镜像的时候可以动态指定运行参数,上面Dockerfile指定了ENV环境变量,例如mysql的链接信息,redis的链接信息等,然后在通过java -jar 参数形式传递到java项目。这样我们的镜像可以不必写死我们的需要改变的配置信息。同时提供一些默认值,我们在运行的时候覆盖我们需要改变的即可!

其实此处也可以指定一些jvm的参数,方便后期jvm调优,如果需要大家可以加上去。

  • .dockerignore
# Ignore everything
**

# Allow files and directories
#这里大家修改为自己的jar的名称,其实也就是上面pom配置的finalname属性即可
!target/xxx.jar
!Dockerfile

这个文件的作用类似与.gitignore,忽略一些文件不打包到镜像,这样即可以减少我们镜像的大小,又可以降低信息透露出去的风险。

2.4 docker-compose

  • docker-compose.yml
version: '3'
services:
  pitaya_vistor_java: #次数也修改成为你自己服务的名字
    image: [Image]:[Tag]
    container_name: [容器名字,可以根据自己的需要指定]
    networks:
      pitaya_network:
        ipv4_address: 172.2.0.100
    ports:
      - 8080:8080
    environment:
      MYSQL_HOST: 172.2.0.10
      MYSQL_PORT: 3306
      MYSQL_USERNAME: [mysql的账号]
      MYSQL_PASSWORD: [mysql的密码]
      MYSQL_SCHEMA:  [链接的数据库名]
      REDIS_HOST: 172.2.0.11
      REDIS_PORT: 6379
      REDIS_PASSWORD: [redis的密码]
      TZ: Asia/Shanghai


networks:
  pitaya_network:
    external: true

该文件主要在部署的时候使用,在镜像制作用不到

2.5 打包制作镜像并且推送到阿里云服务器

mvn clean install package -Dmaven.test.skip=true dockerfile:build dockerfile:push

配置好之后一条命令搞定,是不是很简单!
最大的问题在于要注意细节以及一些名字的对应关系,配置还是很简单的!

3.Vue项目制作镜像

  • 项目结构


    Vue项目结构

    同样的,先列出来需要修改的文件,在项目根目录下添加以下几个文件即可

  • .dockerignore
  • docker-compose.yml(同样制作镜像用不到,部署的时候再使用)
  • Dockerfile
  • nginx.conf

3.1 docker配置

  • .dockerignore
/node_modules
/public
/screenshots
/src
/README.md
!Dockerfile
  • Dockerfile
# 设置基础镜像
FROM nginx

MAINTAINER "weidan <[email protected]>"

# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY dist/  /usr/share/nginx/html/admin/

#nginx配置文件替换。
COPY nginx.conf /etc/nginx/conf.d/default.conf

#暴露81端口
EXPOSE 81
CMD ["nginx", "-g", "daemon off;"]
  • nginx.conf
server {
    listen 82;
    listen [::]:82;
    charset utf-8;
    access_log off;
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
  
    location = /50x.html {
        root html;
    }
}

3.2 docker-compose

  • docker-compose.yml
version: '3'
services:

  #此处也改为你的容器服务名字
  pitaya_vistor_java:
    image: [Image]:[tag]
    container_name: [配置你的容器名字]
    environment:
      TZ: Asia/Shanghai
    networks:
      pitaya_network:
        ipv4_address: 172.2.0.202
    ports:
      - 82:82
networks:
  pitaya_network:
    external: true    

3.3 打包上传镜像

步骤1:修改api请求路径

#步骤2:打包
cnpm run build

#步骤3:制作镜像,注意修改版本号
docker build -t [image,去阿里云镜像仓库下找]:[tag版本,例如1.0.0] .

#步骤4:登录云服务器(输入两次密码,第一次是电脑密码,第二次是阿里云容器服务的密码)
sudo docker login --username=xxx registry.cn-shenzhen.aliyuncs.com

#步骤5: 推送到云服务器
sudo docker push [image,去阿里云镜像仓库下找]:[tag版本,例如1.0.0] .

4.uni-app 打包h5制作镜像

其实原理同vue打包一样的,只需要修改对应配置信息即可

uni-app项目结构

4.1 docker信息配置

  • .dockerignore
/components
/pages
/static
/utils
/App.vue
/main.js
/manifest.json
/pages.json
/uni.scss
!Dockerfile
  • Doclerfile
# 设置基础镜像
FROM nginx

MAINTAINER "weidan <[email protected]>"

# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
COPY unpackage/dist/build/h5/  /usr/share/nginx/html/h5/

#nginx配置文件替换。
COPY nginx.conf /etc/nginx/conf.d/default.conf

#暴露81端口
EXPOSE 81
CMD ["nginx", "-g", "daemon off;"]
  • nginx.conf
server {
    listen 81;
    listen [::]:81;
    charset utf-8;
    access_log off;
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
  
    location = /50x.html {
        root html;
    }
}

4.2 docker-compse

version: '3'
services:
  
  #修改成你的容器服务名称
  pitaya_vistor_java:
    image: [image]:[tag]
    container_name: [修改成你的容器服务名称]
    environment:
      TZ: Asia/Shanghai
    networks:
      pitaya_network:
        ipv4_address: 172.2.0.201
    ports:
      - 81:81
networks:
  pitaya_network:
    external: true

4.3 部署上传


步骤1:修改api请求路径

#步骤2:打包
请查看dcloud h5打包

#步骤3:制作镜像,注意修改版本号
docker build -t .....

#步骤4:登录云服务器,密码a开头(输入两次密码,第一次是电脑密码,第二次是阿里云容器服务的密码)
在镜像仓库下可以找到命令

#步骤5: 推送到云服务器
在镜像仓库下可以找到命令

关于如何查找上面的命令


查找镜像命令

你可能感兴趣的:(基于Docker-Compose 部署前后端分离单体项目(二))