本文介绍简单Docker镜像的构建方式。构建Docker镜像有两种方式,这里介绍的是使用Dockerfile构建镜像。
1.创建Dockerfile文件$ mkdir static_web $ cd static_web/ # 创建一个Dockerfile $ touch Dockerfile2.添加Dockerfile的内容
$ cat Dockerfile # version 0.1 # 基础镜像 FROM ubuntu:14.04 MAINTAINER James Turnbull "james@example.com" # 构造镜像时运行的指令 RUN apt-get update RUN apt-get install -y nginx RUN mkdir -p /var/www/html RUN echo 'Hi, I am Container' >/usr/share/nginx/html/index.html # 映射的端口 EXPOSE 80
-
FROM
这个选项说明镜像基于的基础版本。
-
RUN
该项会通过/bin/sh -c这样的格式来运行shell命令。
-
EXPOSE
指定对外公开的端口,可以有多个。但容器不会主动开放该端口,需要在docker run时指定。
通过以下命令来构建镜像。
$ docker build . -t="hover/static_web"
可以为镜像打上一个标签,默认是latest,我这里打上一个v1的标签:
$ docker build . -t="hover/static_web:v1"
构建完成后,查看是否镜像列表:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hover/static_web latest 1ef13e142a24 About a minute ago 219MB hover/static_web v1 1ef13e142a24 About a minute ago 219MB ubuntu latest 38af2b009885 10 days ago 69.2MB busybox latest 3c277069c6ae 2 weeks ago 1.41MB
注意:若构建过程中失败,则会构建不成功。会打印出详细错误信息。
4.是否要使用Dockerfile来构建缓存在构建镜像时我们发现,第一次构建镜像比较慢,而后续再次构建镜像时会非常快。这是由于Docker在构建镜像时使用了缓存。
若不想使用以前的缓存,可以添加:–no-cache选项
$ docker build --no-cache . -t="hover/static_web:v1"5.查看构建过程
可以通过history命令来查看镜像的构建过程。
$ docker history 1ef13e142a246.启动构建好的容器
通过以上步骤,我们构建成功了一个nginx的镜像,现在我们启动该nginx镜像,并作为web服务器运行。
$ docker run -d -p 80 --name static_web hover/static_web nginx -g "daemon off;" 80d4b6306b270ee5028ee08bb4c08a6ad6a4e877ad0ae00bda067eb5a9257077
查看一个容器的运行信息:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 80d4b6306b27 hover/static_web "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:55168->80/tcp static_web
可见,容器的端口80映射到了宿主主机的55168这个端口上。我们可以访问这个端口验证一下:
$ curl localhost:55168 Hi, I am Container
或则打开一个浏览器,并输入:localhost:55168,可以看到网页上显示出了:Hi, I am Container。
这说明我们的容器已经运行成功了。
7.Dockerfile的指令详细信息可以参考官方的文档:Dockerfile reference。



