您的位置:首页 > 运维架构 > Docker

Docker笔记(一)Docker基本概念与快速入门

2018-01-03 23:00 615 查看
从本文起,记录一些学习微信公众号CloudMan的Docker的文章。

本文是第一篇 《Docker基本概念与快速入门》

1. 快速入门

安装和更新docker时,可能要把防火墙、安全卫士等关闭。

Architecture

docker client —> docker host <–> Docker Hub

docker client: run docker commands

docker host: run containers which loads images

Docker Hub: docker repository

Typical way

client:

- docker pull: pull image from Docker Hub to docker host

- docker run: run a container to load this image

client:

- docker build: create a new image

- docker push: push this image to repository

Concepts

Docker Image

Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

可以理解为一个预配置的系统光盘,插入电脑后就可以启动一个操作系统。当然由于是光盘,所以你无法修改它或者保存数据,每次重启都是一个原样全新的系统。Docker 里面镜像基本上和这个差不多。

使用实例

挂载

docker run -it -v [host_dir]:[container_dir]

将D:\挂载到/home/www

docker run -it -v D::/home/www –rm ubuntu:16.04

2. 容器生态系统

容器生态系统: (核心技术、平台技术、支持技术)

容器核心技术

容器规范

runtime spec

image format spec

容器runtime

runtime 是容器真正运行的地方。runtime 需要跟操作系统 kernel 紧密协作,为容器提供运行环境。

容器好比是Java程序,runtime则好比是JVM. JVM 为 Java 程序提供运行环境。同样的道理,容器只有在 runtime 中才能运行。

包括:lxc、runc、rkt

容器管理工具

对内与 runtime 交互,对外为用户提供 interface,比如 CLI。

包括:lxd、docker engine(daemon, cli)、rkt cli

容器定义工具

允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。

包括:docker image、dockerfile、ACI(App Container Image)

docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。

dockerfile 是包含若干命令的文本文件,可以通过这些命令创建出 docker image。

ACI (App Container Image) 与 docker image 类似,不过它是由 CoreOS 开发的 rkt 容器的 image 格式。

Registries

容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry

常见的Registry有:Docker Registry、Docker Hub、Quay.io

容器OS

容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。

常见的容器OS有:CoreOS、atomic、ubuntu core

容器平台技术

容器编排引擎

所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。

通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。

主流的包括:

docker swarm是 Docker 开发的容器编排引擎

kubernetes 是 Google 领导开发的开源容器编排引擎,同时支持 Docker 和 CoreOS 容器

mesos 是一个通用的集群资源调度平台,mesos 与 marathon 一起提供容器编排引擎功能

容器管理平台

容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。

通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能,

比如 application catalog 和一键应用部署等。

Rancher 和 ContainerShip 是容器管理平台的典型代表。

基于容器的PaaS

基于容器的 PaaS 为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,

使用户不必关心底层基础设施而专注于应用的开发。

Deis、Flynn 和 Dokku 都是开源容器 PaaS 的代表。

容器支持技术

容器网络

用户需要专门的解决方案来管理容器与容器,容器与其他实体之间的连通性和隔离性。

docker network 是 Docker 原生的网络解决方案。

另外还有第三方开源解决方案,如 flannel、weave、calico

服务发现

当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。

容器也会根据 host 的资源使用情况在不同 host 中迁移,容器的 IP 和端口也会随之发生变化。

服务发现技术,就是让 client 能够知道如何访问容器提供的服务。

服务发现会保存容器集群中所有微服务最新的信息,比如 IP 和端口,并对外提供 API,提供服务查询功能。

etcd、consul、zookeeper 是服务发现的典型解决方案。

监控

docker ps/top/stats 是 Docker 原生的命令行监控工具。

除了命令行,Docker 也提供了 stats API,用户可以通过 HTTP 请求获取容器的状态信息。

sysdig、cAdvisor/Heapster、Weave Scope 是其他开源的容器监控方案。

数据管理

容器经常会在不同的 host 之间迁移。

如何保证持久化数据也能够动态迁移,是 Flocker 这类数据管理工具提供的能力。

日志管理

docker logs 是 Docker 原生的日志工具。

而 logspout 对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具进行后期处理。

安全性

OpenSCAP 能够对容器镜像进行扫描,发现潜在的漏洞。

3. 运行第一个容器(在CentOS上)

安装文档:

https://docs.docker.com/engine/installation/linux/docker-ce/centos/

主要步骤:

yum remove docker docker-common container-selinux docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum makecache fast
yum install docker-ce
systemctl start docker
docker -v
Docker version 17.03.1-ce, build c6d412e
docker info
docker run hello-world


道云镜像加速

道云主页点击右上角的加速器,进入网址:https://www.daocloud.io/mirror#accelerator-doc

另一个实验

运行:

docker run -d -p 80:80 httpd


在浏览器上键入: http://
即可看见: It Works!

4. 容器架构

为什么需要容器?容器到底解决的是什么问题?

简要的答案是:容器使软件具备了超强的可移植能力。

Docker 服务器

Docker daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像。

默认配置下,Docker daemon 只能响应来自本地 Host 的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开 TCP 监听,步骤如下:

1. 编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service,

在环境变量 ExecStart 后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接。

重启Docker daemon

systemctl daemon-reload

systemctl restart docker

假设服务器IP为192.168.50.2,在客户端的命令行里加上 -H 参数,即可与远程服务器通信。

比如:docker -H 192.168.50.2 info

Docker镜像

将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile,

通过执行 docker build 命令可以构建出 Docker 镜像。

Docker容器

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

docker images 可以查看到 httpd 已经下载到本地。

docker ps 或者 docker container ls 显示容器正在运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker