Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 是一个工具,可以帮助解决如安装、拆卸、升级、分发、信任和管理软件等常用问题。Docker包含一个命令行程序、一个后台守护进程和一组远程服务。

1、Docker是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 是一个工具,可以帮助解决如安装、拆卸、升级、分发、信任和管理软件等常用问题。Docker包含一个命令行程序、一个后台守护进程和一组远程服务。

不同于虚拟机,Docker容器不使用硬件虚拟化,运行在Docker容器中的程序接口直接和Linux内核打交道,容器中的程序和操作系统之间没有额外的中间层。

命令行工具在用户名称空间的内存中运行, 同操作系统上运行的其他程序一样。

image-20200617111314194

Docker构建的容器隔离包括以下8个方面:

  1. PID名称空间—进程表示符和能力
  2. UST名称空间—主机名和域名
  3. MNT名称空间—文件系统访问和结构
  4. NET名称空间—网路访问和结构
  5. USR名称空间—用户名和标识
  6. chroot()—控制文件系统根目录的位置
  7. cgroups—资源保护

2、构建和环境无关的系统

Docker有三个特定功能,来帮助建立与环境无关的系统

  • 只读文件系统
  • 环境变量注入
  • 存储卷

2.1、只读文件系统

只读文件系统,容器不能更改它所包含的任何文件,同时容器中的攻击者无法破坏文件。

创建容器时需使用–read-only标志,如:

1
docker run -d --read-only wordpress:4

2.2、环境变量注入

环境变量是通过执行上下文提供给程序的键值对。可以让用户在更改程序配置时,无须修改任何文件或者更改启动程序的命令。

–env标志或者-e缩写,可用于注入任何环境变量, 如:

1
2
3
4
5
6
$ docker run --env MY_ENV="hello world" busybox:latest env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=90b9adbe051c
MY_ENV=hello world
HOME=/root