• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    二、docker-maven-plugins的使用

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

    修改docker.service文件
    vim /lib/systemd/system/docker.service
    
    • 1
    修改前

    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
    
    • 1
    • 2

    2、刷新配置,重启服务

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

    3、配置防火墙

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

    4、关闭防火墙

    #编辑selinux/config文件
    vi /etc/selinux/config
    #SELINUX=enforcing改为disabled
    SELINUX=disabled
    #重启防火墙
    systemctl restart firewalld # 重启防火墙
    systemctl status firewalld #查看防火墙状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5、项目中的使用

    
    <plugin>
        <groupId>com.spotifygroupId>
        <artifactId>docker-maven-pluginartifactId>
        <version>1.0.0version>
        <configuration>
            <dockerHost>http://192.168.11.131:2375dockerHost>
            <imageName>ruoyi-admin.jarimageName>
            <baseImage>javabaseImage>
            <maintainer>1056481167@qq.commaintainer>
            <workdir>/ROOTworkdir>
            <cmd>["java", "-version"]cmd>
            <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]        entryPoint>
            
            <resources>
                <resource>
                    <targetPath>/ROOTtargetPath>
                    <directory>${project.build.directory}directory>
                    <include>${project.build.finalName}.jarinclude>
                resource>
            resources>
        configuration>
    plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    JavaEE-文件IO操作
    如何找到新媒体矩阵中存在的问题?
    新技能:通过代码缓存加速 Node.js 的启动
    Faster R-CNN pytorch版
    初探富文本之React实时预览
    Python入门之设置环境变量与缩进
    一步一图带你深入剖析 JDK NIO ByteBuffer 在不同字节序下的设计与实现
    第四十九章 Applications
    【Leetcode Sheet】Weekly Practice 7
    从您输入网站 URL 到其在屏幕上完成加载的整个过程
  • 原文地址:https://blog.csdn.net/www1056481167/article/details/126835888