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

从本文起,记录一些学习微信公众号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 的客户端连接。

  1. 重启Docker daemon
    systemctl daemon-reload
    systemctl restart docker

  2. 假设服务器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 显示容器正在运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值