前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

我的dockerfile

FROM registry.cn-qingdao.aliyuncs.com/duodianyouhui/dev-server:1
#FROM java:8
MAINTAINER HealerJean

ADD target/admin-1.0-SNAPSHOT.jar app.jar


RUN ["mkdir","-p","/usr/local/webproject/images/"]
RUN ["mkdir","-p","/usr/local/webproject/images/erweimaEmptUrl"]

COPY dockerDirectory/contactmanager.jpg /usr/local/webproject/images/
COPY dockerDirectory/shike.jpg          /usr/local/webproject/images/

#将字体打包到镜像中
COPY dockerDirectory/PingFang.ttc /usr/share/fonts/truetype/dejavu/





CMD ["java","-jar","-Xms256m","-Xmx7000m","/app.jar"]


1、FROM

FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。 这就是为什么我上面写了java:8和来自阿里云的url,一开始阿里云自定镜像并没有创建成功,所以用了java8

2、MAINTAINER 作者

3、COPY 复制

COPY dockerDirectory/PingFang.ttc /usr/share/fonts/truetype/dejavu/

3.1<源路径>可以是多个,甚至可以是通配符, 但是只能是相对路径

3.2、<目标路径>可以是容器内的绝对路径,也可以是相对于工作目录的相对路径,这里官方说是目标路径不存在的话会自动创建,但是我测试的时候,并没有自动创建。而是报错了

4、ADD 更高级的复制文件

ADD target/admin-1.0-SNAPSHOT.jar app.jar

ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。比如 <源路径>可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径>去。

进入容器中观察,发现直接app.jar就在根目录下面,说吧是根据From的基础镜像打包进去的

注意:

格式:ADD    

只是因为我们判断不了dest有没有,所以才有了下面的斜杠

如果是文件且中不使用斜杠结束,则会将视为文件,的内容会写入; 如果是文件且中使用斜杠结束,则会文件拷贝到目录下。

root@19d5e118852b-dev-server-server-dev-8086-1:/# cd /
root@19d5e118852b-dev-server-server-dev-8086-1:/# ls -l
total 78744
-rw-r--r--   1 root root 80568237 Aug 29 03:24 app.jar
drwxr-xr-x   2 root root     4096 Jan 17  2017 bin
drwxr-xr-x   2 root root     4096 Dec 28  2016 boot
drwxr-xr-x   5 root root      340 Aug 29 03:33 dev
drwxr-xr-x  83 root root     4096 Aug 29 03:33 etc
drwxr-xr-x   2 root root     4096 Dec 28  2016 home
drwxr-xr-x  13 root root     4096 Jan 17  2017 lib
drwxr-xr-x   2 root root     4096 Jan 16  2017 lib64
drwxr-xr-x   2 root root     4096 Jan 16  2017 media
drwxr-xr-x   2 root root     4096 Jan 16  2017 mnt
drwxr-xr-x   2 root root     4096 Jan 16  2017 opt
dr-xr-xr-x 142 root root        0 Aug 29 03:33 proc
drwx------   2 root root     4096 Jan 16  2017 root
drwxr-xr-x   3 root root     4096 Jan 16  2017 run
drwxr-xr-x   2 root root     4096 Jan 16  2017 sbin
drwxr-xr-x   2 root root     4096 Jan 16  2017 srv
dr-xr-xr-x  13 root root        0 Aug 29 03:33 sys
drwxrwxrwt   7 root root     4096 Aug 29 03:33 tmp
drwxr-xr-x  32 root root     4096 Aug 29 03:33 usr
drwxr-xr-x  23 root root     4096 Jan 17  2017 var
root@19d5e118852b-dev-server-server-dev-8086-1:/# 

5、CMD 指定在容器启动时所要执行的命令

CMD [“executable”,”param1”,”param2”]

CMD ["java","-jar","-Xms256m","-Xmx7000m","/app.jar"]

注意 

与 RUN 指令的区别:RUN 在构建的时候执行,并生成一个新的镜像,CMD 在容器运行的时候执行,在构建时不进行任何操作。

6、RUN

RUN ["mkdir","-p","/usr/local/webproject/images/"]
RUN ["mkdir","-p","/usr/local/webproject/images/erweimaEmptUrl"]

◦ RUN 命令将在当前 image 中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行 Dockerfile 中的下一个指令。
 ◦ 层级 RUN 指令和生成提交是符合 Docker 核心理念的做法。它允许像版本控制那样,在任意一个点,对 image 镜像进行定制化构建。
 ◦ RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定 –no-cache 参数,如: docker build –no-cache。


ContactAuthor