docker中部署專案
docker中部署專案
文章目錄
一、簡介
這裡介紹在docker中部署自定義專案。
二、部署流程
在docker中部署自定義專案,流程為建立自定義專案、生成自定義專案映象、docker容器中執行專案映象。
2.1 建立自定義專案
這裡略過,根據需要建立。
2.2 生成目標映象
生成目標映象有兩種方式,一種是根據maven外掛生成,另一種根據定義Dockerfile檔案生成。
2.2.1 根據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>
<!--將外掛繫結在某個phase執行-->
<executions>
<execution>
<id>build-image</id>
<!--繫結在package階段執行外掛,即執行mvn package時,就會自動執行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定映象名-->
<imageName>${project.artifactId}</imageName>
<!--指定標籤,即映象版本-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!--指定基礎映象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服務地址-->
<!-- <dockerHost>tcp://localhost:2375</dockerHost>-->
<!-- 複製生成的jar包到docker容器指定目錄-->
<resources>
<resource>
<!-- 將生成的jar包複製到容器指定路徑下-->
<targetPath>/home/app</targetPath>
<!--指定資源目錄,這裡為maven打包後的target目錄-->
<directory>${project.build.directory}</directory>
<!-- 指定需要複製的檔案,這裡為生成的jar包 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
接著執行mavan打包命令即可:
mvn clean package -Dmaven.test.skip=true
2.2.2 定義Dockerfile檔案生成
Dockerfile檔案用於生成映象,檔案內容可引數https://www.runoob.com/docker/docker-dockerfile.html。
常用定義含義如下:
FROM:指定新構建映象的基礎映象,如java專案則依賴於基礎java映象,對應書寫為:FROM java
RUN:在docker run 時執行,用於執行命令,格式為:RUN ["可執行檔案", "引數1", "引數2"],如:RUN ["java", "--version"],在shell下執行命令:java --version
COPY:從上下文目錄中複製檔案到指定目錄,格式為:COPY [--chown=<user>:<group>] <源路徑1>... <目標路徑>,如:COPY target/hello-0.0.1-SNAPSHOT.jar / ,即將上下文下的target/hello-0.0.1-SNAPSHOT.jar檔案複製到容器的/目錄下
ADD:和COPY類似,推薦使用COPY
CMD:和RUN類似,在 docker build時執行
ENTRYPOINT:和CMD類似
ENV:設定環境變數,格式為:ENV <key> <value> 或 ENV <key1>=<value1> <key2>=<value2>...
ARG:構建引數,和ENV類似,僅在Dockerfile內有效,即僅在docker build過程中有效
VOLUME:定義掛載資料卷,預設會掛到匿名卷下,格式為:VOLUME ["<路徑1>", "<路徑2>"...] 或 VOLUME <路徑>
EXPOSE:宣告埠,方便在使用中對映,在使用中使用docker run -P隨機埠對映時,會隨機對映EXPOSE埠
WORKDIR:指定工作目錄,格式如:WORKDIR <工作目錄路徑>
USER:指定後續命令執行的使用者和使用者組,格式如:USER <使用者名稱>[:<使用者組>]
Dockerfile檔案放於專案根目錄下,接著執行格式如下的命令生成映象:
docker build -t 映象名稱:映象標籤 上下文路徑(需要打包複製到映象的目錄,未指定則預設是存放Dockerfile檔案的所在目錄)
如:
docker build -t spring_boot_docker_image:latest .
2.3 執行目標映象
執行目標映象,可以直接命令執行,也可以通過idea外掛執行。
2.3.1 命令執行
命令執行同其它映象執行一樣,示例如下:
docker run -d -p 20004:8051 --name spring_boot_docker spring_boot_docker_image
2.3.2 通過idea外掛執行
idea中通過外掛整合了docker功能,可以對docker中映象及容器進行管理。在操作前,提前安裝好idea及docker外掛。以專案部署為例,操作包含idea配置和目標專案配置,具體如下:
-
idea配置
1、idea控制介面,安裝docker外掛,Preferences | Plugins ->docker; 2、idea控制介面,新增docker,Preferences | Build, Execution, Deployment | Docker -> 新增docker,並連線成功 3、回到idea操作介面,選擇底部Services,在底部左則可看到安裝好的Docker,右鍵點選連線。下拉選項可以看到已經安裝的映象和容器
-
目標專案配置
1、修改pom.xml,新增docker-maven-plugin外掛 2、執行maven package,生成專案映象 3、在idea操作介面services中的docker映象中,找到剛建立的專案映象,右鍵新建容器,在彈框中指定容器名稱、機器埠與容器埠對映關係 4、執行新建立的容器,採用機器埠即可訪問docker容器中執行的映象
三、示例
這裡以部署自定義專案spring_boot_docker到docker為例,直接藉助idea的docker外掛部署。
3.1 建立自定義專案
示例自定義專案為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>
<!--將外掛繫結在某個phase執行-->
<executions>
<execution>
<id>build-image</id>
<!--繫結在package階段執行外掛,即執行mvn package時,就會自動執行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定映象名-->
<imageName>${project.artifactId}</imageName>
<!--指定標籤,即映象版本-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!--指定基礎映象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服務地址-->
<!-- <dockerHost>tcp://localhost:2375</dockerHost>-->
<!-- 複製生成的jar包到docker容器指定目錄-->
<resources>
<resource>
<!-- 將生成的jar包複製到容器指定路徑下-->
<targetPath>/home/app</targetPath>
<!--指定資源目錄,這裡為maven打包後的target目錄-->
<directory>${project.build.directory}</directory>
<!-- 指定需要複製的檔案,這裡為生成的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";
}
}
啟動類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 生成目標映象
在idea中選擇maven的package,對自定義專案spring_boot_docker打包,打完包。可以在docker外掛發現已經生成的包。當然也可以通過命令檢視:
docker images
3.3 執行目標映象
在idea的docker外掛中,選擇新生成的映象,並建立容器,指定埠對映(20004:8051)資訊,執行視窗即可,也可通過命令執行行執行,命令如下:
docker run -d -p 20004:8051 --name spring_boot_docker spring_boot_docker
3.4 測試
GET http://localhost:20004/hello
Accept: application/json
響應:
hello, nice to meet you
相關文章
- docker部署專案Docker
- [部署02] Docker 部署vue專案DockerVue
- Docker 部署 vue 專案DockerVue
- Docker部署Java專案DockerJava
- Docker部署Python專案DockerPython
- 使用 Docker 部署 vue 專案DockerVue
- 使用 Docker 部署 Angular 專案DockerAngular
- docker部署Web專案(二)DockerWeb
- C# 專案 docker 部署C#Docker
- Docker-Docker部署SpringBoot專案DockerSpring Boot
- Docker(四)Docker部署SpringBoot專案DockerSpring Boot
- Linux部署之Docker方式部署專案LinuxDocker
- Docker搭建部署Node專案Docker
- Docker部署SpringBoot專案DockerSpring Boot
- docker 部署 django + mysql + vue 專案DockerDjangoMySqlVue
- 基於 Docker 映象部署 go 專案DockerGo
- 使用 Docker 部署 Spring Boot 專案DockerSpring Boot
- 嘗試使用 docker 部署 Laravel 專案DockerLaravel
- 使用 Docker 部署 NodeJS + MongoDB 專案DockerNodeJSMongoDB
- 使用Docker部署Spring Boot專案DockerSpring Boot
- 如何用Docker Compose部署專案?Docker
- 在docker容器中部署Web專案DockerWeb
- SpringBoot使用Docker快速部署專案Spring BootDocker
- 在Docker中部署Spring Boot專案DockerSpring Boot
- 初學docker部署springboot專案DockerSpring Boot
- idea 連線遠端 docker 並部署專案到 dockerIdeaDocker
- 在centos8使用Docker部署Django專案CentOSDockerDjango
- Citypos專案的docker化部署實踐Docker
- 截圖的誘惑:Docker部署Puppeteer專案Docker
- [手把手系列之]Docker 部署 vue 專案DockerVue
- 使用 Docker 部署 Spring Boot 專案,帶勁!!DockerSpring Boot
- React 實踐專案 (五)Docker Nginx 部署 ReactReactDockerNginx
- docker-compose 部署 Laravel 專案全記錄DockerLaravel
- 基於Docker&Fabric的Web專案部署方案DockerWeb
- Linux伺服器使用Docker部署.net Core專案Linux伺服器Docker
- docker+nginx+redis部署前後端分離專案!!!DockerNginxRedis後端
- 十一、Docker搭建部署SpringCloud微服務專案DemoDockerSpringGCCloud微服務
- spring-boot專案的docker整合化部署(一)SpringbootDocker