本文已参加 [新人创作礼] 活动,一起开启掘金创作之旅。
前两章已经学习了docke的基础名词,基础命令,并且进行了实战部署容器。 这章讲解如何将自己项目创建镜像并构建容器。
1.docker file
定义
dockerfile 就是用来构建docker镜像的文本文件,内容包括多条用与构建镜像所需的环境或说明,其实
就是描述我们自己的镜像内部的需要哪些资源环境,如何构建。
使用dockerfile 构建镜像命令:
docker build dockerfilePath
我们为什么要用它
1.dockerhub中提供的官方镜像或其他镜像已经不能满足我们的日常或工作开发需要。
2.我们自己开发的应用构建成镜像,这样就可以使用docker部署我们自己的应用。
指令详解
(1) from
必须为dockerfile 第一个命令。
指定基础镜像,我们构建的镜像是基于哪个镜像,比如:构建java项目镜像,指定基础镜像为
jdk 命令:FROM openjdk:8u102-jre
(2)RUN
构建镜像时执行的指令,执行结果会新创建一层镜像层,作为下次指令所使用。
有两种指令构建方式。
1.shell
RUN <command>
RUN tar -xvf zip
2.exec
RUN ["executable","param1","paramN"]
execuable:可执行文件
(3)MAINTAINER
镜像作者的信息。
MAINTAINER:guaner
MAINTAINER:guaner@gmail.com
(4)CMD
启动容器的命令,也就是容器启动时才会调用,如果有多个的话会以最后一个为准,
也可以为ENDPOINT指令提供默认参数。
1. CMD ["executable","param1","paramN"]
CMD echo "test:" wc -l
2. CMD ["param1","paramN"]
为ENDPOINT指令指定的程序提供默认参数。
(5)ENDPOINT
类似于 CMD 指令,但不会被 docker run 的命令行参数指定的指令所覆盖,
而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
**优点**:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
**注意**:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
格式:
1.ENDPOINT ["executable","param1","paramN"]
ENTRYPOINT ["ls", "/usr/local"]
2.ENDPOINT command param1 paramN
ENTRYPOINT ls /usr/local
(6) ENV
为镜像设置环境变量
1. ENV <key> <value>
2. ENV <key>=<value>
......