容器
-
Docker是基于Go语言实现的开源容器项目。它诞生于2013年年初,最初发起者是dotCloud公司,2013年年底改名为Docker Inc,并专注于Docker相关技术和产品的开发,目前已经成为全球最大的Docker容器服务提供商(docker.com)
-
docker是一个能够把开发的应用程序自动部署到容器的开源引擎。容器技术是实现在一台硬件机器上虚拟出多个容器,每个容器中可以放置一个互相隔离的服务器。容器其实也是采用虚拟的方式进行的,只不过在同等条件下,容器技术会比虚拟技术效率高,但是容器中没有包含独立的操作系统,虚拟机包含独立的操作系统。所以Docker是容器级虚拟化,Docker引擎的基础是linux容器
-
为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含Docker、CoreOS、Google在内的若干公司共同成立了一个叫Open Container Initiative(OCI)的组织,其目的是制定开放的容器规范。
-
目前OCI发布了两个规范:runtime spec和image format spec。
-
容器编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机地组合成微服务应用,实现业务需求。
-
Docker核心组件
- Docker客户端和服务器
- Docke镜像
- Docker Registry(仓库)
- Docker容器
-
Docker是一个CS架构的程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或守护进程将完成所有工作并返回结果
![](https://img2020.cnblogs.com/blog/406862/202112/406862-20211226103137482-82300905.png) -
docker容器虚拟化的好处
- 通过容器打包应用,迁移只需要在新的服务器上启动需要的容器,降低部署风险和节约时间
- 更快速的交付和部署
- 更高效的资源利用
- 更轻松的迁移和扩展
- 更简单的更新管理
- Docker对层级镜像的创新应用,即不同的容器可以共享底层的只读镜像,通过写入自己特有的内容后添加新的镜像层,新增的镜像层和下层的镜像一起又可以作为基础镜像被更上层的镜像使用,这种特性可以极大的提高磁盘利用率,所以当你的系统上有10个大小为1GB的镜像时,他们总共占用的空间大小可能只有5GB,甚至更少
-
与虚拟机的比较
- docker容器很快,启动和停止秒级。
- docker容器对系统资源的需求很少。虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现。
Linux安装
-
阿里云Docker镜像 https://developer.aliyun.com/mirror/docker-ce
-
Docker引擎目前分为两个版本:社区版本(Community Edition, CE)和企业版本(Enterprise Edition, EE)。
- 社区版本包括大部分的核心功能。社区版本每个月会发布一次尝鲜(Edge)版本,每个季度(3、6、9、12月)会发行一次稳定(Stable)版本。版本号命名格式为年份.月份,如2018年6月发布的版本号为
v18.06
- 企业版本则通过付费形式提供认证支持、镜像管理、容器托管、安全扫描等高级服务
- 社区版本包括大部分的核心功能。社区版本每个月会发布一次尝鲜(Edge)版本,每个季度(3、6、9、12月)会发行一次稳定(Stable)版本。版本号命名格式为年份.月份,如2018年6月发布的版本号为
-
docker-io与docker-engine区别
- docker-io是被Ubuntu维护,在centos6下我们安装的Docker就是docker-io,最早在Ubuntu上也是docker.io。目前都使用docker-ce
- docker-engine是被Docker维护,现在演变为docker-ce
- docker-ee是企业版本,由Docker Data Center更改而来
-
系统需求:To install Docker CE, you need the 64-bit version of CentOS 7.
-
卸载旧版本:如果安装了旧版本 docker 或 docker-engine,需要卸载
$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine $ yum list installed | grep docker
-
安装
1. 安装依赖包 $ yum install -y yum-utils device-mapper-persistent-data lvm2 2. 设置yum源 $ yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3. 查看Docker版本 $ yum list docker-ce.x86_64 --showduplicates |sort -r $ yum makecache fast $ yum install -y --setopt=obsoletes=0 docker-ce-19.03.9-3.el7 # 开机启动 $ systemctl start docker && systemctl enable docker # 验证docker是否正确安装 $ docker run hello-world
Mac安装
- http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/
- Docker for Mac
- Docker for Mac 是一个原生的苹果应用程序,被安装到 /Application 目录。安装时会创建 /usr/local/bin 目录下的 docker、docker-compose、docker-machine 符号链接,这些符号链接指向
~/Library/Group Containers/group.com.docker/bin
目录下的各类文件,而~/Library/Group Containers/group.com.docker/bin
的文件实际上也是符号链接,他们指向/Applications/Docker.app/Contents/Resources/bin
目录下的实际二进制文件。 - Docker for Mac 不使用 docker-machine 管理虚拟机。Docker for Mac 使用通过
Hypervisor.framework
提供的轻量级的 xhyve 虚拟化技术。HyperKit(https://github.com/moby/hyperkit)是Docker开源的支持OSX的轻量级虚拟化工具包。它基于MacOSX 10.10之后引入的Hypervisor框架。 - Docker for Mac 不通过 TCP 端口通信,反而使用/var/tmp/docker.sock套接字文件通信(实际上是将 /var/tmp 目录挂载到了虚拟机中,虚拟机在其中生成套接字文件)
- 由于使用了 xhyve 虚拟机,所以可以模拟不同架构的处理器,这样开发者就直接能在 Mac 上使用 Docker 使用诸多平台的镜像文件,比如 arm 等
- 为了能主机虚拟机共享文件,Docker 使用 osxfs 作为全新的文件共享方案,在很多方面都有全新的特性,比如在文件权限、命名空间、文件所有者、文件系统事件、挂载点、符号链接、文件类型、扩展属性等方面都有了全新的内容,并且,所有产生的日志都能通过 syslog 查询,非常方便。不过现在依旧存在许多问题,比如没有设置 docker daemon 各项参数的接口。如果需要设置 registry-mirror 则必须手动使用 pinata set daemon 命令设置 daemon.json 内容。
- Docker for Mac 是一个原生的苹果应用程序,被安装到 /Application 目录。安装时会创建 /usr/local/bin 目录下的 docker、docker-compose、docker-machine 符号链接,这些符号链接指向
docker配置
-
配置阿里云加速器:https://cr.console.aliyun.com/cn-beijing/instances(自己注册阿里云账号)
$ mkdir -p /etc/docker $ tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://7m2taepc.mirror.aliyuncs.com"] } EOF $ systemctl daemon-reload && systemctl restart docker
-
修改Docker驱动。修改docker Cgroup Driver为systemd
1. 方法一,修改daemon.json,新增"exec-opts":["native.cgroupdriver=systemd"] $ vim /etc/docker/daemon.json $ more /etc/docker/daemon.json { "exec-opts":["native.cgroupdriver=systemd"] } # 修改后重启 $ systemctl daemon-reload && systemctl restart docker $ docker info | grep Cgroup Cgroup Driver: systemd
-
代理配置:https://docs.docker.com/config/daemon/systemd/。Docker 守护进程在其启动环境中使用 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量来配置 HTTP 或 HTTPS 代理行为。使用 daemon.json 配置几乎所有守护程序配置选项,但是不能使用 daemon.json 文件配置HTTP代理这些环境变量。
$ mkdir -p /etc/systemd/system/docker.service.d $ vim /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=http://proxy.example.com:80" Environment="HTTPS_PROXY=https://proxy.example.com:443" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp" 验证配置是否已加载 $ systemctl show --property=Environment docker
-
修改docker存储路径
$ docker info |grep 'Docker Root Dir' Docker Root Dir: /var/lib/docker $ vim /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com"], "data-root": "/data/docker" } $ sudo cp -r /var/lib/docker /data/docker $ systemctl daemon-reload && systemctl restart docker $ docker info |grep 'Docker Root Dir'
-
修改日志大小限制
$ vim /etc/docker/daemon.json { "log-driver":"json-file", "log-opts": {"max-size":"200m", "max-file":"2"} } $ systemctl daemon-reload && systemctl restart docker