专栏首页刘君君Docker Notes-introduction

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker Notes-architecture

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

    itliusir
  • Docker Notes-storage

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

    itliusir
  • Rest Notes-基于网络应用的架构风格

    itliusir
  • Docker 禁止美国“实体清单”主体使用,开源项目应不受影响!

    2019 年 5 月,美国政府以「科技网络安全」为由,将华为及其 70 个分支机构列入「实体清单」,禁止华为在未经美国政府批准的情况下从美国企业获得元器件和相关...

    程序IT圈
  • 【技术专栏】大话Docker系列:我们为什么需要Docker

    轻量级虚拟化容器Docker1.0正式版自发布半年以来,已经受到开源界的极大追捧和企业界的密切关注。在国外CloudOpen大会上投票显示Docker是仅次于O...

    SDNLAB
  • Docker推出SDN容器插件

    Docker收购网络初创公司SocketPlane 3个月后就推出了一款软件定义网络插件,在开源容器工具组中添加了容器级别的网络虚拟化功能。该容器的非正式名称是...

    SDNLAB
  • Docker已死?听听他怎么说(开课吧)

    2020年底,Kubernetes 在当时最新的 Changelog 中宣布,自 V1.20 后将弃用 Docker,一石激起千层浪。Docker镜像不...

    ChinaManor
  • Docker系列课程01-Docker简介

    1.1 Docker简介 Docker是一个开源的容器引擎,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样...

    用户1516716
  • Docker使用率虽上升 但高便携性却毫无意义

    Docker容器是一种强大、流行的云端开发选择。但,尽管许多IT团队正在转向容器,几乎很少有人能真正充分利用该项技术的优势。 Docker,或者更广一点说容器的...

    静一
  • Docker 起死回生了

    2019 年时两度更换 CEO、毅然出售企业业务之后,人们对于 Docker 曾经一度看衰。

    taskctl官方频道

扫码关注云+社区

领取腾讯云代金券