docker file 打包jar_dockerfile编写打包war包到镜像

添加文件

例如:

ADD my.cnf /etc/mysql

or

ADD my.cnf /etc/mysql/

以上两条命令均可以将my.cnf文件添加到/etc/mysql文件夹下面。

1

2

3

4

5

6

例如:

ADDmy.cnf/etc/mysql

or

ADDmy.cnf/etc/mysql/

以上两条命令均可以将my.cnf文件添加到/etc/mysql文件夹下面。

添加文件夹

Dockerfile添加文件夹,则必须镜像中存在和当前文件夹同名的文件夹才行。例如,我希望将当前目录下的views文件夹添加到docker镜像中的app文件夹下。也许你会采用这样的方式:

ADD views /app #错误的方式

ADD views /app/views #正确的方式

1

2

3

ADDviews/app#错误的方式

ADDviews/app/views#正确的方式

也就是说:镜像中存在和当前需要拷贝或添加的文件夹同名的文件夹时,才能够拷贝或添加成功。

声明环境变量:

ENV :在docker 启动容器的时候传递给容器的环境变量

ENV JAVA_HOME=/opt/jdk1.8.0 #设置(容器启动时的)环境变量

ENV JRE_HOME=$JAVA_HOME/jre

ENV PATH=$JAVA_HOME/bin:$PATH

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

注意:(建议用一层环境变量,可以使用反斜杠换行)

1

2

3

4

5

6

7

ENVJAVA_HOME=/opt/jdk1.8.0#设置(容器启动时的)环境变量

ENVJRE_HOME=$JAVA_HOME/jre

ENVPATH=$JAVA_HOME/bin:$PATH

ENVCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

注意:(建议用一层环境变量,可以使用反斜杠换行)

ARG: build过程当中,传递给build 的参数(参数)

ARG xxx=/opt/demo

ARG xxx=/opt/demo2

1

2

ARGxxx=/opt/demo

ARGxxx=/opt/demo2

运行镜像

RUN :是在build命令的的过程当中运行的(只要定义的RUN都会被运行)

CMD:是在docker run启动镜像的过程中运行的(只能定义一个,定义多个没用)

ENTRYPOINT:只会运行cmd,如果有这个,cmd就没用了

用户身份

USER:用于指定运行image时的或运行Dockerfile中任何RUN,CMD,或ENTRYPOINT指令的程序是的用户名或者UID

健康状态检测

HEALTHCHECK:

HEALTHCHECK --interval=5m --timeout=3s \ #检测试剂5分钟,超时时间3秒钟

CMD curl -f http://loclahost/ || exit 1 #检测命令,如果成功就ok,错误就返回1并且退出

1

2

HEALTHCHECK--interval=5m--timeout=3s\#检测试剂5分钟,超时时间3秒钟

CMDcurl-fhttp://loclahost/||exit1#检测命令,如果成功就ok,错误就返回1并且退出

挂载

VOLUME

VOLUME [ "/data" ] #将这个目录作为存储卷进行挂载

1

VOLUME["/data"]#将这个目录作为存储卷进行挂载

下面是完整构建镜像代码

FROM centos:7#你的war/jar包要放的系统镜像,也可以是你自制的本地镜像id 例如:FROM e28fcf3c832f

ENV container docker#设置环境变量

WORKDIR /opt/#切换到镜像里某个目录

RUN mkdir jdk1.8.0

RUN mkdir apache-tomcat-7.0

ADD jdk1.8.0 /opt/jdk1.8.0

ADD apache-tomcat-7.0 /opt/apache-tomcat-7.0

ADD hello.war /opt/apache-tomcat-7.0/webapps

ENV JAVA_HOME=/opt/jdk1.8.0

ENV JRE_HOME=$JAVA_HOME/jre

ENV PATH=$JAVA_HOME/bin:$PATH

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \

systemd-tmpfiles-setup.service ] || rm -f $i; done); \

rm -f /lib/systemd/system/multi-user.target.wants/*;\

rm -f /etc/systemd/system/*.wants/*;\

rm -f /lib/systemd/system/local-fs.target.wants/*; \

rm -f /lib/systemd/system/sockets.target.wants/*udev*; \

rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \

rm -f /lib/systemd/system/basic.target.wants/*;\

rm -f /lib/systemd/system/anaconda.target.wants/*;

VOLUME [ "/sys/fs/cgroup" ] #将这个目录作为存储卷进行挂载

CMD ["/usr/sbin/init"]#执行shell命令

EXPOSE 8088 #就是将容器的对应端口服务公开给外界访问,而EXPOSE仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

ENTRYPOINT ["/opt/apache-tomcat-7.0/bin/catalina.sh","run"] #和CMD差不多,都是运行指令之类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

FROMcentos:7#你的war/jar包要放的系统镜像,也可以是你自制的本地镜像id 例如:FROM e28fcf3c832f

ENVcontainerdocker#设置环境变量

WORKDIR/opt/#切换到镜像里某个目录

RUNmkdirjdk1.8.0

RUNmkdirapache-tomcat-7.0

ADDjdk1.8.0/opt/jdk1.8.0

ADDapache-tomcat-7.0/opt/apache-tomcat-7.0

ADDhello.war/opt/apache-tomcat-7.0/webapps

ENVJAVA_HOME=/opt/jdk1.8.0

ENVJRE_HOME=$JAVA_HOME/jre

ENVPATH=$JAVA_HOME/bin:$PATH

ENVCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

RUN(cd/lib/systemd/system/sysinit.target.wants/;foriin*;do[$i==\

systemd-tmpfiles-setup.service]||rm-f$i;done);\

rm-f/lib/systemd/system/multi-user.target.wants/*;\

rm-f/etc/systemd/system/*.wants/*;\

rm-f/lib/systemd/system/local-fs.target.wants/*;\

rm-f/lib/systemd/system/sockets.target.wants/*udev*;\

rm-f/lib/systemd/system/sockets.target.wants/*initctl*;\

rm-f/lib/systemd/system/basic.target.wants/*;\

rm-f/lib/systemd/system/anaconda.target.wants/*;

VOLUME["/sys/fs/cgroup"]#将这个目录作为存储卷进行挂载

CMD["/usr/sbin/init"]#执行shell命令

EXPOSE8088#就是将容器的对应端口服务公开给外界访问,而EXPOSE仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

ENTRYPOINT["/opt/apache-tomcat-7.0/bin/catalina.sh","run"]#和CMD差不多,都是运行指令之类

docker build . -t demo:v1.0 #构建镜像并且给镜像打上标签。不打标签就是原始的文字码

启动容器

docker run --name myapp --net bridge -it demo:v1.0

...

1

2

3

4

5

dockerbuild.-tdemo:v1.0#构建镜像并且给镜像打上标签。不打标签就是原始的文字码

启动容器

dockerrun--namemyapp--netbridge-itdemo:v1.0

...

最后编辑:2020-10-13作者:shooter

这个作者貌似有点懒,什么都没有留下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值