赞
踩
接Dockerfile部署文章,有多种部署方式,我这只是整理一个简单的思路,Dockerfile文件用于mvn打包并上传到harbor仓库,docker-compose用于快速的部署项目,缩短部署步骤
vim /usr/share/maven/conf/settings.xml
- <server>
- <id>docker-harbor</id>
- <username>admin</username>
- <password>Song2022</password>
- </server>
vim pom.xml ####代码当前目录下pom
- <build>
- <finalName>envirment</finalName>
- <!--设置打包名称用于便于部署-->
- <plugins>
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>1.0.0</version>
- <configuration>
- <imageName>192.168.2.251/song/${artifactId}</imageName>
- <!--<baseImage>java</baseImage>
- <entryPoint>["java","-jar","environmen-0.0.1-SNAPSHOT.jar"]</entryPoint> 这里指定jar运行的命
- 令参数,也可以编写一个Dockerfile文件写明-->
- <dockerDirectory>src/main/docker</dockerDirectory>
- <!--Dockerfile文件目录-->
- <resources>
- <resource>
- <targetPath>/</targetPath>
- <directory>${project.build.directory}</directory>
- <include>${artifactId}.jar</include>
- </resource>
- </resources>
- <serverId>docker-harbor</serverId> <!--在上面setting.xml中设置的id-->
- <forceTags>true</forceTags> <!--重复构建相同镜像则覆盖镜像-->
- </configuration>
- </plugin>
- </plugins>
- </build>
vim src/main/docker/Dockerfile
一行:加载java镜像
二行:copyjar包到服务器
三行:项目运行命令
四行:项目暴露端口
- FROM java
- COPY *.jar envirment.jar
- ENTRYPOINT ["java","-jar","envirment.jar"]
- EXPOSE 8098
这里是最简单的docker-compose文件实例,主要分两部分
第一部分:docker-compose版本这个是根据docker版本来的,19以下都兼容
第二部分:“定义容器名”,“镜像地址”,“总是启动”,“端口映射”,“DNS映射”
我们生产环境还有很多像“挂载卷”,“加载其他镜像”,“数据库连接”,“命令挂载”等等之类的,这里就不多写了,这个需要看官网了解
-
- version: '3.8'
- services:
- java_app:
- container_name: CONTAINER_NAME
- image: 192.168.2.251/song/CONTAINER_NAME:GIT_COMMIT
- restart: always
- ports:
- - "PORT:PORT"
- extra_hosts:
- - master.mysql:192.168.2.251
这里的回滚是git版本号,到harbor仓库自动拉取
IMAGE_NAME:song 平台项目分类 environment以具体项目名区分(容器名)
PORT: 项目启动端口
CONTAINER_NAME:容器名
分为两部分:
第一部分:如果build为deploy发版则先判断git版本号是否变化,如没变化则没有发版必要,停止
第二部分:打包jar包推送到harbor
-
- #操作校验
- if [ ${deploy_env} = "deploy" ];then
- echo -e "\033[34mstart ${deploy_env}\033[0m"
- echo ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}
- echo ${GIT_COMMIT}
- [ ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} != ${GIT_COMMIT} ] && echo -e "\033[34mstart maven package\033[0m" || {
- #版本未更新,停止发版
- echo -e "\033[31m代码没有更新,停止发版\033[0m"
- # exit 1
- }
- #######打包镜像并推送到本地仓库
- \cp /root/pom.xml-dockerfile ./pom.xml
- mkdir -p src/main/docker
- \cp /root/Dockerfile src/main/docker/
- # mvn clean package docker:build -DdockerImageTags=${GIT_COMMIT} -DpushImageTag
- [ $? -eq 0 ] && echo -e "\033[32mmaven打包成功033[0m" || {
- echo -e "\033[31mmaven 打包失败\033[0m"
- exit 1
- }
- fi
- #!/bin/bash
-
- \/usr/bin/cp /root/java/docker-compose.yaml ./docker-compose.yaml
-
- #定义docker-compose变量,注意第一步清空env,后续追加env
- INIT_VAR() {
- /usr/bin/sed -i 's/CONTAINER_NAME/$CONTAINER_NAME/g' docker-compose.yaml
- /usr/bin/sed -i 's/PORT/$PORT/g ' docker-compose.yaml
- }
-
- #登录harbor
- LOGIN_HARBOR() {
- echo -e "\033[34m登录harbor\033[0m"
- docker login 192.168.2.251
- [ $? -eq 0 ] && echo -e "\033[32m登录harbor成功\033[0m" || {
- echo -e "\033[31m登录harbor失败\033[0m"
- exit 1
- }
- }
-
- case ${deploy_env} in
- deploy)
- LOGIN_HARBOR
- INIT_VAR
- /usr/bin/sed -i 's/GIT_COMMIT/$GIT_COMMIT/g ' docker-compose.yaml
- docker-compose up -d --build
- ;;
- rollback)
- LOGIN_HARBOR
- INIT_VAR
- /usr/bin/sed -i 's/GIT_COMMIT/$version/g ' docker-compose.yaml
- docker-compose up -d --build
- ;;
- restart)
- docker-compose restart
- ;;
- *)
- exit 1
- ;;
- esac
发版步骤:
1、登录harbor仓库
2、初始化docker-compose
3、替换harbor仓库镜像地址,单独放出来方便回滚
4、运行docker-compose
回滚步骤:
1、登录harbor仓库
2、初始化docker-compose
3、替换harbor仓库镜像地址,参数化界面输入git版本通过harbor拉取指定版本
4、运行docker-compose
回滚步骤:
1、直接重启compose
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。