dockerfile简解以及复制到容器中
前言
Github:https://github.com/HealerJean
我的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。