Docker Notes-introduction

摘要: Docker Notes系列为学习Docker笔记,本文是Docker总体介绍

正文:

Docker 介绍

Centents

  • 容器介绍
  • Docker是什么
  • Docker 架构
  • Docker 镜像
  • Dockerfile
  • Docker Hub

容器介绍

没有规范指定容器应该是什么

LXC(Linux Container)是一种操作系统级虚拟化方法,用于使用单个Linux内核在主机上运行多个隔离的Linux系统(容器)

Linux内核提供cgroups功能,允许限制和优先化资源(CPU,内存,块I / O,网络等),而无需启动任何虚拟机,以及允许完全隔离应用程序视图的命名空间隔离功能 操作环境,包括进程树,网络,用户ID和已安装的文件系统

namespaces

Docker Engine在Linux上使用的一些命名空间是:

namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTC 主机名与域名
IPC CLONE_NEWIPC 信号量、消息队列、共享内存
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络栈、端口
Mount CLONE_NEWNS 文件系统

cgroups

cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石

cgroups现在全称是control groups,它为每种可以控制的资源定义了一个子系统

  • blkio 可以限制块设备的输入输出,如磁盘、USB
  • cpu 可以限制进程的cpu 使用率
  • cpuacct 可以生成cpu 使用报告
  • cpuset 可以为cgroups中进程分配独立的CPU和内存
  • devices 可以控制进程对设备的访问
  • freezer 可以对进程进行挂起或恢复
  • memory 可以对进程的memory使用量进行限制,并生成内存资源使用情况报告
  • perf_event 可以对进程进行统一的性能测试
  • net_cls 可以使用classid标记网络包,然后Linux流量控制程序识别从具体cgroups中生成的数据包

Docker 是什么

Docker 是一个linux 容器引擎,其开源项目第一个版本是由dotcloud公司在2013年3月发布,使用golang,一开始是基于LXC来创建的,现在使用libcontainer。从使用上来讲就像一个虚拟机

Why Go?

  1. 静态编译
    • “go build”将嵌入你需要的一切(不需要安装别的东西以运行)
    • 除了动态库,如果使用cgo(cgo 允许你使用任何c库)
    • 除了libc(但谁没有libc?),你可以有一个真正的静态二进制文件
    • 更易于安装,更易于测试,更易于使用
  2. 符合我们的需求
    • 优良的异步原语
    • 大量的标准库和数据类型
  3. 完善的开发者环境

Docker 架构

Docker Client

Docker Client是Docker架构中用户用来与Docker Daemon建立通信的客户端

通信方式

  • tcp://host:port
  • unix://path_to_socket
  • fd://socketfd

请求参数

  • Docker程序运行时所需提供的参数,如-d
  • Docker发送给Docker Server的实际请求参数,如 ps、pull xxx等

Docker Daemon

Docker daemon 是Docker 架构中的主要接口,它提供了API Server用于接收Docker client的请求,然后根据不同请求分发给Docker daemon的不同模块执行相应的工作

Docker 镜像

Docker 镜像是一个只读的Docker 容器模块,含有启动Docker容器所需的文件系统结构及其内容,是启动一个Docker 容器的基础,Docker 镜像是Docker容器的静态视角,Docker容器是Docker镜像的运行状态

Dockerfile

docker 可以根据Dockerfile来自动构建镜像,Dockerfile是一个文本文档,其中包含用户可以在命令行上调用的所有需要进行自动化构建的命令,如下是一个简单的springboot应用镜像的Dockerfile文件内容

example

1
2
3
4
5
FROM xxx.cn/jdk8:alpine
VOLUME /tmp
ADD ./target/demo.war /app/
CMD ["sh", "-c", "java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app/demo.war ${RUN_ARGS}"]
EXPOSE 8888

Docker Hub

docker hub是类似github(gayhub)的一个官方镜像仓库,可以根据需求pull自己需要的镜像,也可以push自己构建的镜像,在社会主义特色开发下企业往往使用自己搭建的私有镜像仓库,如harbor等

参考链接

Docker源码分析

Introduction to Docker