·commit:和 git 类似 。Docker 容器提供了版本控制 。通过 commit 发生的改变 。你在任何时间都可以将你的 Docker 容器的状态保存为一个新镜像 。
·DockerHub/Image Registry:人们可以发布公开(或私人)Docker 镜像的地方 。用于促进合作与共享 。
·层(layer):对已有镜像的修改 。由 Dockerfile 中的一个指令表示 。层按次序应用到基础镜像上 。以创建出最终的镜像 。
本文将使用这些术语 。如果你在阅读时忘记了 。一定要回来查看!这些术语很容易混淆 。尤其是在镜像和容器之间——所以你在阅读时要保持警惕!
安装 Docker
你可以免费下载安装 Docker 社区版(Docker Community Edition) 。地址:https://www.docker.com/community-edition
创建你的第一个 Docker 镜像
在创建 Docker 容器之前 。创建一个将用于定义镜像的 Dockerfile 会很有用 。我们先慢慢解读一下下面的 Dockerfile 。你也可以在与本教程关联的 GitHub 库中找到这个文件:https://goo.gl/iE4Bdr
# reference: https://hub.docker.com/_/ubuntu/
FROM ubuntu:16.04
# Adds metadata to the image as a key value pair example LABEL version=\"1.0\"
LABEL maintainer=\"Hamel Husain <www.github.com/hamelsmu>\"
##Set environment variables
ENV.UTF-8 LC_ALL=C.UTF-8
RUN apt-get update --fix-missing && apt-get install -y wget bzip2 ca-certificates \
build-essential \
byobu \
curl \
git-core \
htop \
pkg-config \
python3-dev \
python-pip \
python-setuptools \
python-virtualenv \
unzip \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \
wget --quiet https://repo.continuum.io/archive/Anaconda3-5.0.0.1-Linux-x86_64.sh -O ~/anaconda.sh && \
/bin/bash ~/anaconda.sh -b -p /opt/conda && \
rm ~/anaconda.sh
ENV PATH /opt/conda/bin:$PATH
RUN pip --no-cache-dir install --upgrade \
multiprocessing \
sklearn-pandas
# Open Ports for Jupyter
EXPOSE 7745
#Setup File System
RUN mkdir ds
ENV HOME=/ds
ENV SHELL=/bin/bash
VOLUME /ds
WORKDIR /ds
ADD run_jupyter.sh /ds/run_jupyter.sh
RUN chmod +x /ds/run_jupyter.sh
# Run the shell
CMD[\"./run_jupyter.sh\"]
FROM语句
FROM ubuntu:16.04
FROM 语句包含了 Docker 最神奇的部分 。这个语句指定了你想在上面进行创建的基础镜像 。通过使用 FROM 指定一个基础镜像 。Docker 将会在你的本地环境中寻找名为 ubuntu:16.04 的镜像——如果它没有找到 。它就会搜索你指定的Docker Registry 。默认是 DockerHub:https://hub.docker.com/explore/ 。如果你需要经常在你的 Ubuntu 等操作系统上安装程序 。那么这种分层机制就非常方便 。你不必费心从头开始安装 Ubuntu 。而是可以直接在官方的 Ubuntu 镜像上开发!DockerHub 上托管着种类繁多的镜像 。包括那些不只是提供了一个操作系统的镜像 。比如如果你想要一个已经安装了 Anaconda 的容器 。你可以选择在官方的 Anaconda Docker 镜像上开发 。地址:https://hub.docker.com/r/continuumio/anaconda3/ 。最重要的是 。你也可以随时发布你构建的镜像 。即使该镜像是通过在其它镜像上加层得到的!这有无尽的可能性 。
在这个案例中 。我们指定基础镜像为 ubuntu:16.04 。它会搜索名叫 ubuntu 的 DockerHub 库(https://hub.docker.com/_/ubuntu/) 。镜像名之后的部分 16.04 是指定了你想要安装的基础镜像的版本的标签(tag) 。如果你检索一下 Ubuntu DockerHub 库 。你会注意到不同版本的 Ubuntu 对应于不同的 tag:
文章插图
2017 年 12 月的官方 Ubuntu DockerHub 库截屏
比如 。ubuntu:16.04、ubuntu:xenial-20171201、ubuntu:xenial 和 ubuntu:latest 全都是指 16.04 版的 Ubuntu 。它们全都是同一个镜像的别名 。此外 。这里提供的链接指向了对应的 Dockerfile 。可用于构建每个版本的镜像 。有时候你无法在 DockerHub 中找到 Dockerfile 。因为维护者可以自己选择是否将关于这些镜像的创建方式的 Dockerfile 包含进来 。我个人觉得阅读一些 Dockerfile 有助于更好地理解 Dockerfile 。(但不要急 。读完这篇教程再说!)
你需要特别注意一个标签 。即 :latest 标签 。这也是你在不为 FROM 语句指定标签时默认 pull 的镜像 。比如说如果你的 FROM 语句是这样:
FROM ubuntu
然后你就将 pull ubuntu:16.04 镜像 。为什么?——仔细看上面 。你可以看到 :latest 关联的是 16.04.
关于 Docker 镜像最后需要注意的一点:在从 DockerHub pull 随机的 Docker 镜像时要做出明智的判断 。有恶意的人创建的镜像有可能会包含恶意软件 。
推荐阅读
- 博氏巨蜥的价格
- 路易14玫瑰的花语 路易十四玫瑰花什么意思
- 还在担心移民岛国要花多少钱 其实移民这些小国可以省很多钱!
- 什么为落叶乔木 什么为落叶乔木?
- 没有钱,没有经验,要怎样创业?
- 美股熔断会重挫科技公司吗?未来一年科技和数码行业可能面临些什么?
- 哪种树被称为活化石? 哪种树被称为活化石
- 马耳他投资移民又要变政 2020年马耳他移民政策变动汇总
- 打工不如自己当老板,但是没有钱该如何创业呢?