整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          docker中部署項(xiàng)目

          、簡介

          這里介紹在docker中部署自定義項(xiàng)目。

          二、部署流程

          在docker中部署自定義項(xiàng)目,流程為創(chuàng)建自定義項(xiàng)目、生成自定義項(xiàng)目鏡像、docker容器中運(yùn)行項(xiàng)目鏡像。

          2.1 創(chuàng)建自定義項(xiàng)目

          這里略過,根據(jù)需要?jiǎng)?chuàng)建。

          2.2 生成目標(biāo)鏡像

          生成目標(biāo)鏡像有兩種方式,一種是根據(jù)maven插件生成,另一種根據(jù)定義Dockerfile文件生成。

          2.2.1 根據(jù)maven插件生成鏡像

          在pom.xml的插件模塊,添加類似如下配置:

          <build>

          <plugins>

          <plugin>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-maven-plugin</artifactId>

          </plugin>

          <!-- docker 部署插件 -->

          <plugin>

          <groupId>com.spotify</groupId>

          <artifactId>docker-maven-plugin</artifactId>

          <version>1.0.0</version>

          <!--將插件綁定在某個(gè)phase執(zhí)行-->

          <executions>

          <execution>

          <id>build-image</id>

          <!--綁定在package階段執(zhí)行插件,即執(zhí)行mvn package時(shí),就會(huì)自動(dòng)執(zhí)行mvn docker:build-->

          <phase>package</phase>

          <goals>

          <goal>build</goal>

          </goals>

          </execution>

          </executions>

          <configuration>

          <!--指定鏡像名-->

          <imageName>${project.artifactId}</imageName>

          <!--指定標(biāo)簽,即鏡像版本-->

          <imageTags>

          <imageTag>latest</imageTag>

          </imageTags>

          <!--指定基礎(chǔ)鏡像jdk1.8-->

          <baseImage>java</baseImage>

          <!-- 鏡像制作人本人信息 -->

          <maintainer>author_name</maintainer>

          <!--切換到指定目錄下,這里為/home/app目錄-->

          <workdir>/home/app</workdir>

          <!--${project.build.finalName}.jar是打包后生成的jar包的名字-->

          <!-- jar包部署-->

          <entryPoint>["java", "-jar", "/home/app/${project.build.finalName}.jar"]</entryPoint>

          <!--指定docker服務(wù)地址-->

          <!-- <dockerHost>tcp://localhost:2375</dockerHost>-->

          <!-- 復(fù)制生成的jar包到docker容器指定目錄-->

          <resources>

          <resource>

          <!-- 將生成的jar包復(fù)制到容器指定路徑下-->

          <targetPath>/home/app</targetPath>

          <!--指定資源目錄,這里為maven打包后的target目錄-->

          <directory>${project.build.directory}</directory>

          <!-- 指定需要復(fù)制的文件,這里為生成的jar包 -->

          <include>${project.build.finalName}.jar</include>

          </resource>

          </resources>

          </configuration>

          </plugin>

          </plugins>

          </build>

          接著運(yùn)行mavan打包命令即可:

          mvn clean package -Dmaven.test.skip=true

          2.2.2 定義Dockerfile文件生成

          Dockerfile文件用于生成鏡像,文件內(nèi)容可參數(shù)https://www.runoob.com/docker/docker-dockerfile.html。 常用定義含義如下:

          FROM:指定新構(gòu)建鏡像的基礎(chǔ)鏡像,如java項(xiàng)目則依賴于基礎(chǔ)java鏡像,對(duì)應(yīng)書寫為:FROM java

          RUN:在docker run 時(shí)運(yùn)行,用于執(zhí)行命令,格式為:RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"],如:RUN ["java", "--version"],在shell下執(zhí)行命令:java --version

          COPY:從上下文目錄中復(fù)制文件到指定目錄,格式為:COPY [--chown=<user>:<group>] <源路徑1>... <目標(biāo)路徑>,如:COPY target/hello-0.0.1-SNAPSHOT.jar / ,即將上下文下的target/hello-0.0.1-SNAPSHOT.jar文件復(fù)制到容器的/目錄下

          ADD:和COPY類似,推薦使用COPY

          CMD:和RUN類似,在 docker build時(shí)運(yùn)行

          ENTRYPOINT:和CMD類似

          ENV:設(shè)置環(huán)境變量,格式為:ENV <key> <value> 或 ENV <key1>=<value1> <key2>=<value2>...

          ARG:構(gòu)建參數(shù),和ENV類似,僅在Dockerfile內(nèi)有效,即僅在docker build過程中有效

          VOLUME:定義掛載數(shù)據(jù)卷,默認(rèn)會(huì)掛到匿名卷下,格式為:VOLUME ["<路徑1>", "<路徑2>"...] 或 VOLUME <路徑>

          EXPOSE:聲明端口,方便在使用中映射,在使用中使用docker run -P隨機(jī)端口映射時(shí),會(huì)隨機(jī)映射EXPOSE端口

          WORKDIR:指定工作目錄,格式如:WORKDIR <工作目錄路徑>

          USER:指定后續(xù)命令執(zhí)行的用戶和用戶組,格式如:USER <用戶名>[:<用戶組>]

          Dockerfile文件放于項(xiàng)目根目錄下,接著執(zhí)行格式如下的命令生成鏡像:

          docker build -t 鏡像名稱:鏡像標(biāo)簽 上下文路徑(需要打包復(fù)制到鏡像的目錄,未指定則默認(rèn)是存放Dockerfile文件的所在目錄)

          如:

          docker build -t spring_boot_docker_image:latest .

          2.3 運(yùn)行目標(biāo)鏡像

          運(yùn)行目標(biāo)鏡像,可以直接命令運(yùn)行,也可以通過idea插件運(yùn)行。

          2.3.1 命令運(yùn)行

          命令運(yùn)行同其它鏡像運(yùn)行一樣,示例如下:

          docker run -d -p 20004:8051 --name spring_boot_docker spring_boot_docker_image

          2.3.2 通過idea插件運(yùn)行

          idea中通過插件集成了docker功能,可以對(duì)docker中鏡像及容器進(jìn)行管理。在操作前,提前安裝好idea及docker插件。以項(xiàng)目部署為例,操作包含idea配置和目標(biāo)項(xiàng)目配置,具體如下:

          idea配置

          1、idea控制界面,安裝docker插件,Preferences | Plugins ->docker;

          2、idea控制界面,添加docker,Preferences | Build, Execution, Deployment | Docker -> 添加docker,并連接成功

          3、回到idea操作界面,選擇底部Services,在底部左則可看到安裝好的Docker,右鍵點(diǎn)擊連接。下拉選項(xiàng)可以看到已經(jīng)安裝的鏡像和容器

          目標(biāo)項(xiàng)目配置

          1、修改pom.xml,添加docker-maven-plugin插件

          2、運(yùn)行maven package,生成項(xiàng)目鏡像

          3、在idea操作界面services中的docker鏡像中,找到剛創(chuàng)建的項(xiàng)目鏡像,右鍵新建容器,在彈框中指定容器名稱、機(jī)器端口與容器端口映射關(guān)系

          4、運(yùn)行新創(chuàng)建的容器,采用機(jī)器端口即可訪問docker容器中運(yùn)行的鏡像

          三、示例

          這里以部署自定義項(xiàng)目spring_boot_docker到docker為例,直接借助idea的docker插件部署。

          3.1 創(chuàng)建自定義項(xiàng)目

          示例自定義項(xiàng)目為spring_boot_docker,包含文件如下:

          maven配置文件pom.xml

          <?xml version="1.0" encoding="UTF-8"?>

          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

          <modelVersion>4.0.0</modelVersion>

          <parent>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-parent</artifactId>

          <version>2.3.3.RELEASE</version>

          <relativePath/> <!-- lookup parent from repository -->

          </parent>

          <groupId>com.dragon.study</groupId>

          <artifactId>spring_boot_docker</artifactId>

          <version>0.0.1-SNAPSHOT</version>

          <name>spring_boot_docker</name>

          <description>Demo project for Spring Boot</description>

          <properties>

          <java.version>1.8</java.version>

          </properties>

          <dependencies>

          <dependency>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-web</artifactId>

          </dependency>

          <dependency>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-test</artifactId>

          <scope>test</scope>

          </dependency>

          </dependencies>

          <build>

          <plugins>

          <plugin>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-maven-plugin</artifactId>

          </plugin>

          <!-- docker 部署插件 -->

          <plugin>

          <groupId>com.spotify</groupId>

          <artifactId>docker-maven-plugin</artifactId>

          <version>1.0.0</version>

          <!--將插件綁定在某個(gè)phase執(zhí)行-->

          <executions>

          <execution>

          <id>build-image</id>

          <!--綁定在package階段執(zhí)行插件,即執(zhí)行mvn package時(shí),就會(huì)自動(dòng)執(zhí)行mvn docker:build-->

          <phase>package</phase>

          <goals>

          <goal>build</goal>

          </goals>

          </execution>

          </executions>

          <configuration>

          <!--指定鏡像名-->

          <imageName>${project.artifactId}</imageName>

          <!--指定標(biāo)簽,即鏡像版本-->

          <imageTags>

          <imageTag>latest</imageTag>

          </imageTags>

          <!--指定基礎(chǔ)鏡像jdk1.8-->

          <baseImage>java</baseImage>

          <!-- 鏡像制作人本人信息 -->

          <maintainer>author_name</maintainer>

          <!--切換到指定目錄下,這里為/home/app目錄-->

          <workdir>/home/app</workdir>

          <!--${project.build.finalName}.jar是打包后生成的jar包的名字-->

          <!-- jar包部署-->

          <entryPoint>["java", "-jar", "/home/app/${project.build.finalName}.jar"]</entryPoint>

          <!--指定docker服務(wù)地址-->

          <!-- <dockerHost>tcp://localhost:2375</dockerHost>-->


          <!-- 復(fù)制生成的jar包到docker容器指定目錄-->

          <resources>

          <resource>

          <!-- 將生成的jar包復(fù)制到容器指定路徑下-->

          <targetPath>/home/app</targetPath>

          <!--指定資源目錄,這里為maven打包后的target目錄-->

          <directory>${project.build.directory}</directory>

          <!-- 指定需要復(fù)制的文件,這里為生成的jar包 -->

          <include>${project.build.finalName}.jar</include>

          </resource>

          </resources>

          </configuration>

          </plugin>

          </plugins>

          </build>

          </project>

          application.yaml文件

          spring:

          application:

          name: spring-boot-docker

          server:

          port: 8051

          HelloController.java類

          package com.dragon.study.spring_boot_docker.controller;

          import org.springframework.web.bind.annotation.RequestMapping;

          import org.springframework.web.bind.annotation.RestController;

          @RestController

          @RequestMapping

          public class HelloController {

          @RequestMapping("hello")

          public String hello(){

          return "hello, nice to meet you";

          }

          }

          啟動(dòng)類SpringBootDockerApplication.java

          package com.dragon.study.spring_boot_docker;

          import org.springframework.boot.SpringApplication;

          import org.springframework.boot.autoconfigure.SpringBootApplication;

          @SpringBootApplication

          public class SpringBootDockerApplication {

          public static void main(String[] args) {

          SpringApplication.run(SpringBootDockerApplication.class, args);

          }

          }

          3.2 生成目標(biāo)鏡像

          在idea中選擇maven的package,對(duì)自定義項(xiàng)目spring_boot_docker打包,打完包??梢栽赿ocker插件發(fā)現(xiàn)已經(jīng)生成的包。當(dāng)然也可以通過命令查看:

          docker images

          3.3 運(yùn)行目標(biāo)鏡像

          在idea的docker插件中,選擇新生成的鏡像,并創(chuàng)建容器,指定端口映射(20004:8051)信息,運(yùn)行窗口即可,也可通過命令運(yùn)行行運(yùn)行,命令如下:

          docker run -d -p 20004:8051 --name spring_boot_docker spring_boot_docker

          3.4 測試

          GET http://localhost:20004/hello

          Accept: application/json

          響應(yīng):

          hello, nice to meet you

          ocker隨手筆記第一節(jié) docker概念及安裝

          docker隨手筆記第二節(jié) docker常用命令解析

          docker隨手筆記第三節(jié) docker構(gòu)建java鏡像

          docker隨手筆記第四節(jié) docker安裝mysql5.7

          docker隨手筆記第五節(jié) docker安裝redis4.0

          docker隨手筆記第六節(jié) docker安裝jenkins

          docker隨手筆記第七節(jié) jenkins通過git部署java微服務(wù)插件安裝

          docker隨手筆記第八節(jié) jenkins通過git自動(dòng)部署java微服務(wù)

          docker隨手筆記第九節(jié) docker -v參數(shù) 目錄掛載總結(jié)

          docker隨手筆記第十節(jié) docker 開啟遠(yuǎn)程訪問

          docker隨手筆記第十一節(jié) portainer.io安裝使用,比k8s簡單

          jenkins自動(dòng)部署前端靜態(tài)頁面

          點(diǎn)擊新建任務(wù)



          輸入任務(wù)名稱,選擇構(gòu)建自由風(fēng)格軟件項(xiàng)目,然后點(diǎn)擊確定

          丟棄舊的構(gòu)建配置


          源碼選擇你前端git倉庫地址,或者svn地址


          配置Delete workspace before build starts


          配置Post Steps,配置ssh,執(zhí)行ssh腳本



          輸入ssh腳本

          mkdir -p /home/web
          cd /home/web
           
          #由于/var/jenkins_home這個(gè)目錄我映射到宿主機(jī)/jenkins/jenkins-data目錄
          cp -R /jenkins/jenkins-data/workspace/web/html html
          
           
          cat > Dockerfile << EOF
          FROM nginx
          EXPOSE 80
           
          COPY ./html /usr/share/nginx/html
          ENV TZ=Asia/Shanghai
          RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
          EOF
           
          docker build -t web:0.1 .
           
          d1=$(date "+%Y%m%d%H%M")
          name="web"
          appName=$name$d1
           
          docker stop $(docker ps | grep $name | awk '{print $1}')
          docker run --name $appName -d -p 8081:80 $appName:0.1 
          

          保存后點(diǎn)擊立即構(gòu)建,這樣自動(dòng)部署就成功了

          就可以訪問了,http://服務(wù)ip:8081


          主站蜘蛛池模板: 国产女人乱人伦精品一区二区 | 亚欧在线精品免费观看一区| 99久久无码一区人妻a黑| 视频一区二区三区免费观看| 亚洲图片一区二区| 伊人久久精品无码麻豆一区| 国精产品一区一区三区免费视频| 亚洲AV无码国产一区二区三区 | 亚洲日韩精品一区二区三区| 国产精品乱码一区二区三区 | 国产精品日本一区二区不卡视频| 中文字幕一区二区人妻| 日韩欧国产精品一区综合无码| 亚洲国产精品一区二区第一页免 | 国产剧情国产精品一区| 日韩精品一区二区三区国语自制| 久久精品无码一区二区三区不卡| 乱码人妻一区二区三区| 日韩精品一区二区三区中文3d| 在线观看精品一区| 日韩十八禁一区二区久久| 国产高清不卡一区二区| 亚洲AV无码一区二区三区网址| 无码人妻精品一区二| 亚洲一区二区电影| 一区二区免费国产在线观看| 久久国产精品视频一区| 国产一区中文字幕在线观看| 99久久国产精品免费一区二区| 日韩免费一区二区三区在线播放| 无码精品前田一区二区| 中文字幕av人妻少妇一区二区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲国产成人一区二区三区| 欧美成人aaa片一区国产精品 | 韩国福利一区二区美女视频| 日本一区午夜爱爱| 亚洲蜜芽在线精品一区| 国产精品亚洲高清一区二区| 无码国产精品久久一区免费| 亚洲国产综合无码一区|