容器技术

什么是容器

容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。Container=集装箱,翻译成容器。

容器和虚拟机的区别:

  1. 容器:1.应用程序本身 2.依赖:比如应用程序需要的库或其他软件
  2. 虚拟机:为了运行应用,除了部署应用本身及其依赖,还得安装整个操作系统
  3. 另外,启动容器不需要启动整个操作系统,所以容器部署和启动速度更快,开销更小,也更容易迁移。

为什么需要容器

  1. 容器使软件具备了超强的可移植能力。
  2. 以前几乎所有的应用都采用三层架构(Presentation/Application/Data),系统部署到有限的几台物理服务器上(Web Server/Application Server/Database Server)。而今天,开发人员通常使用多种服务(比如 MQ,Cache,DB)构建和组装应用,而且应用很可能会部署到不同的环境,比如虚拟服务器,私有云和公有云。
  3. docker类似于集装箱,不管是香蕉还是榴莲,都放进集装箱里,不会相互影响。Container=集装箱,翻译成容器

容器优势:

  1. 对于开发人员 - Build Once, Run Anywhere 。容器环境与所在的 Host 环境是隔离的
  2. 对于运维人员 - Configure Once, Run Anything

容器是如何工作的

docker架构
  1. Docker客户端:Client
  2. Docker服务器:Docker daemon
  3. Docker镜像:Image
  4. Registry
  5. Docker容器:Container

Docker 采用的是 Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信

Docker客户端

最常用的 Docker 客户端是 docker 命令行工具。通过 docker 我们可以方便地在 Host 上构建和运行容器。

Docker 服务器

Docker daemon 是服务器组件,以 Linux 后台服务的方式运行。

默认配置下,Docker daemon 只能响应来自本地 Host 的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开 TCP 监听,步骤如下:
1、编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service ,在环境变量 ExecStart 后面添加 -H tcp://0.0.0.0 ,允许来自任意 IP 的客户端连接。

2、重启Docker daemon

systemctl daemon-reload
systemctl restart docker.service

假如服务器ip为192.168.56.102,客户端在命令行里加 -H参数,即可与远程服务器通信

docker -H 192.168.56.102 info
docker -H 192.168.56.102 info
Docker镜像

可将 Docker 镜像看着只读模板,通过它可以创建 Docker 容器。

镜像有多种生成方法:

1.可以从无到有开始创建镜像

2. 也可以下载并使用别人创建好的现成的镜像
3. 还可以在现有镜像上创建新的镜像
    4.我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile,通过执行 docker build 命令可以构建出 Docker 镜像

Docker容器

Docker 容器就是 Docker 镜像的运行实例。

用户可以通过 CLI(docker)或是 API 启动、停止、移动或删除容器。

可以这么认为,对于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。

Registry

分为公有和私有仓库。公有仓库https://hub.docker.com

docker pull 命令可以从 Registry 下载镜像。
  docker run 命令则是先下载镜像(如果本地没有),然后再启动容器。

查看仓库内的镜像

curl http://your-server-ip:5000/v2/_catalog