Dockerfile 概念
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦。
Dockerfile 文件格式
# This dockerfile uses the ubuntu image
# VERSION - EDITION
# Author: docker_user
# Command format: Instruction [arguments / command] .. # 、第一行必须指定 基础镜像信息
FROM ubuntu # 、维护者信息
MAINTAINER docker_user docker_user@email.com # 、镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf # 、容器启动执行指令
CMD /usr/sbin/nginx
Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。一开始必须要指明所基于的镜像名称,接下来一般会说明维护者信息;后面则是镜像操作指令,例如 RUN 指令。每执行一条RUN 指令,镜像添加新的一层,并提交;最后是 CMD 指令,来指明运行容器时的操作命令。
构建镜像
docker build 命令会根据 Dockerfile 文件及上下文构建新 Docker 镜像。构建上下文是指 Dockerfile 所在的本地路径或一个URL(Git仓库地址)。构建上下文环境会被递归处理,所以构建所指定的路径还包括了子目录,而URL还包括了其中指定的子模块。
将当前目录做为构建上下文时,可以像下面这样使用docker build命令构建镜像:
docker build .
可以通过-f
指定Dockerfile文件的位置:
docker build -f /path/Dockerfile .
可以通过-t
参数指定构建成镜像的仓库、标签。
docker build -t nginx/v3 .
docker build -t nginx/v3:1.0.2 -t nginx/v3:latest .
简单示例
新建文件Dockerfile,复制以下内容
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
在 Dockerfile 文件所在目录执行:
docker build -t nginx:v1 .
接下来使用 docker run 命令来启动容器
docker run --name docker_nginx_v1 -d -p : nginx:v1
用浏览器去访问这个 nginx 服务器:http://localhost/
修改容器内容
docker exec -it docker_nginx_v1 bash
root@3729b97e8226:/# echo '<h1>Hello 2</h1>' > /usr/share/nginx/html/index.html
root@3729b97e8226:/# exit
exit