Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。
获取镜像
使用docker pull命令从仓库获取镜像
$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete
下载镜像时指定仓库注册服务器地址:
$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
列出本地镜像
使用docker images命令
$ docker images
然后会显示本地镜像信息:
image.png image.png
repository: 表明镜像来自哪个仓库
tag: 镜像的标记
image id: 镜像的唯一ID
created: 镜像创建时间
size: 镜像的大小
tag信息用于标记来自同一仓库的不同镜像,例如ubuntu仓库有多个镜像,通过tag信息来区分发行版本,例如10,04、12.04、12.10等。
启动时可以指定使用tag来精确指定镜像,默认使用latest标记
$ sudo docker run -t -i ubuntu:14.04 /bin/bash
创建镜像
(1) 从docker hub获取镜像并更新
(2) 使用Dockerfile创建镜像
(3) 利用本地文件系统创建镜像
修改已有镜像
- 首先使用镜像来启动容器:
$ sudo docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#
0b2616b0e5a8是容器ID
- 在容器中添加应用
root@0b2616b0e5a8:/# gem install json
- 使用docker commit来提交更新后的副本
首先exit退出容器
然后执行docker commit
$ sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
-m: 来指定提交的说明信息
-a: 指定更新的用户信息
0b2616b0e5a8: 是容器的ID
ouruser/sinatra: 是仓库名
v2: 是镜像的tag
查看新创建的镜像:
$ sudo docker imagesd
使用Dockerfile来创建镜像
使用docker build命令。
- 新建一个目录和一个Dockerfile
$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile
- 编写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使用哪个镜像作为基础镜像
. MAINTAINER是维护者信息
. RUN 开头的指令会在创建中运行
- 使用docker build命令来生成镜像
$ sudo docker build -t="ouruser/sinatra:v2" .
Uploading context 2.56 kB
Uploading context
Step 0 : FROM ubuntu:14.04
---> 99ec81b80c55
Step 1 : MAINTAINER Kate Smith <ksmith@example.com>
---> Running in 7c5664a8a0c1
---> 2fa8ca4e2a13
Removing intermediate container 7c5664a8a0c1 Step 2 : RUN apt-get -qq update
---> Running in b07cc3fb4256
---> 50d21070ec0c
Removing intermediate container b07cc3fb4256 Step 3 : RUN apt-get -qqy install ruby ruby-dev
---> Running in a5b038dd127e
Selecting previously unselected package libasan0:amd64.
(Reading database ... 11518 files and directories currently installed.) Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ... Setting up ruby (1:1.9.3.4) ...
Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...
Processing triggers for libc-bin (2.19-0ubuntu6) ...
---> 2acb20f17878
Removing intermediate container a5b038dd127e Step 4 : RUN gem install sinatra
---> Running in 5e9d0065c1f7 ...
Successfully installed rack-protection-1.5.3 Successfully installed sinatra-1.4.5
4 gems installed
---> 324104cde6ad
Removing intermediate container 5e9d0065c1f7 Successfully built 324104cde6ad
-t 用于添加tag
“.” 是当前路径,也可以指定为其他路径,是Dockerfile所在的路径
*注意一个镜像不能超过 127 层
从本地文件系统导入
$ sudo cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
上传镜像
使用docker push命令将镜像传到仓库中
$ sudo docker push ouruser/sinatra
The push refers to a repository [ouruser/sinatra] (len: 1)
Sending image list
Pushing repository ouruser/sinatra (3 tags)
网友评论