Dockerfile 简介
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dcokerfile是一个文本文件,由一系列指令和参数构建的脚本,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻烦。
Dockerfile 文件格式
Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动执行指令。
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# 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
RUN 指令:每执行一条RUN 指令,镜像添加新的一层,并提交
CMD 指令:来指明运行容器时的操作命令
可以使用一个 RUN 指令,并使用 && 将各个所需命令串联起来。Dockerfile 支持 Shell 类的行尾添加 \ 的命令换行方式,以及行首 # 进行注释的格式。
构建镜像
以nginx 镜像为例。在一个空白目录中,建立一个文本文件,并命名为 Dockerfile
$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile
Dockerfile 文件内容为:
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
在 Dockerfile 文件所在目录执行:(注意命令最后有一个 . 表示当前目录)
docker build -t nginx:v1 .
构建完成之后,使用 docker images 命令查看所有镜像
[root@localhost mynginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 2b06b1493d7c 24 seconds ago 109 MB
docker.io/nginx latest ae513a47849c 2 weeks ago 109 MB
docker.io/ubuntu latest 452a96d81c30 3 weeks ago 79.6 MB
docker.io/hello-world latest e38bc07ac18e 5 weeks ago 1.85 kB
使用 docker run 命令来启动容器
docker run --name nginx_v1 -d -p 81:80 nginx:v1
这条命令表示用 nginx:v1 镜像启动一个容器,命名为nginx_v1,并且映射了 81 端口,这样我们可以用浏览器去访问这个 nginx 服务器
容器启动后,需要对容器内的文件进行进一步的完善,可以使用docker exec -it xx bash命令再次进行修改
[root@localhost mynginx]# docker exec -it nginx_v1 bash
root@4277f160cd56:/# echo '<h1>Hello, admin!</h1>' > /usr/share/nginx/html/index.html
root@4277f160cd56:/# exit
修改了容器的文件,也就是改动了容器的存储层,可以通过 docker diff 命令看到具体的改动
docker diff nginx_v1
其他docker镜像构建用法
docker build 还支持从 URL 构建,比如可以直接从 Git repo 中构建:
docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14
这行命令指定了构建所需的 Git repo,并且指定默认的 master 分支,构建目录为 /8.14/,然后 Docker 就会自己去 git clone 这个项目、切换到指定分支、并进入到指定目录后开始构建。
用给定的 tar 压缩包构建
$ docker build http://server/context.tar.gz
参考
Dockerfile reference
Docker镜像构建文件Dockerfile及相关命令介绍
使用 Dockerfile 定制镜像
深入Dockerfile(一): 语法指南
网友评论