容器是镜像的一个运行实例,所不同的是,它有额外的可写文件层
上一篇文章Docker学习(三)——镜像介绍了Docker的镜像,
包括 获取镜像,查看镜像信息,搜寻镜像,删除镜像,创建镜像,存储和载入镜像,上传镜像,接下来逐步拆分讲解Docker的核心内容之一——容器.
Docker的容器十分轻量级,用户可以随时创建或删除容器
创建容器
单纯创建容器
语法: docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
为本地Ubuntu镜像创建容器
1
$ docker create -it ubuntu:latest
查看本地启动的容器(注意观察容器的状态是Created,换句话说这个容器是终止状态,没有运行)
1
$ docker ps -a
容器信息解释
- CONTAINER ID: 容器ID
- IMAGE: 容器所运行镜像的名称
- COMMAND: 运行容器时的命令
- CREATED: 容器的创建时间
- STATUS: 容器当前状态
详细信息请使用下面命令自行了解
1
$ docker create --help
启动容器方法一
语法: docker start [OPTIONS] CONTAINER [CONTAINER…]
查看刚刚创建的容器ID,通过start命令来启动
1
$ docker start 93f
重新查看容器信息(注意当前容器状态是Exited,即容器运行终止)
1
$ docker ps -a
详细信息请使用下面命令自行了解
1
$ docker start --help
启动容器方法二
创建容器和启动容器有一种更方便的命令来完成上面create 和 start 的操作.
语法: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
- 为本地Ubuntu镜像在此创建容器并启动
1
$ docker run -it ubuntu:latest
- 详细信息请使用下面命令自行了解(和create是一样的)
1
$ docker run --help
退出容器
输入exit或者Ctrl+D来退出容器,对于所创建的bash容器,当使用exit命令退出之后,该容器就出于终止状态了,这是因为对于Docker容器来说,当运行的应用(此处以bash为例)退出后,容器也就没有继续运行的必要了.
守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行,用户可以通过添加**-d** option来实现.
- 运行容器,每隔一秒打印出hello world
1
$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
- 获取容器的输出信息
1
$ docker logs ce90
- 详细信息请使用下面命令自行了解
1
$ docker logs --help
终止容器
语法: docker stop [OPTIONS] CONTAINER [CONTAINER…]
执行上述命令后,终止容器分为两个步骤,先向容器发送一个SIGTERM信号,10秒钟后会再次发送一个SIGKILL信号终止容器
- 终止上文中启动的容器
1
$ docker stop ce90
- 查看终止的容器
1
$ docker ps -a -q
- 启动容器
1
$ docker start ce90
- 重启容器(将运行中的容器终止,并重新启动)
1
$ docker restart ce90
- 详细信息请使用下面命令自行了解
1
$ docker stop --help
进入容器
上文中提到使用**-d**参数可以使Docker成守护态运行,但是用户无法看到容器的内部信息,而很多时候我们需要进入到容器内进行操作,Docker也提供了集中方法来实现这个功能
docker attach
语法: docker attach [OPTIONS] CONTAINER, 运行该命令时,该容器必须是运行状态(UP),如果没有运行,使用start命令,attach命令可以不用指定命令参数,默认执行上次run的命令参数**/bin/bash**, 但是当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示,当某个窗口因为某一个命令阻塞时,其他窗口就无法执行其他操作了,所以不建议使用.
- 进入刚刚以守护态启动的容器
1
$ docker attach 9d89
- 详细信息请使用下面命令自行了解
1
$ docker attach --help
docker exec
语法: docker exec [OPTIONS] CONTAINER COMMAND [ARG…], 该命令至少需要一个命令参数
- 进入刚刚一守护态启动的容器
1
$ docker exec -it 9d89 /bin/bash
- 详细信息请使用下面命令自行了解
1
$ docker exec --help
删除容器
语法: docker rm [OPTIONS] CONTAINER [CONTAINER…] 删除处于 终止状态 的容器,同时可以输入多个容器ID批量删除容器
- 删除处于终止状态的容器
1
$ docker rm 9d89
- 详细信息请使用下面命令自行了解
1
$ docker rm --help
导入和导出容器
导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管该容器是否是处于运行状态
语法: docker export [OPTIONS] CONTAINER
- 导出9d89容器到ubuntu_export.tar文件
1
$ docker export 9d89 > ubuntu_export.tar
- 详细信息请使用下面命令自行了解
1
$ docker export --help
导入容器
导出的文件又可以使用docker import 命令导入,成为镜像
- 导入上文中的ubuntu_export.tar文件成为镜像
1
$ cat ubuntu_export.tar | docker import - test/ubuntu:v1.0
- 详细信息请使用下面命令自行了解
1
$ docker import --help
我们在上一节中讲过载入镜像 docker load 命令导入镜像文件到本地镜像库,这节通过 docker import 命令来导入一个容器快照到本地镜像库,但是容器快照文件将丢弃所有历史数据和元数据(仅仅保存容器当前的快照状态), 而镜像文件形式保存完整记录,体积要大,此外,容器快照导入标签可以重新指定标签元数据等,向上文中的test/ubuntu:v1.0