关于docker容器化部署的一些心得

最近在项目上,接触到SpringCloud Alibaba这一套,还有docker等部署,有些心得,遂整理记录下来


0.配置docker远程连接

vi /lib/systemd/system/docker.service

第一行后加上
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

1. 在项目根目录编写Dockerfile文件

FROM adoptopenjdk/openjdk8-openj9:alpine-slim

MAINTAINER fht@163.com

RUN mkdir -p /cn/fht/demo

WORKDIR /cn/fht/demo

EXPOSE 8200

ADD ./target/demo.jar ./app.jar

ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

CMD ["--spring.profiles.active=pro"]

关于 FROM adoptopenjdk/openjdk8-openj9:alpine-slim基础镜像,

相比于FROM openjdk:8u181-jre-slim-stretch  主要作用就是

OpenJ9 JVM,通过将 HotSpot 更换为 OpenJ9,内存占用能降低至少 60%,而启动时间也能快 40% 以上,效果立竿见影。


2.为了方便构建可以试用maven插件,引入dockerfile-maven-plugin

注意还有个docker-maven-plugin插件,配置不一样,spotify推荐使用前者

    <properties>
        <!-- Harbor仓库配置 --> 
        <!--<docker.registry.host>http://${docker.registry.url}:2375</docker.registry.host>-->
        <!--只使用dockerfile:build命令,镜像名就是 cn/demo/项目名:标签-->
        <!--使用dockerfile:push命令,需要重新配置仓库推送地址,修改下面的属性-->
        <docker.registry.url>cn</docker.registry.url>
        <docker.namespace>demo</docker.namespace>
        <docker.username>fht</docker.username>
        <docker.password>Harbor12345</docker.password>
        <docker.plugin.version>1.4.13</docker.plugin.version>
    </properties>
<build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>${docker.plugin.version}</version>
                <configuration>
                    <username>${docker.username}</username>
                    <password>${docker.password}</password>
                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <skip>false</skip>
                </configuration>
            </plugin>
           
        </plugins>
    </build>

我这里只演示dockerfile:build命令,docker.registry.url 如果用Harbor仓库可以改成对应ip

因为docker环境默认为localhost:2375的,故可设置环境变量DOCKER_HOST=tcp://ip:port

或者命令行带上DOCKER_HOST,但是没必要,配置插件就是为了方便,这里不提供例子。

友情提示:这里构建是利用DOCKER_HOST的docker环境执行的,需要docker配置远程2375重启。这里是内网环境,服务器不推荐开放2375,不安全。单机非要配置,可以不配环境变量,本机装个docker环境,构建好镜像。再推送或者docker save,docker load。


3.先package打包,再执行dockerfile:build成功后,DOCKER_HOST机器上就有镜像了。

提示:package和dockerfile:build我这里没有绑定,需分开顺序执行

如需要绑定执行,请在插件标签内添加

<executions>
    <execution>
       <id>default</id>
       <phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
       <goals>
           <goal>build</goal><!-- 要绑定的插件的目标 -->
       </goals>
    </execution>
</executions>

4.之后可通过docker images查看镜像

通过docker run创建容器执行

或者编写docker-compose.yml文件 docker-compose  up  -d创建容器执行


版权声明:本文为langchao7946原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。