容器是基于镜像创建的可运行实例,并且单独存在。一个镜像可以创建出多个容器。运行容器化的环境时,实际是在容器内部创建该文件系统的读写副本。这将添加一个容器层,该层允许修改镜像的整个副本。
处于初建状态、运行状态、停止状态、暂停状态的容器都可以直接删除。
docker create命令来创建容器
$ docker create -it --name=busybox busybox容器启动有两种方式:
使用docker start命令基于已经创建好的容器直接启动 。
使用docker run命令直接基于镜像新建一个容器并启动,相当于先执行docker create命令从镜像创建容器,然后再执行docker start命令启动容器。
$ docker run -it --name=busybox busybox当使用docker run创建并启动容器时,Docker 后台执行的流程为:
Docker 会检查本地是否存在 busybox 镜像,如果镜像不存在则从 Docker Hub 拉取 busybox 镜像;
使用 busybox 镜像创建并启动一个容器;
分配文件系统,并且在镜像只读层外创建一个读写层;
从 Docker IP 池中分配一个 IP 给容器;
执行用户的启动命令运行镜像。
上述命令中, -t 参数的作用是分配一个伪终端,-i 参数则可以终端的 STDIN 打开,同时使用 -it 参数可以让我们进入交互模式。 在交互模式下,用户可以通过所创建的终端来输入命令。
对于容器来说,杀死容器中的主进程,则容器也会被杀死。
容器停止用docker stop 命令。格式为: docker stop [-t]|–time[=10]. 该命令首先会向运行中的容器发送SIGTERM信号,如果容器内1号进程能够接受并能处理SIGTERM,则等待1号进程处理完毕后退出,如果等待一段时间后,容器仍然没有退出,则会发送SIGKILL强制终止容器。
$ docker stop busybox如果你想查看停止状态的容器信息,你可以使用 docker ps -a 命令。 处于终止转台的容器也可以通过docker start命令来重新启动。
处于运行状态的容器可以通过docker attach、docker exec、nsenter等多种方式进入容器。
使用docker attach命令进入容器 $ docker attach busybox注意:当我们同时使用docker attach命令同时在多个终端运行时,所有的终端窗口将同步显示相同内容,当某个命令行窗口的命令阻塞时,其他命令行窗口同样也无法操作。 由于docker attach命令不够灵活,因此我们一般不会使用docker attach进入容器。下面我介绍一个更加灵活的进入容器的方式docker exec
使用docker exec 命令进入容器 $ docker exec it busybox sh / # ps aux PID USER TIME COMMAND 1 root 0:00 sh 7 root 0:00 sh 12 root 0:00 ps aux我们进入容器后,可以看到容器内有两个sh进程,这是因为以exec的方式进入容器,会单独启动一个 sh 进程,每个窗口都是独立且互不干扰的,也是使用最多的一种方式。
删除容器命令的使用方式如下:
docker rm [OPTIONS] CONTAINER [CONTAINER…]。 删除一个停止的容器 docker rm命令
docker rm busybox删除正在运行中的容器,必须添加-f(或 --force)参数,Docker会发送SIGKILL信号强制终止正在运行的容器。
docker rm -f busybox我们可以使用docker export CONTAINER命令导出一个容器到文件,不管此时容器是否处于运行中的状态。导出容器前先进入容器,创建一个文件,过程如下:
首先进入容器创建文件
docker exec -it busybox sh cd /tmp && touch test然后执行导出命令
docker export busybox > busybox.tar执行以上命令后会在当前文件夹下生成busybox.tar文件,我们可以将其拷贝到其他机器上,通过导入命令实现容器的迁移。
导入容器通过docker export命令导出的文件,可以使用docker import命令导入,执行完docker import后会变为本地镜像,最后再使用docker run命令启动该镜像,这样我们就实现了容器的迁移。
docker import busybox.tar busybox:test此时,busybox.tar被导入成为新的镜像,镜像名称为busybox:test
使用docker run命令启动并进入容器,查看上一步创建的临时文件。
docker run it busybox:test sh / # ls /tmp/ test可以看到我们之前在 /tmp 目录下创建的 test 文件也被迁移过来了。这样我们就通过docker export和docker import命令配合实现了容器的迁移
镜像包含了容器运行所需要的文件系统结构和内容,是静态的只读文件,而容器则是在镜像的只读层上创建了可写层,并且容器中的进程属于运行状态,容器是真正的应用载体。
容器生命周期 created;初建状态running:运行状态stopped:停止状态paused:暂停状态deleted:删除状态 命令作用命令备注创建容器docker create -it --name=busybox busybox该命令创建的容器处于停止状态启动容器docker start创建并且启动容器docker run先执行docker create从镜像创建容器,再执行docker start启动容器。终止容器docker stop busybox进入容器docker exec -it busybox sh每个窗口都是独立且互不干扰的,使用最多的一种方式。删除容器docker rm busybox删除正在运行中的容器,必须添加 -f导出容器docker export busybox > busybox.tar导入容器docker import busybox.tar busybox:test