Docker入门到精通 (10)-SpringBoot使用Docker插件

193 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

1、创建

创建SpringBoot项目,在build plugins标签下引入依赖

    <build>
        <plugins>
            <!--docker-->
            <!--docker:run是不在后台运行的,注意使用start-->
            <!--完成的命令如下-->
            <!--mvn clean package docker:stop docker:remove docker:build -DskipTests docker:start-->
            <!--mvn clean package docker:build -DskipTests docker:push-->
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.35.0</version>
                <configuration>
                    <!--<dockerHost>DOCKER地址</dockerHost>-->
                    <!--推送镜像地址,这块是我自己的阿里云镜像地址-->
                    <registry>registry.cn-qingdao.aliyuncs.com/amoqi-study</registry>
                    <!--可以把这块密码放到maven setting配置文件里-->
<!--                <authConfig>
                        <push>
                            <username></username>
                            <password></password>
                        </push>
                    </authConfig>-->
                    <images>
                        <image>
                            <name>${project.name}</name>
                            <alias>${project.name}</alias>
                            <build>
                                <dockerFileDir>${project.basedir}/src/main/docker/</dockerFileDir>
                                <assembly>
                                    <descriptorRef>artifact</descriptorRef>
                                </assembly>
                                <tags>
                                    <tag>1.0.0</tag>
                                </tags>
                            </build>
                            <run>
                                <!--数据卷,挂在文件的地址,例如输出项目日志-->
                                <!--<volumes>
                                    <bind>
                                        <volume>/root/sms:/sms</volume>
                                    </bind>
                                </volumes>-->
                                <namingStrategy>alias</namingStrategy>
                                <!--端口映射-->
                                <ports>
                                    <port>0.0.0.0:8089:8080</port>
                                </ports>
                                <restartPolicy>
                                    <name>always</name>
                                </restartPolicy>
                            </run>
                        </image>
                    </images>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、标签说明

<dockerHost>:代表的是安装docker的地址

<registry>:推送镜像的地址

authConfig push:镜像地址的用户名密码。可以配置到使用maven的conf/setting.xml文件中,如下

    <servers>
          <server>
            <id>registry.cn-qingdao.aliyuncs.com/amoqi-study/</id>
            <username>*</username>
            <password>*</password>
          </server>
    </servers>

volumes:数据卷,挂在文件的地址,例如输出项目日志

ports: 映射端口号地址

3、配置文件

创建Dockerfile文件,创建src/main/docker/Dockerfile文件,内容如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
# ADD maven/springboot-docker-0.0.1-SNAPSHOT.jar app.jar
ADD maven/*.jar app.jar
RUN sh -c 'touch /app.jar'
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

4、命令使用

执行推送

mvn clean package docker:build -DskipTests docker:push

可执行命令运行,会直接运行到容器里

mvn clean package docker:stop docker:remove docker:build -DskipTests docker:start

5、使用推送的镜像

5.1、编写docker-compose.yml文件,注意image是我自己的阿里镜像地址库,可以登录阿里云选择产品容器镜像服务来获取

version: '3.5' # docker-compose的版本号
services:
  # docker-compose 服务名
  docker-test:
    # 阿里云镜像地址
    image: registry.cn-qingdao.aliyuncs.com/amoqi-study/springboot-docker:latest
    # 容器名称
    container_name: docker-test
    ports:
      # 端口映射
      - 8080:8080
    networks:
      test:
        aliases:
          # 在网络中的名称,如果有多个容器使用 test 网络,可以使用 docker-test 进行访问
          - docker-test
networks:
  test:
   # 创建test网络
    name: test
    driver: bridge