创建镜像 - 创建与定制 mysql 镜像
本文通过制作与定制 mysql 镜像为案例,一方面说明创建镜像简单,另一方面解释 docker image 的内容,直观描述 docker build 命令与 Dockerfile 主要配置。这些基本能满足日常工作需要,需要完整的命令和配置说明可参考官方文档或网上的翻译。
1、docker images?
docker images 使得软件实现拿来即用。docker images 中包含什么呢?
其中:
- KERNEL 是每个 Linux 操作系统都有的, image 不包含。
- DEBIAN-image 代表我们常见的 Linux 系统(不含 KERNEL),如 CentOS, Ubuntu,Debian 等又称为 Linux 发行版。这些除了包含 KERNEL 外,包含大量操作系统扩展、各种管理工具、开发工具、图像界面支持等。通常都是庞然大物,命令行版本的文件系统也有几百兆。这些镜像大约 100~200M。
- BUSY BOX-image 代表精简的 Linux 系统, 如 Alpine, busybox, CoreOS 等,仅支持一些最基本 Linux 命令和一个简单应用包管理,以及以满足云应用需求的支持。这些镜像 5~10M。
- ADD EMACS-image 代表 Emacs 这样的基础应用,它仅在基础操作系统文件基础上添加了自己的代码和依赖包;
- ADD APACHE-image 代表 Apache web 应用,建立在已有 emacs 镜像基础上,即文件系统添加了 apache 及其依赖包。这样形成多层叠加的文件系统,尽管 APACHE-image 仅包含自己的内容,但启动后,我们可以访问基础操作系统、emacs 提供的程序和软件包。
- WRITEBLE COTAINER 是镜像中程序在与主机(Host)隔离环境下运行进程产生的中间文件。
因此:
image 是文件(增量)与环境(context)配置文件的集合。
这个定义太枯燥,我们来看它的生成过程:
2、mysql 镜像制作
2.1 Dockerfile 文件
docker build 默认使用 Dockerfile 文件创建镜像。mysql 官方 docker 构建(mysql5.7)的 Dockerfile 文件内容是2:
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
# add gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lis