一、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”] |
USER | RUN 命令执行时的用户 (当容器中运行的服务不需要管理员权限时,可以先建立一个特定的用户和用户组,为它分配必要的权限,使用 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版权协议,转载请附上原文出处链接和本声明。