如何安装和使用Docker:入门
状态: 已弃用
本文已弃用,不再维护。
请参阅
本文可能仍可用作参考,但可能不起作用或无法遵循最佳实践。 我们强烈建议使用针对您正在使用的操作系统编写的最新文章。
本文的最新版本可在 如何在 Ubuntu 16.04 上安装和使用 Docker。
介绍
提供的用例是无限的,需求一直存在。 [[“%3Ca|https://www.docker.io/]] [[“%3C/a|”>Docker]]在这里为您提供一种高效、快速的方式来跨系统和机器移植应用程序。 它轻巧精简,允许您快速包含应用程序并在其自己的安全环境中运行它们(通过 Linux 容器:LXC)。
在这篇 DigitalOcean 文章中,我们旨在向您全面介绍 Docker:近年来最令人兴奋和最强大的开源项目之一。 Docker 可以为您提供如此多的帮助,试图用一句话概括其功能是不公平的。
词汇表
1. 码头工人
2. Docker 项目及其主要部分
3. 码头工人元素
- 码头集装箱
- 泊坞窗图像
- Dockerfiles
4. 如何安装 Docker
5. 如何使用 Docker
- 开始
- 使用图像
- 使用容器
码头工人
无论是从您的开发机器到用于生产的远程服务器,还是将所有内容打包以供在其他地方使用,在将您的应用程序堆栈及其依赖项一起移植并使其顺利运行时始终是一个挑战。 事实上,挑战是巨大的,到目前为止,解决方案还没有真正证明对大众来说是成功的。
简而言之,作为 项目 的 docker 为您提供了一套完整的更高级别的工具,以承载构成跨系统和机器(虚拟或物理)应用程序的所有内容,并带来更多巨大的好处.
Docker 通过 Linux Containers(例如 命名空间和其他内核特性)。 它的进一步功能来自项目自己的部件和组件,这些部件和组件提取了使用 lower-level linux 工具/API 的所有复杂性,这些工具/API 用于安全包含流程的系统和应用程序管理。
Docker 项目及其主要部分
Docker 项目(由 dotCloud 在 2013 年 3 月开源)由几个主要部分(应用程序)和元素(由这些部分使用)组成,它们都 [大部分] 构建在 Linux 提供的现有功能、库和框架之上内核和第三方(例如 LXC、设备映射器、aufs 等)。
主要 Docker 部件
- docker daemon:用于管理它运行的主机上的 docker (LXC) 容器
- docker CLI:用于命令和与 docker daemon 通信
- docker image index:docker 图像的存储库(公共或私有)
主要的 Docker 元素
- docker 容器:包含所有应用程序的目录
- docker images:容器或基本操作系统的快照(例如 Ubuntu)图像
- Dockerfiles:自动化图像构建过程的脚本
码头工人元素
构成 docker 项目的应用程序使用以下元素。
码头集装箱
使用 docker 移植应用程序的整个过程仅依赖于容器的运输。
Docker 容器基本上是可以打包的目录(例如 tar-archived),然后在各种不同的机器和平台(主机)上共享和运行。 唯一的依赖是调整主机以运行容器(即 安装了docker)。 这里的遏制是通过 Linux Containers (LXC) 获得的。
LXC(Linux 容器)
Linux Containers 可以定义为各种内核级特性的组合(即 Linux 内核 可以 做的事情)允许管理包含在他们自己的环境中的应用程序(和他们使用的资源)。 通过利用某些功能(例如 命名空间、chroot、cgroups 和 SELinux 配置文件),LXC 包含应用程序进程并通过限制资源来帮助管理它们,不允许超出它们自己的文件系统(访问父命名空间)等。
Docker 及其 containers 使用了 LXC,但也带来了更多。
码头集装箱
Docker 容器有几个主要特性。
他们允许;
- 应用程序可移植性
- 隔离进程
- 防止与外界回火
- 管理资源消耗
以及更多,与用于隔离应用程序部署的传统虚拟机相比,所需资源要少得多。
他们确实 not 允许;
- 与其他进程混淆
- 导致“依赖地狱”
- 或者不在其他系统上工作
- 容易受到攻击并滥用所有系统资源
和(也)更多。
基于 LXC 并依赖于 LXC,从技术角度来看,这些容器就像一个目录(但是是一个成形和格式化的目录)。 这允许容器的可移植性和逐步构建。
每个容器都像 onion 一样分层,并且在容器内执行的每个操作都包括在前一个块之上放置另一个块(实际上转化为文件系统中的简单更改)。 各种工具和配置使这个设置以一种和谐的方式工作(例如 联合文件系统)。
这种拥有容器的方式所带来的极大好处是可以轻松启动和创建新的容器和图像,从而保持轻量级(由于它们的构建方式是渐进式和分层的)。 由于一切都基于文件系统,因此及时拍摄快照和执行回滚是 cheap(即 很容易完成/不占用大量资源),很像 版本控制系统 (VCS)。
每个 docker 容器 都从一个 docker 镜像 开始,它构成了其他应用程序和层的基础。
泊坞窗图像
Docker 镜像构成了 docker 容器 从 的基础,一切都从 到 。 它们与用于在服务器或台式计算机上运行应用程序的默认操作系统磁盘映像非常相似。
拥有这些图像(例如 Ubuntu 基础)允许跨系统无缝移植。 它们为运行应用程序所需的一切奠定了坚实、一致和可靠的基础。 当一切都是自包含的并且消除了系统级更新或修改的风险时,容器就不会受到外部暴露的影响,这可能会使它出现故障 - 防止依赖地狱。
随着在基础之上添加更多层(工具、应用程序等),可以通过 提交 这些更改来形成新图像。 当一个新容器从一个保存的(即 承诺)形象,事情从他们离开的地方继续。 当您使用容器时, 联合文件系统 将所有层作为一个实体组合在一起。
在使用 docker CLI 直接创建新容器时,可以明确说明这些基础镜像,或者可以在 Dockerfile 中指定它们以进行自动镜像构建。
Dockerfiles
Dockerfiles 是包含一系列指令、方向和命令的脚本,这些指令、方向和命令将被执行以形成新的 docker 映像。 执行的每个命令都会转换为洋葱的新层,形成最终产品。 它们基本上取代了手动重复做所有事情的过程。 当一个 Dockerfile 完成执行时,你最终形成了一个镜像,然后你用它来启动(即 创建)一个新的容器。
如何安装 Docker
起初,docker 只在 Ubuntu 上可用。 如今,可以在基于 RHEL 的系统上部署 docker(例如 CentOS) 等。
让我们快速回顾一下 Ubuntu 的安装过程。
注意: Docker 可以通过在启动时将 this script 添加到其用户数据来自动安装在您的 Droplet 上。 查看 本教程 以了解有关 Droplet 用户数据的更多信息。
Ubuntu 安装说明
除了使用预构建的应用程序映像之外,获取 docker 的最简单方法是使用 64 位 Ubuntu 14.04 VPS
更新您的液滴:
sudo apt-get update sudo apt-get -y upgrade
确保 aufs 支持可用:
sudo apt-get install linux-image-extra-`uname -r`
将 docker 存储库密钥添加到 apt-key 以进行包验证:
sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
将 docker 存储库添加到 Apt 源:
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
使用新增内容更新存储库:
sudo apt-get update
最后,下载并安装docker:
sudo apt-get install docker-engine
Ubuntu的默认防火墙(UFW:Uncomplicated Firewall)默认拒绝所有转发流量,这是docker需要的。
使用 UFW 启用转发:
使用 nano 文本编辑器编辑 UFW 配置。
sudo nano /etc/default/ufw
向下滚动并找到以 DEFAULT_FORWARD_POLICY 开头的行。
代替:
DEFAULT_FORWARD_POLICY="DROP"
和:
DEFAULT_FORWARD_POLICY="ACCEPT"
按 CTRL+X 并用 Y 批准以保存并关闭。
最后,重新加载 UFW:
sudo ufw reload
有关完整的说明,请在 此处 查看 docker 安装文档。
如何使用 Docker
安装 docker 后,其直观的使用体验使其非常易于使用。 至此,您应该让 docker 守护进程在后台运行。 如果没有,请使用以下命令运行 docker 守护程序。
要运行 docker 守护进程:
sudo docker -d &
使用语法:
使用 docker(通过 CLI)包括向其传递一系列选项和命令,然后是参数。 请注意,docker 需要 sudo 权限才能工作。
sudo docker [option] [command] [arguments]
注意: 提供以下说明和解释以用作指南,并为您提供使用和使用 docker 的总体思路。 熟悉它的最好方法是在新的 VPS 上练习。 不要害怕破坏任何东西——事实上,要破坏东西! 使用 docker,您可以保存进度并轻松地从那里继续。
开始
让我们从查看 docker 拥有的所有可用命令开始。
向 docker 询问所有可用命令的列表:
sudo docker
所有当前(从 0.7.1 开始)可用的命令:
attach Attach to a running container build Build a container from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders from the containers filesystem to the host path diff Inspect changes on a container's filesystem events Get real time events from the server export Stream the contents of a container as a tar archive history Show the history of an image images List images import Create a new filesystem image from the contents of a tarball info Display system-wide information insert Insert a file in an image inspect Return low-level information on a container kill Kill a running container load Load an image from a tar archive login Register or Login to the docker registry server logs Fetch the logs of a container port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT ps List containers pull Pull an image or a repository from the docker registry server push Push an image or a repository to the docker registry server restart Restart a running container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save an image to a tar archive search Search for an image in the docker index start Start a stopped container stop Stop a running container tag Tag an image into a repository top Lookup the running processes of a container version Show the docker version information wait Block until a container stops, then print its exit code
查看系统范围的信息和 docker 版本:
# For system-wide information on docker: sudo docker info # For docker version: sudo docker version
使用图像
正如我们详细讨论过的,开始使用任何 docker 容器的关键是使用图像。 在 docker image index 和 CLI 之间共享了许多免费可用的图像,允许简单地访问以查询图像存储库并下载新的存储库。
准备好后,您也可以在那里分享您的图像。 有关详细信息,请参阅进一步向下的“推送”部分。
搜索泊坞窗图像:*
# Usage: sudo docker search [image name] sudo docker search ubuntu
这将为您提供一个 very long 与查询匹配的所有可用图像的列表:Ubuntu。
下载(拉)图像:
无论是在构建/创建容器时还是在此之前,您都需要在容器所在的主机上存在一个映像。 为了下载图像(可能在“搜索”之后),您可以执行 pull 来获取图像。
# Usage: sudo docker pull [image name] sudo docker pull ubuntu
列表图像:
您系统上的所有图像,包括您通过提交创建的图像(详见下文),都可以使用“图像”列出。 这提供了所有可用列表的完整列表。
# Example: sudo docker images sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE my_img latest 72461793563e 36 seconds ago 128 MB ubuntu 12.04 8dbd9e392a96 8 months ago 128 MB ubuntu latest 8dbd9e392a96 8 months ago 128 MB ubuntu precise 8dbd9e392a96 8 months ago 128 MB ubuntu 12.10 b750fe79269d 8 months ago 175.3 MB ubuntu quantal b750fe79269d 8 months ago 175.3 MB
提交对图像的更改:
当您使用容器并继续对其执行操作时(例如 下载和安装软件,配置文件等),要让它保持其状态,你需要“提交”。 提交确保一切从你下次使用它们离开的地方继续(即 一个图像)。
# Usage: sudo docker commit [container ID] [image name] sudo docker commit 8dbd9e392a96 my_img
共享(推送)图像:
虽然现在有点早 - 在我们的文章 中,当您创建了自己的容器并想与世界其他地方共享时,您可以使用推送来拥有 你的【X201X】图片收录在索引中,大家可以下载使用。
请记住“提交”所有更改。
# Usage: sudo docker push [username/image name] sudo docker push my_username/my_first_image
注意:你需要在index.docker.io注册,才能将图片推送到docker index。
使用容器
当您使用图像“运行”任何进程时,作为回报,您将拥有一个容器。 当进程 not 主动运行时,此容器将是 非运行 容器。 尽管如此,它们都将驻留在您的系统上,直到您通过 rm 命令删除它们。
列出所有当前容器:
默认情况下,您可以使用以下命令列出所有 running 容器:
sudo docker ps
要同时列出 running 和 non-running 的列表,请使用:
sudo docker ps -l
创建新容器
目前不可能在不运行任何东西的情况下创建容器(即 命令)。 要创建新容器,您需要使用基础映像并指定要运行的命令。
# Usage: sudo docker run [image name] [command to run] sudo docker run my_img echo "hello" # To name a container instead of having long IDs # Usage: sudo docker run -name [name] [image name] [comm.] sudo docker run -name my_cont_1 my_img echo "hello"
这将输出“你好”,你就会回到原来的位置。 (IE 你主机的外壳)
由于您无法更改创建容器后运行的命令(因此在“创建”期间指定一个),因此通常的做法是使用进程管理器甚至自定义启动脚本来执行不同的命令。
运行容器:
当您创建一个容器并且它停止时(由于它的进程结束或您明确停止它),您可以使用“运行”让容器再次使用与创建它相同的命令。
# Usage: sudo docker run [container ID] sudo docker run c629b7d70666
还记得如何找到容器吗? 有关 列出 的信息,请参阅上面的部分。
停止容器:
要停止容器的进程运行:
# Usage: sudo docker stop [container ID] sudo docker stop c629b7d70666
保存(committing)一个容器:
如果您想保存使用容器所做的进度和更改,可以使用上面解释的“提交”将其保存为 图像。
此命令将您的容器转换为 图像 。
请记住,使用 docker,提交很便宜。 不要犹豫,使用它们来创建图像以使用容器保存您的进度或在需要时回滚(例如 像及时的快照)。
删除/删除容器:
使用容器的 ID,您可以使用 rm 删除一个。
# Usage: sudo docker rm [container ID] sudo docker rm c629b7d70666
您可以通过阅读他们的[[“%3Ca|http://docs.docker.io/en/latest/]]了解更多关于 Docker 的信息 [[“%3C/a|”>官方文档]]
记住: docker 的进展非常快。 社区推动的势头令人惊叹,许多大公司都试图加入提供支持。 但是,该产品仍未标记为 生产就绪 ,因此不建议 100% 信任关键任务部署 - 尚未 。 确保在发布时检查发布并继续掌握 docker 的所有内容。