Docker + Maven + Docker-compose


前言:

docker:容器化管理

maven:支持docker-maven的插件,通過 mvn clean -Dmaven.test.skip package dockerfile:build 打包命令和配置 Dockerfile 直接打出 docker 鏡像

docker-compose:服務端容器編排,使得多個容器可進行批量發布等管理操作

一、集成dockerfile-maven插件

<properties>
<java.version>1.8</java.version>
<guava.version>20.0</guava.version>
<dockerfile-maven-plugin.version>1.3.6</dockerfile-maven-plugin.version>
<docker-client.version>8.10.1</docker-client.version>
<!-- Docker鏡像倉庫 -->
<docker.registry>xxxx</docker.registry>
<docker.namespace>xxx</docker.namespace>
<docker.repo>xx</docker.repo>

<java.lib>${project.basedir}/src/main/resources/lib</java.lib>
</properties>

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--開啟本地引入JAR包--> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> <plugin>
          <!-- 這里引入dockerfile-maven插件 --> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>${dockerfile-maven-plugin.version}</version> <dependencies> <dependency> <groupId>com.spotify</groupId> <artifactId>docker-client</artifactId> <version>${docker-client.version}</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> </dependencies> <configuration> <tag>${project.artifactId}-latest</tag> <repository>${docker.registry}/${docker.namespace}/${docker.repo}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build>

二、編寫Dockerfile

在pom.xml同級目錄下編寫Dockerfile

FROM java:8
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Xmx192m", "-XX:+UseConcMarkSweepGC", "-Djava.security.egd=file:/dev/./urandom","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=/mnt/logs/heapdump_test.hprof","-jar","/test-1.0.0.RELEASE.jar"]

三、執行mvn dockerfile打包命令

mvn clean -Dmaven.test.skip package dockerfile:build

四、推送到鏡像倉庫

docker login --username=root registry.cn-xxx.aliyuncs.com

docker tag [鏡像ID] registry.cn-xxx.aliyuncs.com/namespace/repo: [鏡像版本號]

docker push registry.cn-chengdu.aliyuncs.com/kidcloud/kidcloud_repo: [鏡像版本號]

五、安裝docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose –version

六、編寫compose的yaml文件

version: '1'
services:
  demo:
    image: ${私服地址}/${命名空間}/${倉庫名}:${鏡像名稱版本號}
    environment:
     - server.port=9001
     - eureka.client.serviceUrl.defaultZone=http://discovery:8761/eureka/
     - JAVA_OPTS='-Xmx512m -Xms512m'
    ports:
     - "9001:9001"
    networks:
     - demoNetwork
    volumes:
     - /mnt/logs:/mnt/logs
    external_links:
     - eureka-server:discovery
networks:
  demoNetwork:
    external: true
image 使用的鏡像
external_links 鏈接yaml編排之外的docker容器
links 鏈接其他容器
ports 端口映射
expose 暴露端口
volumes 掛載路徑
volumes_from 從容器掛載
environment 環境變量

七、docker-compose命令啟動容器

docker-compose -f xxx.yaml up -d
docker-compose up -d

更多docker-compose命令:

https://www.cnblogs.com/linjiqin/p/8849432.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM