本文的最新版本可在如何安装和在Ubuntu 16.04使用Docker 。
介绍
所提供的用例是无限的,并需要一直存在。 Docker是在这里为您提供高效,快捷的方式来在系统和设备端口的应用程序。 它轻便灵活,允许您快速包含应用程序,并在自己的安全环境(通过Linux容器:LXC)中运行它们。
在这篇DigitalOcean文章中,我们旨在向您详细介绍Docker:最近几年来最令人兴奋和功能强大的开源项目之一。 Docker可以帮助你这么多不公平,试图总结其功能在一个句子。
词汇表
Docker
2. Docker项目及其主要部分
Docker元素
- Docker容器
- Docker镜像
- Dockerfiles
4.如何安装Docker
5.如何使用Docker
- 开始
- 使用图像
- 使用容器
Docker
无论是从开发机器到远程服务器进行生产,还是打包一切用于其他地方,在将应用程序栈与其依赖关系一起移植并使其无嗝时运行时,总是一个挑战。 事实上,挑战是巨大的,迄今为止的解决方案还没有真正证明为群众取得成功。
简而言之,Docker作为一个项目为您提供了一套完整的更高级别的手段来进行,形成跨系统和机器的应用程序的一切-虚拟或物理-并沿负载更多的用它巨大的利益带来的。
Docker实现其强大的应用(因此,流程和资源),通过Linux的安全壳容器 (如命名空间和其他内核的功能)。 其进一步的功能来自于项目本身的零部件,其提取物用于系统和应用管理与安全地包含流程的问候较低级别的 Linux工具/原料药工作的全部复杂性。
Docker项目及其主要部分
Docker项目(由dotCloud在2013年3月开源)由几个主要部分(应用程序)和元素(由这些部分使用)组成,所有这些都是基于Linux上提供的已有功能,库和框架内核和第三方(例如LXC,设备映射器,aufs等)。
主Docker部件
- docker守护进程:用于在运行的主机上管理docker(LXC)容器
- docker CLI:用于命令和与docker守护程序通信
- docker image index:docker映像的存储库(公共或私有)
主Docker元素
- docker containers:包含everything-your-application的目录
- docker映像:容器或基本操作系统(例如Ubuntu)映像的快照
- Dockerfiles:脚本自动化图像的构建过程
Docker元素
构成docker项目的应用程序使用以下元素。
Docker容器
使用docker移植应用程序的整个过程仅依赖于容器的装运。
Docker容器基本上是可以像任何其他包装(例如tar归档),然后共享并运行在各种不同的机器和平台(主机)上的目录。 唯一的依赖是调整主机来运行容器(即安装docker)。 遏制在这里通过的Linux容器 (LXC)获得。
LXC(Linux容器)
Linux的容器可以被定义为一个组合各种内核级功能(即的事情,Linux的内核可以做),允许包含自己的环境内的应用程序(和资源,他们使用)的管理。 通过使用某些特性(例如命名空间,chroot,cgroup和SELinux配置文件),LXC包含应用程序进程,并通过限制资源来帮助管理,不允许超出自己的文件系统(访问父级的命名空间)等。
Docker与其容器利用LXC的,但是,也可沿带来更多。
Docker容器
Docker容器有几个主要特性。
他们允许
- 应用程序可移植性
- 隔离过程
- 防止与外部回火
- 管理资源消耗
并且需要比用于隔离应用程序部署的传统虚拟机少得多的资源。
他们不允许 ;
- 与其他进程混乱
- 导致“依赖地狱”
- 或者不在不同的系统上工作
- 易受攻击和滥用所有系统的资源
和(也)更多。
基于和依赖于LXC,从技术方面来说,这些容器就像一个目录(但是形状和格式化的)。 这使得便携性和逐步建立的容器。
每个容器是分层像洋葱和容器内采取各动作由把另一个块(这实际上转换到文件系统内的一个简单的改变)对前一个的顶部。 并且各种工具和配置使得该设置以一种和谐的方式工作(例如联合文件系统)。
这种容器允许的方式是容易启动和创建新的容器和图像的极大好处,因此保持轻量级(由于它们被建立的逐渐和分层的方式)。 既然一切都基于文件系统上,拍摄快照,并及时进行滚动边后卫很便宜 (即很容易做/资源不重),很像版本控制系统 (VCS)。
每个搬运工容器从形成为其它应用和层来基座Docker , 图像开始。
Docker镜像
Docker图像构成从其中一切开始形成搬运工容器的底部。 它们非常类似于用于在服务器或台式计算机上运行应用程序的默认操作系统磁盘映像。
拥有这些图像(例如,Ubuntu基础)允许跨系统的无缝可移植性。 它们使运行应用程序所需的一切都变得坚实,一致和可靠。 当一切是独立的,系统级更新或修改的风险被消除,容器成为免疫可能把它拿出来的次序外部风险- 防止依赖地狱 。
随着更多的层(工具,应用程序等)在基体的顶部加入,新的图片可通过提交这些变化来形成。 当一个新的容器从一个保存的(即承诺的)图像创建时,事情继续从他们离开的地方。 而工会的文件系统 ,把所有的层结合在一起,当您与容器的工作一个单一的实体。
这些基础的图像可以与DockerCLI工作直接创建一个新的容器时,应明确表示或者他们可能一个Dockerfile内部指定用于自动形象建设。
Dockerfiles
Dockerfiles是含有连续一系列指令,方向,和它们将被执行,以形成一个新的搬运工图像命令的脚本。 每个执行的命令翻译成洋葱的新层,形成最终产品。 它们基本上取代了一切手工和反复做的过程。 当Dockerfile执行完毕,最终不得不形成的图像,然后使用要启动的(即创建)一个新的容器。
如何安装Docker
起初,Docker仅在Ubuntu上可用。 现在,可以在基于RHEL的系统(例如CentOS)和其他系统上部署docker。
让我们快速完成Ubuntu的安装过程。
注:Docker可自动在您的Droplet通过添加安装这个脚本启动时,它的用户数据。 查看本教程以了解更多有关Droplet的用户数据。
Ubuntu的安装说明
除了使用预构建的应用程序映像,最简单的方式来获取docker是一个64位的Ubuntu 14.04 VPS
更新您的Droplet:
sudo apt-get update
sudo apt-get -y upgrade
确保aufs支持可用:
sudo apt-get install linux-image-extra-`uname -r`
将docker repository key添加到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 提出政策开头的行。
更换:
DEFAULT_FORWARD_POLICY="DROP"
使用:
DEFAULT_FORWARD_POLICY="ACCEPT"
按CTRL + X并用Y确认保存并关闭。
最后,重新加载UFW:
sudo ufw reload
对于一个完整的指令集,请安装搬运工文档在这里 。
如何使用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图像索引共享许多免费提供图像和CLI可轻松访问查询图像库,并下载新的。
当你准备好了,你也可以在那里分享你的形象。 有关详细信息,请参阅“推送”一节。
搜索docker图像:*
# Usage: sudo docker search [image name]
sudo docker search ubuntu
这将为您提供一个很长的查询匹配的所有可用图像列表:Ubuntu Linux系统 。
下载(拉取)图片:
无论是在构建/创建容器时,还是在创建容器之前,都需要在容器存在的主机上显示一个映像。 为了下载图像(也许下面的“搜索”),您可以执行拉得到一个。
# 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
分享(PUSHing)图片:
虽然这是一个有点早在这个时刻- 在我们的文章 ,当你创建了自己的容器,你想与世界其他国家分享,您可以使用按键在索引图像中列出,每个人都可以下载并使用。
请记住“提交”所有更改。
# Usage: sudo docker push [username/image name]
sudo docker push my_username/my_first_image
注意:您需要登录了在index.docker.io推图像Docker索引。
使用容器
当你使用图像“运行”任何进程时,作为回报,你将有一个容器。 当处理没有积极地运行,此容器将是一个非运行的容器。 尽管如此,直到你通过rm命令删除它们所有的人都将驻留在系统上。
列出所有当前容器:
默认情况下,可以使用下面列出所有正在运行的容器:
sudo docker ps
同时拥有在运行 和非运行的人的名单,请使用:
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"
这将输出“你好”,你会回到你在哪里。 (即你的主机的shell)
由于您不能更改创建容器后运行的命令(因此在“创建”期间指定一个容器),因此通常的做法是使用流程管理器甚至自定义启动脚本来执行不同的命令。
运行容器:
当你创建一个容器并停止(由于它的进程结束或你明确地停止它),你可以使用“运行”来获得容器与用于创建它相同的命令再次工作。
# Usage: sudo docker run [container ID]
sudo docker run c629b7d70666
记住如何找到容器? 参见上面的列表 ING他们的部分。
停止容器:
要停止容器的进程运行:
# Usage: sudo docker stop [container ID]
sudo docker stop c629b7d70666
保存( 提交婷)一个容器:
如果您想保存您的容器所取得的进展和变化,您可以使用“提交”如上所述,将其保存为图像 。
该命令将您的容器图像 。
记住,使用docker,提交很便宜。 不要犹豫,使用它们来创建图像,以保存您的进度
容器或在需要时回滚(例如像时间上的快照)。
删除/删除容器:
使用容器的ID,你可以删除一个使用rm。
# Usage: sudo docker rm [container ID]
sudo docker rm c629b7d70666
您可以通过阅读他们了解Docker官方文件
记住:事情的进展Docker非常快。 社区的动力是惊人的,许多大公司试图加入提供支持。 不过,该产品仍然没有标为生产准备的,因此不建议与关键任务部署,值得信赖的100% - 但 。 一定要检查版本,当他们出来,继续保持在所有的东西停泊。