欢迎!很高兴您希望要学习Docker相关内容。本系列Docker入门指南将教会您以下知识点:
- 安装您自己的Docker环境(本文)。
- 创建一个镜像,并以容器的方式运行。
- 将应用拓展成多容器运行模式。
- 在集群中分布式部署您的应用。
- 通过添加后台数据库来堆栈一系列的服务。
- 可用于生产的应用发布。

Docker的概念

Docker是一个可以让开发者或系统管理者能以容器的方式开发、部署、运行应用的平台。使用Linux容器部署应用的过程我们称之为容器化。容器不是一个新概念,它仅仅是让应用发布变得更加简单。

容器化应用之所以越来越受欢迎,主要是因为其拥有以下优点:
- 灵活性:即使最复杂的应用也可以被容器化。
- 轻量级:所有容器共享主机内核。
- 可替换性:可以即时的对应用进行部署、更新和升级。
- 便携性:可以在本地进行构建,部署到云端以及可以在任何地方运行。
- 拓展性:可以很容易的新增发布容器副本。
- 可堆叠:可以即时的垂直堆栈服务。

Containers are protable

镜像和容器

通过运行镜像来启动一个容器。镜像就是一个包含应用运行所需要的一切事物的可执行包,包括代码、运行环境、扩展库、环境变量以及配置文件等。

容器就是一个镜像在内存中运行的实例(即:拥有状态的镜像或者用户进程)。在LInux下可以使用docker ps命令来查看当前运行的容器列表。

容器和虚拟机

容器运行在Linux本地,并与其他容器共享主机内核。运行在各自的进程中,不占用其他应用的内存,使其轻量化。

相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。 通常,VM提供的环境比大多数应用程序需要的资源更多。

Docker容器
虚拟机

准备Docker环境

在支持的平台上安装在维护的Docker社区版(CE)或者企业版(EE)。

测试Docker版本

  1. 运行docker --version,并确认其为受支持的版本:
docker --version

Docker version 17.12.0-ce, build c97c6d6
  1. 运行docker info或者(docker version 去掉--)去查看已安装的Docker的更多信息:
docker info

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: overlay2
...

为了避免权限错误(以及使用sudo),请将您的用户添加到docker分组内。

测试已安装dockers

  1. 通过运行一个简单的镜像(hello-world)来测试已安装的docker环境:
docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...
  1. 列举已经下载到本机的镜像,如:hello-world:
docker image ls
  1. 列举hello-world展示消息后退出的容器。如果该容器还在运行,则不需要使用--all选项:
docker container ls --all

CONTAINER ID     IMAGE           COMMAND      CREATED            STATUS
54f4984ed6a8     hello-world     "/hello"     20 seconds ago     Exited (0) 19 seconds ago

回顾和备忘录

## 列举docker相关的命令
docker
docker container --help

## 展示docker的版本信息
docker --version
docker version
docker info

## 运行镜像
docker run hello-world

## 列举镜像
docker image ls

## 列举容器(正在运行、所有以及静默模式下的所有)
docker container ls
docker container ls --all
docker container ls -aq

结论

容器化使CI/CD(持续集成和持续部署)无缝化。例如:
- 应用程序无系统依耐性。
- 可以将更新推送到分布式应用的任何一个部分。
- 资源密度可以被优化。

使用docker拓展应用的主要问题在于启动新的可执行程序,而不是运行繁杂的虚拟主机。

——————————————————————————
行路不知花开处,蓦然回首芷兰香。