摘要: Docker Notes系列为学习Docker笔记,本文是Docker总体介绍
没有规范指定容器应该是什么
LXC(Linux Container)是一种操作系统级虚拟化方法,用于使用单个Linux内核在主机上运行多个隔离的Linux系统(容器)
Linux内核提供cgroups功能,允许限制和优先化资源(CPU,内存,块I / O,网络等),而无需启动任何虚拟机,以及允许完全隔离应用程序视图的命名空间隔离功能 操作环境,包括进程树,网络,用户ID和已安装的文件系统
Docker Engine在Linux上使用的一些命名空间是:
namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTC | 主机名与域名 |
IPC | CLONE_NEWIPC | 信号量、消息队列、共享内存 |
PID | CLONE_NEWPID | 进程编号 |
Network | CLONE_NEWNET | 网络栈、端口 |
Mount | CLONE_NEWNS | 文件系统 |
cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石
cgroups现在全称是control groups,它为每种可以控制的资源定义了一个子系统
Docker 是一个linux 容器引擎,其开源项目第一个版本是由dotcloud公司在2013年3月发布,使用golang,一开始是基于LXC来创建的,现在使用libcontainer。从使用上来讲就像一个虚拟机
Why Go?
Docker Client是Docker架构中用户用来与Docker Daemon建立通信的客户端
Docker daemon 是Docker 架构中的主要接口,它提供了API Server用于接收Docker client的请求,然后根据不同请求分发给Docker daemon的不同模块执行相应的工作
Docker 镜像是一个只读的Docker 容器模块,含有启动Docker容器所需的文件系统结构及其内容,是启动一个Docker 容器的基础,Docker 镜像是Docker容器的静态视角,Docker容器是Docker镜像的运行状态
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是类似github(gayhub)的一个官方镜像仓库,可以根据需求pull自己需要的镜像,也可以push自己构建的镜像,在社会主义特色开发下企业往往使用自己搭建的私有镜像仓库,如harbor等