docker commit -m 'install nginx' -a 'dailybird' abcd1234 dailybird/nginx:test
之后便可以通过 docker images 查看已经创建的镜像了。
提交镜像
我们可以将镜像提交到官方仓库中,这样就可以像最初获取镜像的方式一样获得自己制作的镜像了。
首先,我们需要在 Docker Hub 上注册账户:https://hub.docker.com/
然后使用以下命令登录:
docker login之后会提示输入用户名和密码,显示登录成功后,用以下方式推送:
docker push $namespace/$mirror-name:$tag由于国内访问 Docker Hub 的速度较慢,我们也可以使用 DaoCloud 或阿里云的 Docker 服务,具体的推送方法可以访问之前给出的网址,参照其中的方法即可。
Dockerfile
使用已有容器创建镜像的方式固然可行,可当我们需要再次对镜像修改时,就需要再次生成容器、进行配置修改或软件安装、提交镜像。此外,不断在原有提交镜像的基础上修改提交会存在两个问题:
累积的修改条目不够直观,可能之后自己也不知道对原有镜像做了什么修改;
不断修改的过程在 Docker 看来是增量更新的过程。这一次的修改相当于在上一次的基础上增加了一个只读层用于记录本次的修改情况。而只读层的数量是有限的,也就意味着这种修改和提交的方式的操作次数是受限的。
那么,有没有一种更好的方式可以实现镜像的生成呢?类比
docker-compose.yml,我们可以使用另一种类似配置文件的方式来指导镜像的生成,这就是
Dockerfile。Dockerfile 可以指定新镜像的原镜像来源、对原镜像的操作、环境变量,以及以此创建容器时执行的指令等。
样例
# 新镜像基于的原镜像
FROM centos:centos6.8# 指明维护者
MAINTAINER dailybird <dailybird@mail.com>
# 设置一些环境变量,使用 表示连接多个设置
ENV NGINX_VERSION 1.11.11
TEST_ENV hello
# 指定暴露的端口号,
EXPOSE 80 443
# 在原镜像基础上进行的修改
RUN yum install -y wget iputils
&& wget http://nginx.org/download/nginx-1.11.11.tar.gz
# 以此镜像创建并启动时,容器执行的指令,通常用于启动服务
CMD ["echo", "hello world"]
比如使用以下配置可以在 centos 中安装 nginx:
FROM centos:centos6.8MAINTAINER dailybird <dailybird@mail.com>
EXPOSE 80 443
RUN cd /
&& mkdir data
&& cd data










