Skip to content

Docker发布

使用 Docker 部署 Spring Boot

注意

Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单。

项目添加 Docker 支持

  • plugins 中添加 Docker 构建插件
xml
      <!-- docker打包插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>${dockerfile-maven-plugin.version}</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <tag>${acuity-project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
      <!-- docker打包插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>${dockerfile-maven-plugin.version}</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <tag>${acuity-project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

dockerfile

  • 创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
shell
  FROM openjdk:11-jre
  MAINTAINER acuity acuier@163.com

  RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

  ARG JAR_FILE="target/XXX-server.jar"  #貌似取不到JAR_FILE

  ADD ${JAR_FILE} /app.jar  # or COPY ${JAR_FILE} /app.jar

  ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
  CMD ["--spring.profiles.active=docker"]
  FROM openjdk:11-jre
  MAINTAINER acuity acuier@163.com

  RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

  ARG JAR_FILE="target/XXX-server.jar"  #貌似取不到JAR_FILE

  ADD ${JAR_FILE} /app.jar  # or COPY ${JAR_FILE} /app.jar

  ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
  CMD ["--spring.profiles.active=docker"]

必要的服务docker-compose.yml示例

使用docker部署的支持服务,

yaml
 version: '3.1'
 services:
   db:
     image: mysql:8.0.24
     container_name: acuity_mysql8
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: 20180101
       MYSQL_USER: acuier             # 设置另一个用户 test
       MYSQL_PASS: Gyhcqd0408         # acuier的密码
       TZ: Asia/Shanghai
       default-time_zone: '+8:00'
     # docker安全验证
     security_opt:
       - seccomp:unconfined
     command:
       --default-authentication-plugin=mysql_native_password
       --character-set-server=utf8mb4
       --collation-server=utf8mb4_general_ci
       --explicit_defaults_for_timestamp=true
       --lower_case_table_names=1

     ports:
       - 13306:3306
     volumes:
       - ./data:/var/lib/mysql
       - ./conf:/etc/mysql/conf.d
       - ./logs:/logs
 version: '3.1'
 services:
   db:
     image: mysql:8.0.24
     container_name: acuity_mysql8
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: 20180101
       MYSQL_USER: acuier             # 设置另一个用户 test
       MYSQL_PASS: Gyhcqd0408         # acuier的密码
       TZ: Asia/Shanghai
       default-time_zone: '+8:00'
     # docker安全验证
     security_opt:
       - seccomp:unconfined
     command:
       --default-authentication-plugin=mysql_native_password
       --character-set-server=utf8mb4
       --collation-server=utf8mb4_general_ci
       --explicit_defaults_for_timestamp=true
       --lower_case_table_names=1

     ports:
       - 13306:3306
     volumes:
       - ./data:/var/lib/mysql
       - ./conf:/etc/mysql/conf.d
       - ./logs:/logs
yaml
  version: '3'
  services:
    minio:
      image: minio/minio:latest
      container_name: myminio
      ports:
        - 9000:9000
        - 9001:9001
      volumes:
        - ./data:/data
        - ./config:/root/.minio
      environment:
        MINIO_ROOT_USER: "root"
        MINIO_ROOT_PASSWORD: "root"
      command: server --console-address ':9001' /data
      restart: always
      privileged: true
  version: '3'
  services:
    minio:
      image: minio/minio:latest
      container_name: myminio
      ports:
        - 9000:9000
        - 9001:9001
      volumes:
        - ./data:/data
        - ./config:/root/.minio
      environment:
        MINIO_ROOT_USER: "root"
        MINIO_ROOT_PASSWORD: "root"
      command: server --console-address ':9001' /data
      restart: always
      privileged: true
yaml
  version: '3'
  services:

    redis:
      image: redis:6.0.8
      container_name: redis
      volumes:
        - ./conf/redis.conf:/etc/redis.conf
        - ./conf/sysctl.conf:/etc/sysctl.conf
      ports:
        - '6379:6379'
      command: [ "redis-server", "/etc/redis.conf" ]
      restart: always
  version: '3'
  services:

    redis:
      image: redis:6.0.8
      container_name: redis
      volumes:
        - ./conf/redis.conf:/etc/redis.conf
        - ./conf/sysctl.conf:/etc/sysctl.conf
      ports:
        - '6379:6379'
      command: [ "redis-server", "/etc/redis.conf" ]
      restart: always
yaml
  version: '2'
  services:
    rabbitmq:
       container_name: rabbitMQ
       hostname: rabbitmq
       environment:
         RABBITMQ_DEFAULT_USER: "acuier"
         RABBITMQ_DEFAULT_PASS: "20180101"
       image: "rabbitmq:3.8.16-management"
       restart: always
       volumes:
         - "./data:/var/lib/rabbitmq"
         - "./log:/var/log/rabbitmq/log"
       ports:
         - "15672:15672"
         - "5672:5672"
  version: '2'
  services:
    rabbitmq:
       container_name: rabbitMQ
       hostname: rabbitmq
       environment:
         RABBITMQ_DEFAULT_USER: "acuier"
         RABBITMQ_DEFAULT_PASS: "20180101"
       image: "rabbitmq:3.8.16-management"
       restart: always
       volumes:
         - "./data:/var/lib/rabbitmq"
         - "./log:/var/log/rabbitmq/log"
       ports:
         - "15672:15672"
         - "5672:5672"

欢迎使用天源云Saas快速开发系统