查看启动的容器

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

查看所有的容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
db70bb3f6068        centos              "/bin/bash"         4 weeks ago         Exited (137) 3 weeks ago                       serene_wright

查看本地的镜像列表

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos-6-x86        latest              8fca9486a39b        7 days ago          341.3 MB
centos_with_net     latest              3e8ea8607f08        4 weeks ago         294.9 MB
centos              latest              9baab0af79c4        5 weeks ago         196.7 MB

新建容器

[root@localhost ~]# docker create -it centos
5ae70c73655fc8ec1aae20d01995d422025fd93216436214c8008a4656b4717e
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
5ae70c73655f        centos              "/bin/bash"         7 seconds ago                                                      tender_galileo
db70bb3f6068        centos              "/bin/bash"         4 weeks ago         Exited (137) 3 weeks ago                       serene_wright

使用docker create命令新建的容器处于停止状态(stopped),可以使用docker start命令启动。docker start命令语法格式:docker start container_id

新建并启动容器

[root@localhost ~]# docker run -it centos-6-x86 /bin/bash
[root@d1dec1f9d91e /]# ls
bin  boot  dev  etc  fastboot  home  lib  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var

docker run命令等价于先执行docker create命令,再执行docker start命令。
这个命令把两个单独的步骤融合到一起了:
第一步是使用底层的镜像创建容器,这一步可以单独执行docker create命令完成;
第二步是启动容器,这一步可以单独执行docker start命令完成。

  • -t标志的作用:让Docker分配一个伪TTY
  • -i标志的作用:告诉Docker,这是个交互会话,让标准输入(STDIN)保持打开状态
    查看内核
[root@d1dec1f9d91e /]# cat /etc/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
[root@d1dec1f9d91e /]# uname -a
Linux d1dec1f9d91e 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@d1dec1f9d91e /]# exit
exit
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

在容器里查看内核,实际就是宿主机的内核。(所有容器共用同一个内核)

守护态(Daemonized)运行

添加-d参数实现

[root@localhost ~]# docker run -itd centos-6-x86 /bin/bash
359fda80c4ef5c214ffd67bd3c5abdeadfb832ac16849ae0b970d4c81e63e33f
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
359fda80c4ef        centos-6-x86        "/bin/bash"         33 seconds ago      Up 32 seconds                           sleepy_mestorf

docker run -d 可以让容器在后台运行,容器启动后返回一个唯一的ID。

进入容器

exec命令
Docker自1.3版本起,提供了exec工具,可直接在容器内运行命令。

[root@localhost ~]# docker exec -it 359 /bin/bash
[root@359fda80c4ef /]#

其中,359是容器ID(CONTAINER ID),可简写为前几个字符。
exec工具语法:docker exec -i -t container_id bash
可以临时打开一个虚拟终端并且exit后容器依然运行着

[root@359fda80c4ef /]# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
359fda80c4ef        centos-6-x86        "/bin/bash"         5 minutes ago       Up 5 minutes                            sleepy_mestorf

attach命令

[root@localhost ~]# docker attach 359
[root@359fda80c4ef /]# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

docker attach命令是Docker自带的命令,其语法为:docker attach container_id。但使用attach命令有时候并不方便。从上面的操作可以看到,exit退出当前终端时,容器就终止了(stopped)。

获取容器的输出信息

docker logs命令语法:docker logs CONTAINER_ID
获取容器的运行历史信息

停止容器

使用docker stop来终止一个运行中的容器,命令语法:docker stop container_id
它会首先向容器发送SIGTERM信号,等待一段时间后(默认为10秒),再发送SIGKILL信号终止容器。
当Docker容器中指定的应用终结时,容器也自动终止。对于只启动了一个终端的容器,用户通过exit命令或Ctrl+d来退出终端时,所建立的容器立刻终止。

清除容器

如果进程出现异常,通常会想立即退出容器。docker kill命令就是为这种需求准备的。用法与docker stop命令类似。

docker kill container_id

docker kill命令会直接发送SIGKILL信号来强行终止容器。

删除容器

docker rm命令删除处于终止状态(stopped)的容器,docker rmi删除镜像。
命令格式:docker rm [OPTIONS] container_id
OPTIONS说明:

  • -f:强行终止并删除一个运行中的容器

导出容器

导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,都可使用docker export命令。
命令格式:docker export container_id > file.tar

[root@localhost ~]# docker export db70 > genesis_centos.tar
[root@localhost ~]# du -sh genesis_centos.tar
273M    genesis_centos.tar

可将这些文件传输到其他机器上,在其他机器上通过导入命令实现容器的迁移。

导入容器

先删除container_id为db70的容器

[root@localhost ~]# docker rm db70
db70
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
359fda80c4ef        centos-6-x86        "/bin/bash"         4 hours ago         Exited (130) 4 hours ago                       sleepy_mestorf
d1dec1f9d91e        centos-6-x86        "/bin/bash"         4 hours ago         Exited (0) 4 hours ago                         stoic_curie
5ae70c73655f        centos              "/bin/bash"         4 hours ago                                                        tender_galileo

导出的文件可以使用docker import命令导入,成为镜像,再用镜像创建容器。
生成file_test的镜像:cat file.tar |docker import – file_test

[root@localhost ~]# cat genesis_centos.tar | docker import - genesis_centos
85bc3a58f1349c173ee4832cbf138720064c99472fa9f2b49531ccef76f97987
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
genesis_centos      latest              85bc3a58f134        3 minutes ago       277.6 MB
centos-6-x86        latest              8fca9486a39b        8 days ago          341.3 MB
centos_with_net     latest              3e8ea8607f08        4 weeks ago         294.9 MB
centos              latest              9baab0af79c4        5 weeks ago         196.7 MB