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

2.3、修改容器启动参数

创建容器时,如果忘记添加参数–restart=always,那么容器并不会自动重启。容器已经创建,此时修改容器配置可以通过命令:docker container update,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
± docker container update --help

Usage:  docker container update [OPTIONS] CONTAINER [CONTAINER...]

Update configuration of one or more containers

Options:
      --blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int          Limit the CPU real-time period in microseconds
      --cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds
  -c, --cpu-shares int             CPU shares (relative weight)
      --cpus decimal               Number of CPUs
      --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
      --kernel-memory bytes        Kernel memory limit
  -m, --memory bytes               Memory limit
      --memory-reservation bytes   Memory soft limit
      --memory-swap bytes          Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --pids-limit int             Tune container pids limit (set -1 for unlimited)
      --restart string             Restart policy to apply when a container exits

如,修改restart配置, 可以使用:

1
docker container update --restart=always 容器ID