什么是Docker镜像
Docker镜像是由文件系统叠加而成。
列出镜像
1 | docker images |
拉取镜像
1 | docker pull fedora:20 |
如果本地说主机上还没有ubuntu:lastest镜像,docker run会先拉取镜像
1 | docker run -it --name xx ubuntu /bin/bash |
查找镜像
1 | docker search puppet |
构建镜像
构建Docker镜像有两种方法:
- 使用docker commit命令
- 使用docker build名利给和Dockerfile文件
创建Docker Hub账号
为了共享和发布镜像,可以将镜像推送到Docker Hub或用户自己的私有Registry。为了完成这项工作,需要先在Docker Hub上创建一个账号。
然后可以使用docker login登录到Docker Hub
1 | $ docker login |
可以使用docker logout命令从一个Registry服务器退出。
用Docker的commit命令创建镜像
创建一个容器
1 | docker run -it ubuntu /bin/bash |
安装Apache软件包
1 | apt-get -yqq update |
先用exit命令从容器中退出,再运行docker commit命令
1 | docker commit 4aab3ce3cd76 mofei/apache2 |
查看新创建的镜像
1 | docker images mofei/apache2 |
用Dockerfile构建镜像
Dockerfile使用基本的基于DSL(Domain Specific Language)语法的指令来构建一个Docker镜像,这种方式构建镜像比docker commit方式更具备可重复性,透明性以及幂等性。
创建一个目录并在里面创建初始的Dockerfile
1 | mkdir static_web |
static_web目录是构建环境,Docker称此环境为上下文或者构建上下文。
然后在Dockerfile中写入以下内容:
1 | FROM ubuntu:14.04 |
Dockerfile由一系列指令组成,每条指定会创建一个新的镜像层并对镜像镜像提交。
Docker大体上按照如下流程执行Dockerfile中的指令:
- Docker从基础镜像运行一个容器
- 执行一条指令,对容器做出修改
- 执行类似docker commit的操作,提交一个新的镜像层
- Docker再基于刚提交的镜像运行一个新容器
- 执行Docker中的下一条指令,直到所有指令都执行完毕
从上面可以看出,如果Dockerfile由于某些原因没有正常结束,那么用户将得到一个可以使用的镜像。这对调试非常有帮助。可以基于该镜像运行一个具备交互功能的容器,然后对失败的指令镜像调试。
基于Dockerfile构建新镜像
1 | docker build -t="mofei/static_web" . |
也可以在构建镜像时为镜像指定一个标签(不指定的话,默认为lastest标签)
1 | docker build -t="mofei/static_web:v1" . |
从镜像仓库构建Docker镜像
1 | docker build -t="mofei/static_web:v1" git@github.com:mofei/docker-static_web |