2015-02-04

运行使用Docker

  • 容器是镜像的一个实例,其拥有额外的可写文件层。
  • 通过命令参数-d,使容器以守护态(Daemonized)运行,只和docker run 使用

创建容器

$docker create -it NAME[:TAG]
$docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
82c5aad05d1e        test:2              "/bin/bash"         6 seconds ago       Created                                 goofy_bell
64068b0b1e31        test:2              "/bin/bash"         17 seconds ago      Created                                 peaceful_goodall
cfd4b89c9d73        test:2              "/bin/bash"         26 seconds ago      Created                                 modest_goldberg
#容器创建后状态为Created,可以用start启动,状态切换为Up
$docker start 82c5aad05d1e
[root@king ~]# docker ps -a             
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
82c5aad05d1e        test:2              "/bin/bash"         About a minute ago   Up 3 seconds                            goofy_bell
64068b0b1e31        test:2              "/bin/bash"         About a minute ago   Created                                 peaceful_goodall
cfd4b89c9d73        test:2              "/bin/bash"         2 minutes ago        Created                                 modest_goldberg

#新建并启动容器,等价于先执行docker create 再执行docker start
$docker run test:2 /bin/echo 'Hello world'
Hello world

docker run流程

  • 检测本地镜像是否存在,不存在从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,在只读镜像层外挂载一层可读写层
  • 从宿主机网卡桥接一个虚拟接口到容器中【通过网桥实现】
  • 从地址池分配IP给容器
  • 执行用户指定应用程序
  • 执行完毕后容器终止

终止容器

docker stop [-t|–time[=10]] CONTAINER_ID 先发送SIGTERM信号,等待(默认10s)发送SIGKILL信号终止容器

#查看终止状态的容器ID信息
$docker ps -a -q

#终止容器后再启动,stop start依次执行
$docker restart test:2

进入容器

容器以守护态运行后,用户可以通过命令介入容器

#启动容器
$[root@king ~]# docker run -idt test:2
8d372300f7fe4a74568e18c96417e34b8f50e79cac354b781ab78181d59fab66

#查看容器ID
[root@king ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8d372300f7fe        test:2              "/bin/bash"         5 seconds ago       Up 4 seconds                            cocky_bohr

#介入容器
[root@king ~]# docker attach 8d372300f7fe
root@8d372300f7fe:/# 

ONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b016ba8e759d        test:2              "/bin/bash"         4 seconds ago       Up 3 seconds                            hopeful_goldwasser
#Docker 1.3+ 通过exec在容器内运行命令
[root@king ~]# docker exec -ti b016ba8e759d /bin/bash
root@b016ba8e759d:/# 

删除容器

  • 命令格式 docker rm [OPTIONS] CONTAINER [CONTAINER…]
  • -f, –force=false 强制终止并删除
  • -l, –link=false 删除容器连接但保留容器
  • -v, –volumes=false 删除容器挂载的数据卷
#删除
$docker rm b016ba8e759d

#强制删除运行的容器
$docker rm -f b016ba8e759d

导入和导出容器

  • 导出命令格式 docker export CONTAINER > OUTPUT_FILE_NAME
  • 导入命令格式 cat INPUT_FILE_NAME | docker import - IMAGE_NAME[:TAG]
cfd4b89c9d73        test:2              "/bin/bash"              34 minutes ago       Created                                             modest_goldberg
[root@king ~]# docker export cfd>output.tar
[root@king ~]# du -sh output.tar 
111M    output.tar

#将容器文件导入作为镜像
[root@king ~]# cat output.tar | docker import - local/image:tag
sha256:006a0ba18e1daff51de347fcc2f64b9f04e56ca2a72f13a1d99657f34f3f4977
[root@king ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
local/image         tag                 006a0ba18e1d        4 seconds ago       110.3 MB
test                2                   d13991969eee        About an hour ago   126.6 MB
registry/test       2.0                 d13991969eee        About an hour ago   126.6 MB
ubuntu              latest              bd3d4369aebc        2 weeks ago         126.6 MB

小结

  • 创建容器 docker create NAME[:TAG]
  • 启动容器 docker start CONTAINER_ID
  • 创建并启动 docker run NAME[:TAG]
  • 终止容器 docker stop CONTAINER_ID
  • 进入容器 docker attach CONTAINER_ID
  • 运行命令 docker exec -ti COMMAND
  • 删除容器 docker rm CONTAINER_ID
  • 导出容器 docker export CONTAINER_ID>OUTPUT_FILE_NAME
  • 导入容器为镜像 cat INPUT_FILE_NAME | docker import - [REPOSITORY[:TAG]]
  • 守护态参数 -d 和命令docker run 使用非docker create
  • docker rm xxx 可以使用容器ID的前三个字母来作为参数操作容器,会自动索引