大概部署的思路在上篇文章已经介绍清楚,本文的目的特别简单,只有两件事情需要做:
- 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这个镜像仓库的。话不多少,先把项目需要配置的贴出来再解释
-
先看项目结构,以及文件位置
需要修改的只有标出来的几个文件
- .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项目制作镜像
-
项目结构
同样的,先列出来需要修改的文件,在项目根目录下添加以下几个文件即可
- .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打包一样的,只需要修改对应配置信息即可
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: 推送到云服务器
在镜像仓库下可以找到命令
关于如何查找上面的命令