构建Docker镜像
构建Docker镜像有以下两种方法:
- 使用docker commit命令。docker commit 构建镜像可以想象为是在往版本控制系统里提交变更。
- 使用docker build命令和 Dockerfile 文件。
这里并不推荐使用docker commit来构建镜像,而应该使用更灵活、更强大的Dockerfile来构建Docker镜像。
创建DockerFile
Dockerfile由一系列指令和参数组成,基于DSL语法。每条指令都必须为大写字母,切后面要跟随一个参数。Dockerfile中的指令会按照顺序从上到下执行,每条指令都会创建一个新的镜像层并对镜像进行提交。Docker大体上按照如下流程执行Dockerfile中的指令:
- Docker从基础镜像运行一个容器。
- 执行第一条指令,对容器进行修改。
- 执行类似docker commit的操作,提交一个新的镜像层。
- Docker再基于刚提交的镜像运行一个新的容器。
- 执行Dockerfile中的下一条命令,直到所有指令都执行完毕。
FROM:
每个Dockerfile的第一条指令都应该是FROM。FROM指令指定一个已经存在的镜像,后续指令都是将基于该镜像进行,这个镜像被称为基础镜像(base iamge)
MAINTAINER:
MAINTAINER指令,这条指令会告诉Docker该镜像的作者是谁,以及作者的邮箱地址。这有助于表示镜像的所有者和联系方式。
RUN:
RUN指令会在当前镜像中运行指定的命令。每条RUN指令都会创建一个新的镜像层,如果该指令执行成功,就会将此镜像层提交,之后继续执行Dockerfile中的下一个指令。
EXPOSE:
EXPOSE指令是告诉Docker该容器内的应用程序将会使用容器的指定端口。出于安全的原因,Docker并不会自动打开该端口,而是需要你在使用docker run运行容器时来指定需要打开哪些端口。
通常一个dockerfile的文件格式如下:
FROM centos:6.7
MAINTAINER Cruise "xxxx@163.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd five3
RUN /bin/echo 'xxxx:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
最后执行docker build -t xxxx/centos:6.7 /path/to/dockerfile
-t :指定要创建的目标镜像名,注意名称只能是小写字母