Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)

在找 自动化测试 框架的过程,准备在mac上搭建环境Kubernetes + docker,遇到一些问题,记录 一下

什么是docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。

Docker底层的核心技术包括Linux上的Namespace(命名空间),Cgroups(控制组,control groups),UFS(union file system)和Container format(容器格式)

大家虽然都共用一个内核和某些运行时环境(例如一些系统命令和系统库),但是彼此却看不见,都以为系统中只有自己的存在。这种机制就是容器(Container),利用Namespace(命名空间)来做权限的隔离控制,利用Cgroups(控制组,control groups)来做资源分配。

docker和虚拟机比较

Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)_第1张图片

Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)_第2张图片

docker架构

Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)_第3张图片

Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)_第4张图片

 

  • Docker使用C/S结构
  • Docker client和Docker daemon(守护进程)进行交互。Docker daemon负责对docker container的创建,运行,构造和分发等操作
  • Docker client和Docker daemon可以运行在同一系统上,或者可以使用docker client连接远程的docker daemon
  • Docker client和Docker daemon使用REST API通信,通过UNIX套接字或网络接口进行通信

Docker client

  • Docker client使用Docker API 跟 Docker daemon进行通信交互

Docker daemon

  • 处理Docker API 请求

  • 管理Docker对象:如镜像、容器、网络等。

  • 可以跟多个不同的Docker Daemon进行通信

Registry

  • 存储Docker镜像

  • 公有和私有Docker Registry

Docker Images(镜像)

  • 镜像是用来创建容器的只读模板

  • 镜像是通过Docker build命令创建的
  • 镜像由镜像层构成
  • 镜像存储于Docker Registry

Docker Container(容器)

  • 容器是镜像的运行实例

  • 容器是应用运行环境的封装,具有轻量级、移植性高等特点
  • 容器由镜像创建,内部封装所有运行应用所需依赖及可执行文件

可以理解为:images 是类 class, container 是对象object

docker家族

Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)_第5张图片

Docker Engine

client 和 host(deamon) 构成了  engine。在client(客户机器)上输入 docker 命令,这些命令发送给host(deamon)后会执行对应命令

Docker Compose

  • Docker Compose是一个定义和管理多个Docker容器的工具
  • 它通过YAML文件定义Docker应用运行时的信息,如:端口、网络等。
  • 使用Docker Compose,一个简单命令可以管理多个容器应用。

使用Docker Compose可以

  • 快速构建开发环境
  • 自动化测试环境
  • 单一主机部署多个容器

案例参加:Docker三十分钟快速入门(下)

Docker Machine,Docker Desktop

Docker Machine是命令行(CLI)工具,通过它能简单的管理docker。

Docker Desktop是Windows和Mac上的工具软件

Docker Swarm

我们要想在产线去运行容器集群,那我们首先需要COE(Container Orchestration Engine)工具。COE的主要功能如下:

  • 主机配置(Provisioning)
  • 容器编排
  • 自我修复
  • Scale up/down 容器
  • 暴露服务给外界
  • 服务发现

Docker swarm是docker的官方工具。同样,Kubernates也是干这事的,Kubernetes vs Docker Swarm:完整的比较指南

docker 初见疑问

外部如何访问docker里的服务

端口映射

$ docker container run -p 8000:3000 -it koa-demo /bin/bash
-p参数:容器的 3000 端口映射到本机的 8000 端口。

映射后,浏览器访问 127.0.0.1:8000,就会映射到 名为 koa-demo 3000端口上。具体案例参见:阮一峰的 Docker 入门教程

如何打包成image,并推送到container

通过配置文件Dockerfile, 然后命令行编译 docker build 生成 image,具体案例参见:阮一峰的 Docker 入门教程

container间如何访问

可以通过docker compose,案例参加:Docker三十分钟快速入门(下),docker compose只能管理本机的cotainer

docker, swarm 和Kubernates 可以管理集群

 

使用Docker Compose搭建 Wordpress

官方文档,非常简单

前提:安装了docker compose,用命令查看

docker compose --version

本地创建目录 wordpress, 然后 CD 到目录下,再执行命令

vi docker-compose.yml

本地若没有docker-compose.yml这个文件,将自动创建,将内容拷贝到文件里后 :wq 退出

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

然后执行命令

docker-compose up -d

成功后用命令 

docker container ls

查看, wordpress是否已经运行,如果ok,打开浏览器 http://localhost:8000/,就可以看到网站了

Docker 及 Kubernetes 架构,搭建及常见问题(mac环境)_第6张图片

参考资料:

比较清晰简单

Docker 30分钟入门

Docker入门,带命令说明,这篇讲的比较清楚

阮一峰的 Docker 入门教程

 

其他

Docker 架构

docker官方文档

docker 英文资料

Kubernetes vs Docker – What Is the Difference?

前端领域的 Docker 与 Kubernetes

在Mac上启动kubernetes 的时候一直是 starting 状态,解决方案

docker 命令大全

kubernetes中文手册

 

 

 

 

你可能感兴趣的:(运维)