Docker(二):Dockerfile介绍
Dockerfile 概念
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦。
Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。一开始必须要指明所基于的镜像名称,接下来一般会说明维护者信息;后面则是镜像操作指令,例如 RUN 指令。每执行一条RUN 指令,镜像添加新的一层,并提交;最后是 CMD 指令,来指明运行容器时的操作命令。
# 1、第一行必须指定 基础镜像信息 FROM ubuntu # 2、维护者信息 MAINTAINER docker_user docker_user@email.com # 3、镜像操作指令 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 # 4、容器启动执行指令 CMD /usr/sbin/nginx
构建镜像
将当前目录做为构建上下文时,可以像下面这样使用docker build命令构建镜像:
docker build .
在构建上下文中使用的 Dockerfile 文件,是一个构建指令文件。为了提高构建性能,可以通过.dockerignore
文件排除上下文目录下不需要的文件和目录。
Dockerfile 一般位于构建上下文的根目录下,也可以通过-f
指定该文件的位置:
docker build -f /path/to/a/Dockerfile .
构建时,还可以通过-t
参数指定构建成镜像的仓库、标签。
docker build -t nginx/v3 .
如果存在多个仓库下,或使用多个镜像标签,就可以使用多个-t
参数:
docker build -t nginx/v3:1.0.2 -t nginx/v3:latest .
示例
mkdir mynginx
cd mynginx
vi Dockerfile
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
#构建
docker build -t nginx:v1 .
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 8c92471de2cc 6 minutes ago 108.6 MB
#运行容器
docker run --name docker_nginx_v1 -d -p 10088:80 nginx:v1
#修改容器内容
docker exec -it docker_nginx_v1 bash
root@3729b97e8226:/# echo '<h1>Hello, Docker neo!</h1>' > /usr/share/nginx/html/index.html
root@3729b97e8226:/# exit