如何安装和使用 Docker:入门

金钱(警告)

** 状态:** 被贬值

此文章已被删除,不再保留。

相反,看

本文可能仍然有用作为参考,但可能无法工作或遵循最佳实践. 我们强烈建议使用最近为您正在使用的操作系统撰写的一篇文章。

本文的最新版本可在 如何在Ubuntu 16.04上安装和使用Docker找到。

介绍


提供的使用案例是无限的,需要一直存在。 Docker 是这里为您提供一个高效,快速的方式来跨系统和机器的应用程序的端口。

在这篇DigitalOcean文章中,我们致力于全面介绍Docker:近年来最令人兴奋和最强大的开源项目之一。

词典


1、Docker


二、Docker项目及其主要部分


3. Docker 元素


  1. Docker 容器
  2. Docker 图像
  3. Dockerfiles

4、如何安装Docker


5、如何使用Docker


  1. 开始 2 与 Images 3 合作。

多克


无论是从您的开发机器到远程服务器用于生产,还是包装一切用于其他地方,当涉及到将您的应用程序堆栈与其依赖性一起运送并使其运行时,这是一个挑战,事实上,挑战是巨大的,迄今为止的解决方案对大众来说并没有真正成功。

简而言之,docker 作为一个 project 提供了完整的更高级别的工具,可以将构成应用程序的所有东西 - 虚拟或物理 - 传递到系统和机器之间,并带来更多巨大的好处。

Docker 通过 Linux Containers (例如名称空间和其他内核功能)实现其强大的应用程序(因此过程和资源)限制,其进一步的功能来自一个项目的自身部分和组件,这些组件提取了与系统和应用程序管理所使用的 lower-level linux 工具/API 的所有复杂性,涉及到安全的包含流程。

Docker 项目及其主要部分


Docker 项目(由 dotCloud 在 3 月 13 日开源)由几个主要部分(应用程序)和元素(这些部分使用)组成,所有这些元素都是基于 Linux 内核和第三方提供的现有功能、库和框架(例如 LXC、设备地图器、aufs 等)。

主要 Docker 部件


  1. docker daemon:用于在主机上管理 docker (LXC) 容器它运行
  2. docker CLI:用于命令和与 docker daemon 3通信。

主要 Docker 元素


  1. docker 容器:包含 everything-your-application 2 的目录。 docker 图像:容器或基础操作系统(例如 Ubuntu) images 3 的快照。

Docker 元素


由构建 docker 项目的应用程序使用以下元素。

多克集装箱


使用 docker 传输应用程序的整个过程完全依赖于集装箱的发送。

Docker 容器基本上是可以被包装的目录(例如, tar 存档),像其他任何人一样,然后共享并在各种不同的机器和平台(主机)中运行。

LXC(Linux集装箱)

Linux 容器可以被定义为各种内核级别的功能(即 Linux 内核 can 所做的)的组合,允许管理应用程序(以及它们所使用的资源)在其自身环境中。通过使用某些功能(例如名空间、chroots、cgroups 和 SELinux 配置文件),LXC 包含应用程序流程,并通过限制资源来帮助管理它们,不允许超出其自身的文件系统(访问父母的名称空间)等。

Docker 与其 containers 使用 LXC,但也带来了更多。

多克集装箱


Docker容器有几个主要特点。

他们允许;

  • 应用可移植性
  • 隔离流程
  • 防止与外部的温和化
  • 管理资源消耗

此外,需要的资源要比传统的虚拟机少得多,用于分离式应用部署。

他们不允许(不允许)。

  • 与其他流程混乱
  • 导致依赖地狱
  • 或不在不同的系统上工作
  • 容易受到攻击和滥用所有系统资源

而且(也)更多。

从技术方面来看,这些容器是基于和依赖于LXC的,这些容器就像一个目录(但是一种形状和格式化)。

每个容器都像一个 onion 一样层次化,在一个容器内采取的每一个操作都包括将另一个块(实际上翻译为文件系统中的简单更改)放置在以前的块上,各种工具和配置使此设置以完全和谐的方式工作(例如联合文件系统)。

这种有容器的方式允许的是轻松启动和创建新容器和图像的极大好处,这些容器和图像因此保持轻量级(由于它们的渐进和层次结构)。

每个docker容器都从一个docker图像开始,它为未来的其他应用程序和层奠定了基础。

Docker 图片


Docker 图像构成了 docker 容器 from 的基础,一切都开始于 form. 它们非常类似于默认的操作系统磁盘图像,用于在服务器或桌面计算机上运行应用程序。

