为什么需要Docker
官网:https://www.docker.com/
Docker hub: https://hub.docker.com/
官方介绍(中文版):http://www.docker-cn.com/what-docker#/developers
Docker 是世界领先的软件容器平台。
开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。
Docker 理念
1.Docker是基于Go语言实现的云开源项目。
2.Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
3.Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
Docker 能做什么
Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中。
思想:集装箱/标准化/隔离
核心:docker有3大核心:镜像、容器、仓库。
(1) 镜像-复制的程序
定义:
Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
作用:
类似于虚拟机的快照,用来创建新的容器。
特点:
镜像不包含任何动态数据,其内容在构建之后也不会被改变
(2)容器-集装箱
运行程序的地方
镜像是静态的,每一层都只是可读的,而容器是动态的,里面运行着我们指定的应用。
(3)仓库-存放镜像的地方
存放镜像的地方,和git类似
简单来说就是,不同的应用程序所依赖的环境不一样,如果把他们依赖的软件都安装在一个服务器上,不仅需要调试很久,而且可能会有冲突。
如果想把两个应用程序隔离起来,可以在服务器上创建不同的虚拟机,不同的虚拟机放不同的应用,但是虚拟机的开销比较高。docker作为轻量级的虚拟机,是一个很好的工具。
作用:
解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况。
限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
双11时扩展机器用。
总结成一句话:docker的标准化让快速扩展,弹性伸缩变得简单
Docker 容器架构
Docker 本身是一个容器运行载体或称之为管理引擎,我们把程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker 容器。Image文件可以看作是容器的模板。Docker根据image文件生成容器实例,同一个image文件,可以生成多个同时运行的容器实例。
Image 文件生成的容器实例,本身也是一个文件,称之为镜像文件
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓储中拉下来就可以了。
Docker 的安装
安装教程:
Docker for windows
Docker for ubuntu
Docker 阿里云镜像加速器配置
- 访问 https://dev.aliyun.com,注册登陆自己的帐号,可以使用支付宝或者淘宝账户登陆或者直接登陆容器镜像服务地址
- 设置开通自己的镜像服务(授权子账户)
- 配置镜像加速器
- 安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce - 配置加速器
针对Docker客户端版本大于 1.10.0 的用户
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://thkolwle.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker