Docker是什么
从发布到现在 docker一直很受关注,在一定程度是改变了软件行业
如果你还不知道 docker 是什么是不是有点out了,接下来我们来介绍docker是什么,解决了什么问题,好处在哪里。
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
docker的优点
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
- 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
- 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
- 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
* 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
docker 的安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
你可以在 https://docs.docker.com/desktop/ 参考官方文档来安装 ce版本
安装完成之后 我们可以使用 docker 命令来 管理docker
HelloWorld
接下来我们使用docker run 命令来在容器内输出hello world
docker run ubuntu:15.10 /bin/echo "Hello world"
各个参数解析:
-
docker: Docker 的二进制执行文件。
-
run: 与前面的 docker 组合来运行一个容器。
-
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
容器是如何工作的
Docker架构的核心组件包括:
- Docker客户端:Client
- Docker服务器:Docker daemon
- Docker镜像:Image
- Registry
- Docker容器:Container
Docker采用的是Client/Server架构。客户端向服务器发送请求,服务器负责构建、运行和
分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或RES
API与远程的服务器通信。
Docker客户端
最常用的Docker客户端是docker命令。通过docker我们可以方便地在Host上构建和
运行容器。
docker支持很多操作(子命令)除了docker命令行工具,用户也可以通过RESTAPI与服务器通信。
Docker服务器
Docker daemon是服务器组件,以Linux后台服务的方式运行
Docker daemon运行在Dockerhost上,负责创建、运行、监控容器,构建、存储镜像
默认配置下,Docker daemon只能响应来自本地Host的客户端请求。如果要允许远程客户
端请求,需要在配置文件中打开TCP监听,步骤如下:
-
编辑配置文件/etc/systemd/system/multi-user.target.wants/docker.service,在环境变量
ExecStart后面添加-Htcp://0.0.0.0,允许来自任意IP的客户端连接,[Service]
Type-not y
ExecStart=/usr/bin/dockerd-H fd://-H tcp://0.0.0.0.0
ExecReload=/bin/kill-s HUP SMAINPID
如果使用的是其他操作系统,配置文件的位置可能会不一样。
- 重启Dockerdaemon
rooteubuntu:~# systemctl daemon-reload
rooteubuntu:~# systemctl restart docker.service
- 服务器IP为192.168.56.102,客户端在命令行里加上-H参数,即可与远程服务器
info子命令用于查看Docker服务器的信息。
Docker镜像
可将Docker镜像看成只读模板,通过它可以创建Docker容器。
例如某个镜像可能包含一个Ubuntu操作系统、一个ApacheHTTPServer以及用户开发的Web应用。
镜像有多种生成方法:
- 从无到有开始创建镜像;
- 下载并使用别人创建好的现成的镜像;
- 在现有镜像上创建新的镜像。
可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执
行 docker build
Docker容器
Docker容器就是Docker镜像的运行实例。
用户可以通过CLI(Docker)或是API启动、停止、移动或删除容器。可以这么认为,对
于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。
Registry
Registry是存放Docker镜像的仓库,Registry分私有和公有两种。
Docker Hub(https://hub.docker.com/)是默认的Registry,由Docker公司维护,上面有数
以万计的镜像,用户可以自由下载和使用。
出于对速度或安全的考虑,用户也可以创建自己的私有Registry。后面我们会学习如何搭
建私有Registry。
docker pull 命令可以从 Registry下载镜像。
dockerrun命令则是先下载镜像(如果本地没有),然后再启动容器。