容器
隔离出来的虚拟环境
官方解释
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
- 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
- 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
- 容器赋予了软件独立性 ,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
通俗解释
如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。
容器虚拟化的是操作系统而不是硬件,容器之间是共享同一套操作系统资源的。虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统。因此容器的隔离级别会稍低一些。**
容器(container):镜像运行时的实体
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。前面讲过镜像使用的是分层存储,容器也是如此。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。
命令
- 创建容器 docker create —name 容器名 镜像名
- 启动容器 docker start 容器名
- 启动容器(方式二)docker run —name 容器名 -d 镜像名 # -d 后台运行
- 查看所有运行中的容器 docker ps # -a 显示所有状态的容器
- 停止容器 docker stop 容器名
- 删除容器 docker rm 容器名
- 运行容器里的命令 docker exec 镜像名 命令 # -it 进入容器终端
容器互联
要让一个容器连接到另外一个容器,我们可以在容器通过 docker create 或 docker run 创建时通过 —link 选项进行配置
sudo docker run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysqlsudo docker run -d --name webapp --link mysql webapp:latest
docker run 参数
- -d 后台运行
- —name 命名新的
- —link
- —expose 暴露的端口
- -p 3306:3306 端口映射
attach 和 exec的区别


对容器进行配置
查看docker hub上对应镜像的详情,用 -e 配置参数
