一、什么是container?
容器是独立运行的一个或一组应用以及它们的运行态环境。可以理解为是镜像的示例(类与对象一对多的关系)。
- 通过 image 创建 (copy得到的)
- 在 image layer (在image 层) 上 增加了一层 container layer (container 层 该层可读可写)
- 类比面对对象: 类(image) 和 实例 (container)
- Image 负责 app 的存储和分发 , Container 负责运行
容器的属性:
二、container命令
2.1、启动容器
容器的启动主要讲如下几种启动方式:
- 新建并启动容器:docker run ubuntu:14.04 /bin/echo 'Hello Docker'
- 守护态运行容器:docker run -itd ubuntu:14.04 /bin/bash
- 启动已终止的容器:docker start bf009d3e8082(容器ID) 启动一个已终止的容器
- 重启容器:docker restart bf009d3e8082 (容器ID)
Docker使用run命令启动一个容器时执行了一系列的标准操作:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
补充:显示容器的详细信息:docker inspect [container_id or container_name]
2.2、终止容器
终止一个运行中的容器有两种方式:
- 在容器里面使用exit或Ctrl+d就能终止并退出一个该容器;
- 在容器外部可以使用docker stop命令来终止一个运行中的容器:docker stop bf009d3e8082 (容器ID)
2.3、进入容器
进入Docker容器比较常见的几种做法如下:
- 使用docker attach
- 使用SSH
- 使用nsenter
- 使用exec
使用docker exec进入Docker容器
- docker exec -it [container_id] /bin/bash #通过编写 shell 脚本进入容器
- docker exec -it [container_id] python # 通过编写 python 进入容器
- docker exec -it [container_id] ip a # 打印出运行容器的ip地址
请参考《如何进入Docker容器》
2.4、导出和导入容器
当使用docker export把一个容器导出到本地文件之后还可以使用docker import命令把该文本导入到本地镜像。
# 举例
cat ubuntu.tar | sudo docker import - my_ubuntu_test
在前一篇关于镜像的文章中讲到过使用docker load命令导入一个镜像快照到本地镜像,此处又使用了docker import命令导入一个容器的快照到本地镜像,那这两种方式都有什么本质性的区别呢?在《Docker从入门到实践》中有非常不错的说明,具体内容如下:
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
2.5、删除容器
删除容器使用docker rm命令与前面的删除镜像(docker rmi)命令非常相似,注意区分(rmi remove image)。
在命令中有一个-f参数,用于强制删除一个正在运行的容器:
docker rm a10910619d78 1883c0b2bd57 0f1bd9eaefff
- 删除所有已停止的容器:
docker rm `docker ps -a -q`
三、补充命令:docker commit
基于某个 image 创建了一个container 后面安装了一些软件 然后将这个container 重新发布为新的 image (不推荐)
docker container commit ( 简写成 docker commit )
- 1. docker run -it centos ( 运行centos )
- 2. yum install -y vim ( 安装vim )
- 3. exit (退出运行的容器)
- 4. docker container ls -a (查看所有的容器)
- 5. docker commit [container的name] [新image的名字] (根据容器 创建一个新的 image)
- 6. docker commit centos zonehoo/centos-with-vim