赞
踩
Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。
Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。一般而言,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
1、命令:docker build
2、作用:将 Dockerfile 文件构建成镜像
3、语法:docker build -f 文件名 -t 镜像名称:版本 .
. 代表 Dockerfile 文件在当前路径
-f 可以指定 Dockerfile 文件名,一般文件名为 Dockerfile
-t 可以定义镜像名称以及版本
注意:构建镜像一般是在 Dockerfile 文件所在的目录去构建的
[root@localhost opt]# vim Dockerfile FROM openjdk:8 MAINTAINER huhai CMD echo "Hello Doker!" [root@localhost opt]# docker build -t test:1.0 . Sending build context to Docker daemon 618.2 MB Step 1/3 : FROM openjdk:8 ---> b273004037cc Step 2/3 : MAINTAINER c ---> Running in 515cebaac130 ---> 12c10f87abc6 Removing intermediate container 515cebaac130 Step 3/3 : CMD echo "Hello Doker!" ---> Running in 12e0b57f87e5 ---> 837916b31a37 Removing intermediate container 12e0b57f87e5 Successfully built 837916b31a37 [root@localhost opt]# docker run -it test:1.0 Hello Doker #-f可以使用指定的Dockerfile文件名 [root@localhost opt]# docker build -f Dockerfile02 -t test:2.0 . ...... #在其他目录构建报错 [root@localhost home]# docker build -f /opt/Dockerfile02 -t test:3.0 . unable to prepare context: The Dockerfile (/opt/Dockerfile02) must be within the build context (.) #Dockerfile必须在构建上下文中
1)指令作用:指定基础镜像,必须为第一个命令
2)指令格式:FROM 镜像名称:版本(若不指定版本则默认使用 latest 版本)
FROM openjdk:8
1)指令作用:指定维护者信息
2)指令格式:MAINTAINER 维护者信息
维护者信息可为名字,也可为邮箱,也可为名字加邮箱
MAINTAINER huhai
MAINTAINER huhai<huhai@qq.com>
1)指令作用:构建镜像时执行的命令
2)指令格式:
shell 格式:RUN 命令
exec 格式:RUN [“可执行文件”,“参数1”,“参数2”]
RUN 指令创建的中间镜像会被缓存,并在下次构建汇中使用。在构建时使用 --no-cache 参数可以不使用缓存镜像,如:docker build --no-cache
RUN mkdir docker
RUN echo "test" > test.info
1)指令作用:构建容器后调用,即在容器启动时才进行调用
2)指令格式:
shell 格式:CMD 命令
exec 格式:CMD [“可执行文件”,“参数1”,“参数2”]
CMD 与 RUN 的不同点:
CMD 用于指定在容器启动时所要执行的命令,而 RUN 用于指定镜像构建时所要执行的命令
CMD echo "Hello Dockerfile!"
CMD ["/usr/bin/wc",“--help”]
1)指令作用:指定工作目录,类似于 cd 命令
2)指令格式:WORKDIR 目录名
通过 WORKDIR 命令设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。
在使用 docker run 运行容器时,可以通过 -w 参数覆盖构建时所设置的工作目录。
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c)
WORKDIR /opt
RUN mkdir docker
1)指令作用:将本地文件添加到容器中,tar 类型的文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似于 wget
2)指令格式:ADD 宿主机文件位置 容器中文件位置
可以使用模糊查询添加多个符合条件的文件,例如:ADD hello* /opt,添加所有 hello 开头的文件
ADD /opt/apache-tomcat-8.5.27.tar.gz /opt
1)指令作用:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。
2)指令格式:COPY 宿主机路径 容器内路径
COPY ./start.sh /start.sh
1)指令作用:配置容器,使其可执行化。指定容器启动时要运行的命令,可以追加命令,与 CMD 一样,但有不同之处
2)指令格式:
ENTRYPOINT [“可执行文件”,“参数1”,“参数2”]
ENTRYPOINT 命令 参数1 参数2(shell内部命令)
通过 docker run 执行的命令不会覆盖 ENTRYPOINT,而 docker run 命令中指定的任何参数,都会被当做参数再次传递给 ENTRYPOINT 。
Dockerfile 中只允许有一个 ENTRYPOINT 命令,多指定时会覆盖前面的设置,而只执行最后的 ENTRYPOINT 指令。
二者区别:
- CMD #指定这个容器启动的时候要运行的命令,可被替换
- ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ENTRYPOINT ["top","-b"]
1)指令作用:用于设置环境变量,下面指令和容器中的程序都可以使用此处定义的环境变量
2)指令格式:ENV key=value
一次只能设置一个变量,但可以设置多个变量,每个变量为一个 key=value 的键值对
如果 key 中包含空格,可以使用 \ 来进行转义,也可以通过 “” 来进行标示
反斜线也可以用于续行
ENV JAVA_HOME=/usr/local/jdk1.8.0_333
ENV PATH=$JAVA_HOME/bin:$PATH
1)指令作用:指定与外界交互的端口
2)指令格式:EXPOSE 端口号
EXPOSE 并不会让容器的端口访问到主机。要使其可访问,需要在 docker run 运行容器时通过 -p 参数来发布这些端口。
EXPOSE 8080
1)指令作用:用于指定持久化目录
2)指令格式:VOLUME [“挂载卷地址”,…]
一个卷可以存在于一个或多个容器的指定目录,改目录可以绕过联合文件系统,并具有一下功能:
- 卷可以容器间共享和重用
- 容器并不一定要和其它容器共享卷
- 修改卷后会立即生效
- 对卷的修改不会对镜像产生影响
- 卷会一直存在,直到没有任何容器在使用它
VOLUME ["/opt/my_data"]
VOLUME ["/opt/my_data","/opt/test"]
1)指令作用:以什么用户去运行
2)指令格式:USER 用户
使用 USER 指定用户后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT 都将使用该用户
镜像构建完成后,通过 docker run 运行容器时,可以通过 -u 参数来覆盖所指定的用户
1)指令作用:帮助其他容器生成,即指令后的命令不在此次镜像构建中运行,会在其他继承此镜像的镜像中运行
2)指令格式:ONBUILD 其他指令
FROM centos
WORKDIR /data
ONBUILD RUN mkdir test
#test:1.0为上面Dockerfile文件构建
FROM test:1.0
#基础镜像
FROM java:8
#维护者信息
MAINTAINER huhai
#拷贝tomcat包
ADD /opt/apache-tomcat-8.5.27.tar.gz /usr/local
#设置工作目录
WORKDIR /usr/local
#设置环境变量
ENV TOMCAT_HOME=/usr/local/apache-tomcat-8.5.27
ENV PATH=$PATH:$TOMCAT_HOME/bin
#保留端口
EXPOSE 8080
#启动容器命令
CMD startup.sh && tail -F /usr/local/apache-tomcat-8.5.27/bin/catalina.bat
[root@localhost opt]# docker build -t tomcat:1.0 .
[root@localhost opt]# docker run -d --name my_tomcat -p 8080:8080 tomcat:1.0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。