olti 发表于 2015-10-13 09:40:23

Docker镜像和容器操作(二)

利用 Dockerfile 来创建镜像
  使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。
  新建一个目录和一个 Dockerfile

$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile

  Dockerfile 中每一条指令都创建镜像的一层,例如:

# This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra

  Dockerfile 基本的语法是


[*]使用#来注释
[*]FROM 指令告诉 Docker 使用哪个镜像作为基础
[*]接着是维护者的信息
[*]RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件
  编写完成 Dockerfile 后可以使用 docker build 来生成镜像

$ sudo docker build -t=&quot;ouruser/sinatra:v2&quot; .
其中 -t 标记来添加
tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

*注意一个镜像不能超过
127 层


  还可以利用 ADD 命令复制本地文件到镜像;用 EXPOSE 命令来向外部开放端口;用 CMD 命令来描述容器启动后运行的程序等。例如

# put my local web site in myApp folder to /var/www
ADD myApp /var/www
# expose httpd port
EXPOSE 80
# the command to run
CMD [&quot;/usr/sbin/apachectl&quot;, &quot;-D&quot;, &quot;FOREGROUND&quot;]

  现在可以利用新创建的镜像来启动一个容器。

$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash
root@8196968dac35:/#

  还可以用 docker tag 命令来修改镜像的标签。

$ sudo docker tag 5db5f8471261 ouruser/sinatra:devel
从本地文件系统导入
  要从本地文件系统导入一个镜像,可以使用 openvz(容器虚拟化的先锋技术)的模板来创建: openvz 的模板下载地址为 templates 。
  比如,先下载了一个 ubuntu-14.04 的镜像,之后使用以下命令导入:

sudo cat ubuntu-14.04-x86_64-minimal.tar.gz|docker import - ubuntu:14.04

  然后查看新导入的镜像。

docker images
REPOSITORY          TAG               IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu            14.04               05ac7c0b9383      17 seconds ago      215.5 MB
上传镜像
  用户可以通过 docker push 命令,把自己创建的镜像上传到仓库中来共享。例如,用户在 Docker Hub 上完成注册后,可以推送自己的镜像到仓库中。

$ sudo docker push ouruser/sinatra


存出镜像
  如果要导出镜像到本地文件,可以使用 docker save 命令。

$ sudo docker images
REPOSITORY          TAG               IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu            14.04               c4ff7513909d      5 weeks ago         225.4 MB
...
$sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

载入镜像
  可以使用 docker load 从导出的本地文件中再导入到本地镜像库,例如

$ sudo docker load --input ubuntu_14.04.tar

  或

$ sudo docker load < ubuntu_14.04.tar

  这将导入镜像以及其相关的元数据信息(包括标签等)。



  

移除本地镜像
  
  如果要移除本地的镜像,可以使用 docker rmi 命令。注意 docker rm 命令是移除容器。

$ sudo docker rmi training/sinatra
Untagged: training/sinatra:latest
Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d
Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f
Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0

  *注意:在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

$ sudo docker rmi training/sinatra



版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: Docker镜像和容器操作(二)