有了这些图像(例如Ubuntu基础)允许无缝的跨系统的可移植性. 他们创造了一个坚实,一致和可靠的基础,拥有运行应用程序所需的一切。 当一切都是自我限制和系统级更新或修改的风险被消除时,容器会免受外部暴露,这可能会使其失序 - 防止依赖地狱。

随着更多层(工具,应用程序等)被添加到基础上,新的图像可以通过 _committing_这些更改来形成。当一个新的容器从保存(即承诺)的图像中创建时,事情会从他们离开的地方继续。

在使用docker CLI 直接创建新容器时,这些基础图像可以被明确表示,或者它们可以被指定在自动图像构建的 **_Dockerfile_中。

文档


Dockerfiles 是包含一系列指令,指令和命令的脚本,这些命令将被执行以形成一个新的 docker 图像. 每个执行的命令将转换为一个新的叶子层,形成最终产品。

如何安装Docker


起初,docker仅在Ubuntu上可用,如今,可以在RHEL系统(例如CentOS)和其他系统上部署docker。

让我们快速地通过Ubuntu的安装过程。

<$>[注] 注: Docker 可以通过在启动时将 此脚本添加到其用户数据中自动安装到您的 Droplet。

Ubuntu 安装指南


获取 docker 的最简单方法,除了使用预先构建的应用程序图像之外,是使用 64 位 Ubuntu 14.04 VPS。

更新您的滴滴:

1sudo apt-get update
2sudo apt-get -y upgrade

确保 Aufs 支持可用:

1sudo apt-get install linux-image-extra-`uname -r`

将 docker 存储库密钥添加到 apt-key 进行包验证:

1sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

将 docker 存储库添加到 Apt 源:

1echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

更新存储库与新的添加:

1sudo apt-get update

下载和安装 docker:

1sudo apt-get install docker-engine

Ubuntu 的默认防火墙(UFW:Uncomplicated Firewall)默认地拒绝所有转发流量,这需要 docker。

通过 UFW 进行转发:

使用 nano 文本编辑器编辑 UFW 配置。

1sudo nano /etc/default/ufw

向下滚动,找到以 DEFAULT_FORWARD_POLICY 开头的行。

取代:

1DEFAULT_FORWARD_POLICY="DROP"

与:

1DEFAULT_FORWARD_POLICY="ACCEPT"

按 CTRL + X 并用 Y 批准以保存和关闭。

最后,重新加载UFW:

1sudo ufw reload

有关完整的说明,请参阅安装的 docker 文档 这里

如何使用Docker


一旦你安装了docker,它的直观的使用体验使它非常容易工作. 到目前为止,你将有docker daemon在背景中运行. 如果没有,使用以下命令来运行docker daemon。

如何运行Docker Daemon:

1sudo docker -d &

使用语法:

使用 docker(通过 CLI)是通过一个选项和命令链,然后是参数,请注意, docker 需要 sudo 特权才能工作。

1sudo docker [option] [command] [arguments]

** 注意:** 下面的指示和解释是用作指南,并为您提供使用和与docker合作的整体想法。熟悉它最好的方法是练习在新的VPS上。不要害怕破坏任何东西――事实上,做破坏事物!与docker,您可以轻松地保存您的进展并从那里继续。

开始


让我们先看看 Docker 的所有可用命令。

请 docker 列出所有可用的命令列表:

1sudo docker

目前可用的所有命令(按 0.7.1):

 1attach Attach to a running container
 2build Build a container from a Dockerfile
 3commit Create a new image from a container's changes
 4cp Copy files/folders from the containers filesystem to the host path
 5diff Inspect changes on a container's filesystem
 6events Get real time events from the server
 7export Stream the contents of a container as a tar archive
 8history Show the history of an image
 9images List images
10import Create a new filesystem image from the contents of a tarball
11info Display system-wide information
12insert Insert a file in an image
13inspect Return low-level information on a container
14kill Kill a running container
15load Load an image from a tar archive
16login Register or Login to the docker registry server
17logs Fetch the logs of a container
18port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
19ps List containers
20pull Pull an image or a repository from the docker registry server
21push Push an image or a repository to the docker registry server
22restart Restart a running container
23rm Remove one or more containers
24rmi Remove one or more images
25run Run a command in a new container
26save Save an image to a tar archive
27search Search for an image in the docker index
28start Start a stopped container
29stop Stop a running container
30tag Tag an image into a repository
31top Lookup the running processes of a container
32version Show the docker version information
33wait Block until a container stops, then print its exit code

查看整个系统的信息和docker版本:

1# For system-wide information on docker:
2sudo docker info
3
4# For docker version:
5sudo docker version

与图像合作


