无论使用什么平台,安装 Python 2 或 3 都非常简单。在 Linux 上,设置 C/C ++ 工具链也非常容易,但是在 Windows 和 Mac 上,这是一项繁重的工作。
在 Windows 上,C++ 构建工具包有数 GB 之大,安装必要耗费相当长的时间。在 Mac 上,可以安装巨大的 Xcode 应用步伐,也可以安装小巧的 Xcode 下令行工具 包。
不管安装了哪一种,它都大概会在 OS 更新时停止。现实上,该问题非常广泛,以致连官方堆栈都专门提供了 macOS Catalina 的安装阐明。
这里假设你已包办理了设置依赖项的全部贫苦,而且已经预备好开始。这是否意味着如今开始就一帆风顺了?固然不是。
如果你使用 Linux 而同事使用 Windows 该怎么办?如今,必须思量如那里理这两个差别的操纵体系不同等的路径,或诸如 nginx 之类的盛行技能在 Windows 上未得到很好的优化的毕竟,以及诸如 Redis 之类的某些技能以致都不是针对 Windows 预先构建的。
纵然你完成了整个开发,如果负责管理服务器的职员摆设流程搞错了,该怎么办?
全部这些问题都可以通过以下方式办理:
在与终极摆设环境匹配的隔离环境(称为容器)中开发和运行应用步伐。
将你的应用步伐及其全部依赖项和须要的摆设设置放入一个文件(称为镜像)中。
并通过具有恰当授权的任何人都可以访问的中心服务器(称为堆栈)共享该镜像。
然后,你的同事就可以从堆栈中下载镜像,可以在没有平台辩论的隔离环境中运行应用,以致可以直接在服务器上进行摆设,由于该镜像也可以进行生产环境设置。
这就是容器化背后的想法:将应用步伐放在一个独立的步伐包中,使其在各种环境中都可移植且可回溯。
如今的问题是:Docker 在这里扮演什么脚色?
正如我之前讲的,容器化是一种将齐备同一放入盒子中来办理软件开发过程中的问题的头脑。
这个想法有很多实现。Docker 就是如许的实现。这是一个开放源代码的容器化平台,可让你对应用步伐进行容器化,使用公共或私有堆栈共享它们,也可以编排它们。
目前,Docker 并不是市场上唯一的容器化工具,却是最受欢迎的容器化工具。我喜好的另一个容器化引擎是 Red Hat 开发的 Podman。其他工具,比方 Google 的 Kaniko,CoreOS 的 rkt 都很棒,但和 Docker 还是有差距。
别的,如果你想相识容器的汗青,可以阅读 A Brief History of Containers: From the 1970s Till Now,它形貌了该技能的很多紧张节点。
怎样安装 Docker
Docker 的安装因使用的操纵体系而异。但这整个过程都非常简单。
Docker可在 Mac、Windows 和 Linux 这三个紧张平台上完善运行。在这三者中,在 Mac 上的安装过程是最简单的,因此我们从这里开始。
怎样在 macOS 里安装 Docker
在 Mac 上,要做的就是跳转到官方的下载页面,然后单击Download for Mac(stable)按钮。
你会看到一个通例的 Apple Disk Image 文件,在该文件的内有 Docker 应用步伐。所要做的就是将文件拖放到 Applications 目录中。
只需双击应用步伐图标即可启动 Docker。应用步伐启动后,将看到 Docker 图标出如今菜单栏上。
安装完成后,从开始菜单或桌面启动 Docker Desktop。Docker 图标应显示在使命栏上。
如今,打开 Ubuntu 或从 Microsoft Store 安装的任何发行版。实验 docker --version 和 docker-compose --version 下令以确保安装乐成。
也可以从通例下令提示符或 PowerShell 访问 Docker,只是我更喜好使用 WSL2。
怎样在 Linux 上安装 Docker
在 Linux 上安装 Docker 的过程有所差别,详细操纵取决于你所使用的发行版,它们之间差别大概更大。但老实说,安装与其他两个平台一样容易(如果不能算更容易的话)。
Windows 或 Mac 上的 Docker Desktop 软件包是一系列工具的聚集,比方Docker Engine、Docker Compose、Docker Dashboard、Kubernetes 和其他一些好东西。
但是,在 Linux 上,没有得到如许的捆绑包。可以手动安装所需的全部须要工具。 差别发行版的安装过程如下:
已经在盘算机上启动并运行了 Docker,如今该运行第一个容器了。打开终端并实验以下下令:
docker run hello-world# Unable to find image 'hello-world:latest' locally# latest: Pulling from library/hello-world# 0e03bdcc26d7: Pull complete # Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc# Status: Downloaded newer image for hello-world:latest# # Hello from Docker!# This message shows that your installation appears to be working correctly.# # To generate this message, Docker took the following steps:# 1. The Docker client contacted the Docker daemon.# 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.# (amd64)# 3. The Docker daemon created a new container from that image which runs the# executable that produces the output you are currently reading.# 4. The Docker daemon streamed that output to the Docker client, which sent it# to your terminal.## To try something more ambitious, you can run an Ubuntu container with:# $ docker run -it ubuntu bash# # Share images, automate workflows, and more with a free Docker ID:# https://hub.docker.com/## For more examples and ideas, visit:# https://docs.docker.com/get-started/hello-world 镜像是使用 Docker 进行最小化容器化的一个示例。它有一个从 hello.c 文件编译的步伐,负责打印出终端看到的消息。
如今,在终端中,可以使用 docker ps -a 下令检察当前正在运行或已往运行的全部容器:
docker ps -a# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES# 128ec8ceab71 hello-world "/hello" 14 seconds ago Exited (0) 13 seconds ago exciting_chebyshev在输出中,使用 hello-world 镜像运行了名为 exciting_chebyshev 的容器,其容器标识为 128ec8ceab71。它已经在 Exited (0) 13 seconds ago,此中 (0) 退出代码表现在容器运行时未发生任何错误。
如今,为了相识背后发生的事变,必须熟悉 Docker 体系布局和三个非常根本的容器化概念,如下所示: