DockerFile 文件详解、docker-maven-plugins的使用

一、dockerFile的指令详解

命令含义说明
FROM以哪个镜像为基础开始构建基础镜像不存在会在Docker Hub上拉去(例如部署的springboot依赖于java8)
eg:FROM java:8
MAINTANIER制作者信息提供dockerfile制作者
eg:MAINTANIER 12345@qq.com
COPY从当前目录复制文件到容器. 只是单纯地复制文件src 原文件 --支持通配符–通常相对路径dest 目标路径–通常绝对路径
eg:COPY /target/* /data/
ADD类似COPY命令,从当前目录复制文件到容器. 会自动处理目录, 压缩包等情况支持URL路径----如果可以访问网络的话,会访问网络下载到本地然后打包进镜像
eg:ADD ./target/ruoyi-admin.jar /usr/local
WORKDIR指定工作目录,类似于cd命令,RUN, CMD, ENTRYPOINT 这些命令执行时的当前目录每次只会影响这个指令后续的指令
eg:WORKDIR /user/local/data/
VOLUME声明一个数据卷, 可用于挂载只能定义docker管理的卷:VOLUME /data/mysql 运行的时候会随机在宿主机的目录下生成一个卷目录
eg:VOLUME /usr/local/tmp
EXPOSE为容器打开指定要监听的端口以实现与外部通信使用格式:EXPOSE 80/tcp 23/udp不加协议默认为tcp使用-P选项可以暴露这里指定的端口!但是宿主的关联至这个端口的端口是随机的!
eg:EXPOSE 8881
ENV设置环境变量,并可被Dockerfile文件中位于其后的其它命令所调用调用格式:$A 或 ${A}
eg:ENV LANG en_US.UTF-8
RUN运行一条命令
eg:RUN mkdir -vp /vueProject/demo
eg:RUN yum install wget
CMD可用于执行脚本
eg:CMD echo “This is a test.”
eg:CMD java -jar /app/gateway.jar
ENTRYPOINT类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序,与CND不同的是,
由这个指令启动的程序不会被docker run 命令行指定的参数所覆盖而且,这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序

eg:ENTRYPOINT [“java”, “-Djava.security.egd=file:/test/./urandom”,“-jar”, “app.jar”,“-Duser.timezone=GMT+08”]
USERRUN 命令执行时的用户
(当容器中运行的服务不需要管理员权限时,可以先建立一个特定的用户和用户组,为它分配必要的权限,使用 USER 切换到这个用户)

eg:USER mysql
ONBUILD配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令
指令:ONBUILD 要执行的Dockerfile指令
ONBUILD RUN echo “---------- parent image’s ONBUILD ----------”
HEALTHCHECK这是一个健康检查指令,用来检查将来容器启动运行时是否正常
SHELL在Docker构建过程中,Linux下默认会使用/bin/sh作为shell环境。但是有时需要在其他shell环境中执行RUN的内容,这就需要用SHELL指令提醒Docker更换shell环境。
STOPSIGNAL该指令允许用户定制化运行docker stop时的信号。
ARG用于docker build 的过程中使用

1、举例

FROM java:8
MAINTAINER 12345@qq.com
# 指定零时文件路径,在主机下的路径
VOLUME /usr/local/docker/tmp
ADD cloud-docker-test-1.0.0.jar docker-test.jar
# 运行jar
RUN bash -c 'touch /docker-test.jar' ENTRYPOINT ["java","-jar","/docker-test.jar"]
EXPOSE 8881

2、jeecg-boot的某个配置

https://gitee.com/jeecg/jeecg-boot/blob/master/jeecg-server-cloud/jeecg-cloud-gateway/Dockerfile

FROM anapsix/alpine-java:8_server-jre_unlimited

MAINTAINER jeecgos@163.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN mkdir -p /jeecg-cloud-gateway

WORKDIR /jeecg-cloud-gateway

EXPOSE 9999

ADD ./target/jeecg-cloud-gateway-3.4.0.jar ./

CMD sleep 50;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-cloud-gateway-3.4.0.jar

二、docker-maven-plugins的使用

1、让docker可以远程访问、开放2375端口

修改docker.service文件

vim /lib/systemd/system/docker.service

修改前

ExecStart=/usr/bin/docker -H fd:// --containerd=/run/containerd/containerd.sock

修改后

ExecStart=/usr/bin/docker -H fd:// --containerd=/run/containerd/containerd.sock ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock

  • 开放端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload

2、刷新配置,重启服务

systemctl daemon-reload     //加载docker守护线程
systemctl restart docker    //重启docker

3、配置防火墙

systemctl stop firewalld (关闭防火墙)
systemctl disable firewalld (禁用防火墙,开机不会启动)

4、关闭防火墙

#编辑selinux/config文件
vi /etc/selinux/config
#SELINUX=enforcing改为disabled
SELINUX=disabled
#重启防火墙
systemctl restart firewalld # 重启防火墙
systemctl status firewalld #查看防火墙状态

5、项目中的使用

<!--docker的maven插件-->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>
        <dockerHost>http://192.168.11.131:2375</dockerHost>
        <imageName>ruoyi-admin.jar</imageName>
        <baseImage>java</baseImage>
        <maintainer>1056481167@qq.com</maintainer>
        <workdir>/ROOT</workdir>
        <cmd>["java", "-version"]</cmd>
        <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]        </entryPoint>
        <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
        <resources>
            <resource>
                <targetPath>/ROOT</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

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