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的核心概念

image.png Docker镜像 Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统 例如:一...

3665
来自专栏你不就像风一样

史上最全面的Docker构建工具使用教程

Docker 是一个开源的应用容器引擎,基于 Go 语言] 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可...

1392
来自专栏zhisheng

Docker 入门(一):理解三大核心

Docker 的前世今生 Docker 的核心理念是 Build, Ship, and Run Any App, Anywher,即一次封装,到处运行。 从前,...

3837
来自专栏jmeter高手高高手

Docker_部署jenkins(dockerfile实现)

我用的是ubuntu14.04的基础镜像,并且在基础镜像中已经把ant,tomcat,jdk的安装包配置好了。具体的这里不做赘述。

9513
来自专栏散尽浮华

Docker容器学习梳理--日常操作总结

使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Com...

4275
来自专栏我是攻城师

Docker学习笔记二打造基础镜像

3355

Docker - 如何SSH到正在运行的容器

本文包含有关如何让Docker容器使用SSH与其他Docker容器连接的说明。如果我没有提到一个或多个重点,请随意评论/建议。

30710
来自专栏糊一笑

小白学Docker之Compose

承接上篇文章:小白学Docker之基础篇,自学网站来源于https://docs.docker.com/get-started 系列文章: 小白学Docker之...

37611
来自专栏勤奋的小北鼻的专栏

Docker - 如何SSH连接到正在运行的容器

本文包含有关如何让Docker容器使用SSH与其他Docker容器连接的说明。如果我没有提到一个或多个重点,请随意评论/建议。

2856
来自专栏生信宝典

Docker基本使用

Docker能做什么 The key benefit of Docker is that it allows users to package an appli...

1967

扫码关注云+社区