正如我们详细讨论过的,开始使用任何 Docker 容器的关键是使用图像. 有许多免费可用的图像在 docker 图像索引 中共享,并且 ** CLI** 允许轻松访问查询图像存储库并下载新的图像。

当你准备好时,你也可以在那里分享你的图像。

搜索一个 docker 图像:*

1# Usage: sudo docker search [image name]
2sudo docker search ubuntu

这将为您提供一个非常长的所有可用的图像列表,匹配查询: Ubuntu

** 下载(Pulling)一个图像:**

无论是在你建造 / 创建一个容器,还是在你做之前,你需要有一个图像存在于主机,在那里容器将存在。

1# Usage: sudo docker pull [image name]
2sudo docker pull ubuntu

** 图片列表:**

您的系统上的所有图像,包括您通过承诺创建的图像(参见下面的详细信息),可以使用图像列出。

 1# Example: sudo docker images
 2sudo docker images
 3
 4REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
 5my_img latest 72461793563e 36 seconds ago 128 MB
 6ubuntu 12.04 8dbd9e392a96 8 months ago 128 MB
 7ubuntu latest 8dbd9e392a96 8 months ago 128 MB
 8ubuntu precise 8dbd9e392a96 8 months ago 128 MB
 9ubuntu 12.10 b750fe79269d 8 months ago 175.3 MB
10ubuntu quantal b750fe79269d 8 months ago 175.3 MB

** 对图像进行更改:**

当你使用一个容器并继续执行操作时(例如下载和安装软件,配置文件等),要让它保持其状态,你需要承诺

1# Usage: sudo docker commit [container ID] [image name]
2sudo docker commit 8dbd9e392a96 my_img

** 分享(推)图片:**

虽然现在有点早 - 在我们的文章中 -,当你创建了自己的容器,你想与世界其他人分享时,你可以使用推力将你的图像列入索引中,每个人都可以下载和使用。

请记住承诺你的所有变化。

1# Usage: sudo docker push [username/image name]  
2sudo docker push my_username/my_first_image

** 注意:** 您需要在 index.docker.io登录以将图像推到 docker 索引。

与集装箱合作


当你使用图像运行任何过程时,反过来你将有一个容器。当该过程 积极运行时,这个容器将是一个 ** 不运行** 容器。

列出所有目前的集装箱:

默认情况下,您可以使用以下方法列出所有 ** 运行 ** 容器:

1sudo docker ps

要列出两个 运行 和 ** 非运行** 的列表,请使用:

1sudo docker ps -l

创建新的集装箱


目前没有运行任何内容(即命令)即可创建容器。 要创建新的容器,您需要使用基图像并指定要运行的命令。

1# Usage: sudo docker run [image name] [command to run]
2sudo docker run my_img echo "hello"
3
4# To name a container instead of having long IDs
5# Usage: sudo docker run -name [name] [image name] [comm.]
6sudo docker run -name my_cont_1 my_img echo "hello"

这会输出你好,你会回到你所处的位置(即你的主机壳)

由于您无法在创建容器后更改所执行的命令(因此在创建过程中指定一个命令),因此使用流程管理器甚至自定义启动脚本可以执行不同的命令。

运送集装箱:**

当您创建一个容器并停止(由于其过程结束或您明确停止),您可以使用运行来使容器再次使用创建它时使用的相同命令。

1# Usage: sudo docker run [container ID]
2sudo docker run c629b7d70666

记得如何找到容器吗? 请参阅上方的 _list_ing 部分。

一个集装箱的停放:**

要阻止集装箱的流程运行:

1# Usage: sudo docker stop [container ID]
2sudo docker stop c629b7d70666

** 保存(_commit_ting)一个集装箱:**

如果您想保存使用容器所做的进展和更改,您可以使用承诺,如上所述,以将其保存为 ** 图像** 。

此命令将您的容器转换为 image

请记住,在 docker 中,承诺是便宜的,不要犹豫地使用它们来创建图像,以便使用 容器保存您的进展,或者在需要时重新滚动(例如时间拍照)。

** 删除/删除容器:**

使用容器的 ID,您可以用 rm 删除一个容器。

1# Usage: sudo docker rm [container ID]
2sudo docker rm c629b7d70666

您可以通过阅读他们的 官方文档来了解更多关于 Docker 的信息。

** 记住:** 在docker上,事情正在发生非常快的进展。社区驱动的势头令人惊讶,许多大型公司试图加入提供支持。然而,该产品仍然没有被标记为 ** production ready** ,因此不建议100%信任任务关键部署 - ** yet** 。

Published At
Categories with 技术
Tagged with
comments powered by Disqus