容器

隔离出来的虚拟环境

官方解释
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性 ,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

通俗解释
如果需要通俗的描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

容器虚拟化的是操作系统而不是硬件,容器之间是共享同一套操作系统资源的。虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统。因此容器的隔离级别会稍低一些。**

容器(container):镜像运行时的实体

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。前面讲过镜像使用的是分层存储,容器也是如此。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。

命令

  1. 创建容器 docker create —name 容器名 镜像名
  2. 启动容器 docker start 容器名
  3. 启动容器(方式二)docker run —name 容器名 -d 镜像名 # -d 后台运行
  4. 查看所有运行中的容器 docker ps # -a 显示所有状态的容器
  5. 停止容器 docker stop 容器名
  6. 删除容器 docker rm 容器名
  7. 运行容器里的命令 docker exec 镜像名 命令 # -it 进入容器终端

容器互联

要让一个容器连接到另外一个容器,我们可以在容器通过 docker create 或 docker run 创建时通过 —link 选项进行配置

  1. sudo docker run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysql
  2. sudo docker run -d --name webapp --link mysql webapp:latest

docker run 参数

  • -d 后台运行
  • —name 命名新的
  • —link
  • —expose 暴露的端口
  • -p 3306:3306 端口映射

attach 和 exec的区别

image.png
image.png

对容器进行配置

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