Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定呀镜像。
8.1 基本结构
一般而言,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。
例如:
[[email protected] ~]# mkdir nginx
[[email protected] nginx]# vi Dockerfile
#docker for nginx
FROM ubuntu:14.04
MAINTAINER lxldoudou [email protected]
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/source.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\n daemon off;" >> /etc/nginx/nginx.conf
CMD /usr/sbin/nginx
然后保存、退出
[[email protected] nginx]# docker build -t="ubuntu:nginx" .
#后面记得写Dockerfile的路径
#这样的话就可以创建一个安装了nginx的ubuntu镜像
8.2 指令说明
- Dockerfile中以#开头的行全为注释行
- FROM <image>:<tag> 指定基础镜像
- MAINTAINER <name> 指定维护者信息
- RUN <command> 或 RUN ["executable file", "parameter1", ...] 在当前镜像中执行指定命令,执行的结果会被镜像保存
- CMD 用法类似于RUN,用于指定Docker容器启动时执行的命令。Dockerfile中只能有一个CMD,并且此CMD命令会被启动Docker容器时指定的参数覆盖
- LABEL <key>=<value> <key>=<value> 为Docker镜像指定meta信息,同时会覆盖基础镜像中的meta信息
- EXPOSE <port> <port> .... 指定暴露的端口号
- ENV <key>=<value> 或者 ENV <key> <value> 指定镜像的环境变量,会被镜像保存下来
- ADD <src> <des> 拷贝主机的文件或者目录到镜像中。此命令会自动解压tar文件
- COPY <src> <des> 和ADD命令类似,但此命令不会自动解压tar文件
- ENTRYPOINT <command> 或 ENTRYPOINT ["executable file", "parameter1", ...] 配置容器启动后启动的命令,类似CMD,但此命令不会被启动Docker容器时指定的参数覆盖
- VOLUME ["/data/"] 指定一个可以从主机或者其他容器挂载的挂载点
- USER username 指定后续操作所用的用户名
- WORKDIR <dir path> 为后续操作指定工作目录
- ONBUILD <command> 指定当此镜像作为基础镜像时指定的命令,会在FROM之后执行
8.3 创建镜像
编写完Dockerfile之后,可以通过docker build 命令来创建镜像。
-f:指定Dockerfile的路径
-t:指定生成镜像的标签信息
8.4 实战-Dockerfile之apache
[[email protected] ~]# mkdir apache
[[email protected] ~]# cd apache/
[[email protected] apache]# vi Dockerfile
FROM httpd:2.4
COPY ./public-html /usr/local/apache2/htdocs/
[[email protected] apache]# mkdir public-html
[[email protected] apache]# vi public-html/index.html
<!DOCTYPE html>
<html>
<body>
<p>Hello, Docker!</p>
</body>
</html>
[[email protected] apache]# docker build -t apache2 .
[[email protected] apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache2 latest cc2305fc3d5d 18 seconds ago 178 MB
[[email protected] apache]# docker run -it --rm --name apache-container -P apache2:lates
[[email protected] nginx]# curl http://192.168.161.128:32768
<!DOCTYPE html>
<html>
<body>
<p>Hello, Docker!</p>
</body>
</html>
原文地址:https://www.cnblogs.com/lingxiaolong/p/9212352.html