9.2 Docker的镜像和容器

Docker的镜像类似虚拟机的快照,创建Docker镜像有几种方式,多数是在一个现有镜像基础上创建新镜像,也可以从头构建一个镜像。镜像是一个只读模板,用来运行Docker容器。

容器负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。

Docker官方提供了很多镜像,Docker中的pull命令是用来获取镜像的,执行下面的命令,就会从官方仓库里获取Ubuntu 14.04版本的系统:

root@liu-ubuntu:~# docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
28bfaceaff9b: Pull complete 
ac540055f2f8: Pull complete 
2965585ef8b8: Pull complete 
2416bb9f3ad2: Pull complete 
93b55a6a6807: Pull complete 
Digest: sha256:885bb6705b01d99544ddb98cbe4e4555d1efe1d052cef90832e72a0688ac6b37
Status: Downloaded newer image for ubuntu:14.04

images命令用来查看本机Docker中存在哪些镜像,运行 docker images就会看到刚才获取的Ubuntu14.04系统:

root@liu-ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               578c3e61a98c        2 weeks ago         223 MB

现在,把这个镜像运行起来,运行起来的镜像就叫做容器了,容器是可读写的,这样就可以在容器里进行软件配置,部署应用,run 命令就是将镜像运行起来的,运行:

docker run -it ubuntu:14.04

终端交互的用户名变掉了,说明进入到了容器的内部,效果如下:

root@liu-ubuntu:~# docker run -it ubuntu:14.04
root@43981d58800d:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@43981d58800d:/# cat /etc/issue
Ubuntu 14.04.5 LTS \n \l

现在我们所做的任何操作都是针对于目前容器而言的,不会影响到原来的系统。例如,我们在里面安装下nginx服务器,运行如下命令:

apt-get update
apt-get install -y nginx

完成后执行nginx -v就会发现我们已经将nginx安装成功:

root@43981d58800d:/# nginx -v
nginx version: nginx/1.4.6 (Ubuntu)