├── .gitignore ├── About ├── README.md ├── docker.md ├── release-notes.md └── understanding-docker.md ├── Articles ├── README.md ├── ambassador_pattern_linking.md ├── b2d_volume_resize.md ├── baseimages.md ├── basics.md ├── certificates.md ├── cfengine_process_management.md ├── chef.md ├── configuring.md ├── dockerfile_best-practices.md ├── dsc.md ├── host_integration.md ├── https.md ├── networking.md ├── puppet.md ├── registry_mirror.md ├── runmetrics.md ├── security.md ├── systemd.md └── using_supervisord.md ├── Compose ├── cli.md ├── completion.md ├── dockercompose.md ├── env.md ├── extends.md ├── install │ └── compose.md ├── production.md └── yml.md ├── DockerHub ├── README.md ├── accounts.md ├── builds.md ├── docker-hub.md ├── official_repos.md ├── repos.md └── userguide.md ├── DockerHubEnterprise ├── README.md ├── adminguide.md ├── configuration.md ├── docker-hub-enterprise.md ├── install.md ├── quick-start.md ├── release-notes.md ├── support.md └── userguide.md ├── Examples ├── README.md ├── apt-cacher-ng.md ├── compose_django.md ├── compose_rails.md ├── compose_wordpress.md ├── couchdb_data_volumes.md ├── mongodb.md ├── nodejs_web_app.md ├── postgresql_service.md ├── running_redis_service.md ├── running_riak_service.md └── running_ssh_service.md ├── Images ├── 20150607200346.png ├── 20150607200637.png ├── 20150607201505.png ├── 20150612230144.jpg ├── 20150612230246.jpg ├── 20150612230343.jpg ├── 20150612230445.png ├── 2406048100940639758.png ├── 6630399262629212065.png ├── 6630719220513025143.png ├── add-ssh-public-key.png ├── add_cd.png ├── add_new_controller.png ├── add_volume.png ├── admin-logs.png ├── admin-metrics.png ├── admin-settings-http-unlicensed.png ├── admin-settings-http.png ├── admin-settings-license.png ├── admin-settings-security.png ├── bad_host.png ├── boot_order.png ├── branch-sig.png ├── commits_expected.png ├── console-pull.png ├── console-push.png ├── containers.png ├── contributor-edit.png ├── cool_view.png ├── copy_url.png ├── dashboard.png ├── docker-hub-org-enterprise-license-CSDE-dropdown.png ├── docker-hub-org-enterprise-license.png ├── easy_issue.png ├── existing_issue.png ├── fixes_num.png ├── fork_docker.png ├── git_bash.png ├── good_host.png ├── gordon.jpeg ├── gparted.png ├── gparted2.png ├── groups.png ├── hub.png ├── installing.png ├── irc_after_login.png ├── irc_chat.png ├── irc_connect.png ├── issue_list.png ├── jenkins-plugins.png ├── jenkins-ui.png ├── kitematic.png ├── latest_commits.png ├── linux_docker_host.svg ├── list_example.png ├── locate_branch.png ├── login-github.png ├── mac_docker_host.svg ├── minecraft-create.png ├── minecraft-data-volume.png ├── minecraft-login.png ├── minecraft-map.png ├── minecraft-port.png ├── minecraft-restart.png ├── minecraft-server-address.png ├── newsite_view.png ├── nginx-2048-files.png ├── nginx-2048.png ├── nginx-data-folder.png ├── nginx-data-volume.png ├── nginx-hello-world.png ├── nginx-serving-2048.png ├── org-repo-collaborators.png ├── orgs.png ├── osx-installer.png ├── proposal.png ├── pull_request_made.png ├── register_email.png ├── register_nic.png ├── rethink-container.png ├── rethink-create.png ├── rethink-ports.png ├── rethinkdb-preview.png ├── three_running.png ├── three_terms.png ├── to_from_pr.png ├── win_docker_host.png ├── win_docker_host.svg ├── windows-boot2docker-cmd.png ├── windows-boot2docker-powershell.png ├── windows-boot2docker-start.png ├── windows-installer.png └── windows-mingw.png ├── Installation ├── README.md ├── SUSE.md ├── amazon.md ├── archlinux.md ├── azure.md ├── binaries.md ├── centos.md ├── cruxlinux.md ├── debian.md ├── fedora.md ├── frugalware.md ├── gentoolinux.md ├── google.md ├── joyent.md ├── mac.md ├── oracle.md ├── rackspace.md ├── rhel.md ├── softlayer.md ├── testing-windows-docker-client.md ├── ubuntulinux.md └── windows.md ├── Kitematic ├── faq.md ├── install.md ├── known-issues.md ├── minecraft-server.md ├── nginx-web-server.md ├── rethinkdb-dev-database.md └── userguide.md ├── LICENSE ├── Project ├── README.md ├── advanced-contributing.md ├── coding-style.md ├── create-pr.md ├── doc-style.md ├── find-an-issue.md ├── get-help.md ├── make-a-contribution.md ├── review-pr.md ├── set-up-dev-env.md ├── set-up-git.md ├── software-required-win.md ├── software-required.md ├── test-and-docs.md ├── who-written-for.md └── work-issue.md ├── README.md ├── Reference ├── README.md ├── api │ ├── docker-io_api.md │ ├── docker_io_accounts_api.md │ ├── docker_remote_api.md │ ├── docker_remote_api_v1.16.md │ ├── docker_remote_api_v1.17.md │ ├── docker_remote_api_v1.18.md │ ├── hub_registry_spec.md │ ├── registry_api.md │ ├── registry_api_client_libraries.md │ └── remote_api_client_libraries.md ├── builder.md ├── commandline │ ├── cli-1.md │ ├── cli-2.md │ ├── cli-3.md │ ├── cli-4.md │ └── cli-5.md ├── faq.md ├── registry │ └── README.md └── run.md ├── Registry ├── README.md ├── configuration.md ├── deploying.md ├── notifications.md ├── registry.md ├── spec │ ├── api.md │ ├── auth │ │ └── token.md │ └── json.md └── storagedrivers.md ├── SUMMARY.md ├── Swarm ├── API.md ├── discovery.md └── scheduler │ ├── filter.md │ └── strategy.md └── UserGuide ├── README.md ├── dockercontainers.md ├── dockerhub.md ├── dockerimages.md ├── dockerizing.md ├── dockerlinks.md ├── dockermachine.md ├── dockerrepos.md ├── dockerswarm.md ├── dockervolumes.md ├── labels-custom-metadata.md └── userguide.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Node rules: 2 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 3 | .grunt 4 | 5 | ## Dependency directory 6 | ## Commenting this out is preferred by some people, see 7 | ## https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git 8 | node_modules 9 | 10 | # Book build output 11 | _book 12 | 13 | # eBook build output 14 | *.epub 15 | *.mobi 16 | *.pdf 17 | -------------------------------------------------------------------------------- /About/README.md: -------------------------------------------------------------------------------- 1 | # 引言 2 | 本章节主要对docker的相关概念以及怎样安装做了说明。 3 | ## 章节列表 4 | * [关于Docker](docker.md) 5 | * [版本说明](release-notes.md) 6 | * [了解Docker](understanding-docker.md) 7 | -------------------------------------------------------------------------------- /About/docker.md: -------------------------------------------------------------------------------- 1 | #关于Docker 2 | [返回目录](../SUMMARY.md) [上一篇](README.md) [下一篇](release-notes.md) 3 | ##关于Docker 4 | #### --能在任何环境开发部署运行任何APP 5 | 6 | `Docker`是一个开发者和系统管理员用来开发部署运行APP的平台。`Docker`让你迅速通过各个组件编译APP,并能消除部署代码带来的冲突。`Docker`能让你测试你的代码并迅速运行到生产环境。 7 | 8 | `Docker`包括: 9 | 10 | 1. Docker Engine:轻量级强大的开源container虚拟技术,能创建并容纳你的app的work flow。 11 | 2. Docker Hub:一种分享和管理APP栈的SaaS服务。 12 | 13 | ## 为什么选择Docker? 14 | 15 | #### --迅速交互你的应用 16 | 17 | 1. 我们想让你的环境更加运行的更好。Docker container和work flow能帮助开发者,系统管理员,测试,发布工程师,得到你的代码过后部署到生产环境并让其很好的运行。我们创建一个标准container format,让开发者关心他们在container里的APP,当系统管理员和操作员致力于在你部署的环境下的container能正常运行。分离的工作流水线,简单管理,部署代码。 18 | 2. 我们让创建新的container,复制的APP正常使用,增加差异的可见性,变的容易。 19 | 3. Docker container是轻量级和快速的。Container有次级部署周期,能减少循环开发,测试和部署。 20 | 21 | #### --容易部署和监测 22 | 23 | 1. Docker container几乎运行在任何地方。你可以部署container在桌面设备、物理服务器 、虚拟服务器(VM)、数据中心,包括公有云私有云环境。 24 | 2. 自从Docker运行在任何的平台,它能容易转移你之前部署的APP。你可以任何时候从一个测试环境转移APP到云环境。 25 | 3. Docker的轻量级container也可以轻松监测上上下下东西。你可以快速加载更多的container当你需要的时候,然后轻松关闭他们当你不再需要的时候。 26 | 27 | #### --得到更高利用率和运行负载 28 | 29 | 1. Docer container不需要hypervisor,因此你可以打包更多的APP在你的主机中。这就意味着你得到了超过服务器负载的能力,潜在地减少你花费在设备和证书的开销。 30 | 31 | #### --迅速部署意味着更容易的管理 32 | 33 | 1. 当Docker加速你的工作流,它能让你创造更细微的改变来避免巨大的变化和更新。细微的改变意味着减少风险和更多的更新时间。 34 | 35 | ## 了解Docker指南 36 | 37 | 在“理解Docker阶段”将会帮助你 38 | 1. 了解Docker怎样高效运行。 39 | 2. 理解Docker的结构。 40 | 3. 发现Docker的特点。 41 | 4. 了解Docker和其他虚拟机VMd的区别。 42 | 5. 了解一些应用实例。 43 | 44 | ## 安装指南 45 | 46 | 在“安装阶段”将会让你看到Docker怎样运行在众多的平台上边。 47 | 48 | ## Docker用户指南 49 | 50 | 为了了解Docker更加详细的内容,回答一些关于使用和安装过程的问题,请查看“Docker用户指南”。 51 | 52 | ## 版本说明 53 | 54 | 在当前系列各个版本的概要,现在可以在“版本说明页”中看到。 55 | 56 | ## 认证 57 | 58 | Docker的证书基于Apache License 2.0认证协议。请查看“认证”章节更多的认证说明。 59 | -------------------------------------------------------------------------------- /About/release-notes.md: -------------------------------------------------------------------------------- 1 | 关于Docker的安全方面,主要有以下这几个方面值得我们考虑: 2 | 3 | * 内核固有的的安全性及对namespace和cgroups的支持方面 4 | * docker守护进程自身的安全问题 5 | * 无论是默认情况还是用户定制的情况下,docker容器的配置文件存在漏洞 6 | * 内核“硬化“的安全特性以及他们与容器间交互的方式存在问题 7 | 8 | ## Kernel Namespaces 9 | 10 | docker容器和LXC容器很相似,它们都有类似的安全特性。当你用 docker run命令运行一个容器时,docker就会创建一系列的namespace和control groups。 11 | 12 | namespace提供了一种最为直接和简单的隔离方式:运行在容器中的进程并不会发现有什么区别,受到的影响也几乎较小。 13 | 14 | 每一个容器都有自己的网络:这意味着一个容器在使用sockets和其他容器的接口时,不需要有很高的权限。当然,如果宿主机有相应的设置,容器可以互相通过各自的网络来进行交互--就像与外部的主机交互一样。当你给你的容器指定了公共的端口或使用links,那么容器之间就可以进行ip的访问了。而且容器间互相可以ping通,发送/接收UDP封包,还可以建立TCP的连接,但是如果必要的话还可以稍微做一些限制。以一个网络架构师的观点来看,docker宿主机上的所有容器都被设置在网桥的接口上,这就像物理机通过Ethernet交换器来连接一样。 15 | 16 | 那么代码是如何成熟地提供内核命名空间和私有网络的呢?内核命名空间在 2.6.15 和 2.6.26 的时候被引进。早在2008年7月(5年前,内核2.6.26版本发布),内核的代码在许多生成系统中就可以被运用和审核了。其实命名空间代码的设计和灵感很久之前就有了,实际上namespace(命名空间)是为了重新实现 OPenVZ 这样的功能,只有一这样的方式,namespa技术才可能被主流的内核所合并。OPenVZ最初发布与2005年,所以它的设计实现方式还是比较成熟的。 17 | 18 | ## Control Groups 19 | 20 | Control Groups是实现Linux容器技术的另一个重要组件。它们能实现资源的计算和资源的限制,同时它们也提供了许多非常有用的度量标准,并且确保了每一个容器可以获得相对平等的内存,CPU和磁盘的I/O,更重要的是,一个单独的容器并不能通过耗尽以上资源中的一个来使整个系统瘫痪。 21 | 22 | 因此,尽管它们不起到防止一个容器访问或影响到另一容器的数据和进程的作用,但对于一些拒绝服务的攻击,它们也是必不可少的。对于多租户来说,Control Groups尤为重要,比如一些公共的或私有的PaaS服务,当某些应用执行非法的动作时,Control Groups可以保证一个一致的时间(和性能)。 23 | 24 | Control Groups也已经出来很长一段时间了:它开始于2006年,最初的合并是在 2.6.24内核中。 25 | 26 | 27 | ## Docker Daemon Attack Surface 28 | 29 | 当运行docker容器(和应用)时都需要运行docker守护进程,而这个守护进程的运行则需要一个root权限,所以你应该在这留意一下细节。 30 | 31 | 首先,让受信任的用户操作你的docker守护进程。特别地,docker允许你在docker宿主机和一个guest容器中分享一个目录,并且没有限制你的访问权限。这就意味着在你的主机上运行一个容器时,原来的/host目录将会变成根目录。并且这个容器将毫无限制的改变你的文件系统,这就类似于虚拟系统如何允许文件系统资源共享。没有什么能阻止你和虚拟机分享你的root文件系统(或root设备)。 32 | 33 | 这具有很强的安全性含义:比如,如果从通过API的web服务器提供的docker创建容器时,在检查参数时你应该比平时更加小心,一确保恶意用户不能通过某些某些参数来让docker创建任意的容器。 34 | 35 | 由于这个原因,REST API终端(通过docker CLI 来和docker守护进程进行通信)在docker 0.5.2 时就做了一些修改,而且现在用Unix Socket来替代TCP Socket绑定到127.0.0.1(后者易发生跨站点脚本攻击,如果你碰巧直接在你的本机运行docker,当然虚拟机上除外),然后,你可以使用传统的Unix权限检查来限制control socket的访问。 36 | 37 | 你也可以通过Http来公开REST API,一旦你这样做了,你就要留意上述提到的安全问题,你应该确保它只能通过一个受信任的网络或VPN来访问到,同时受保护的安全通道和客户端SSL证书也可以,你也可以使用 HTTPS 和 一些相关的证书来让它更加的安全。
38 | 对于某些输入操作来说docker 守护进程还是比较脆弱的,比如用docker load从其他磁盘加载镜像文件,或是用docker pull从网上下载镜像,在改善docker社区时这一直是一个焦点,特别是pull操作时存在的安全隐患。虽然load和pull操作有些重叠了,但应注意的是docker load是一种用于备份和恢复的机制,当前并不考虑将它用于加载镜像的一种安全机制。由于从docker 1.3.2版本开始,docker镜像才从基于Linux/Unix平台中的chroot子进程来提取,这是迈向特权分离的重要一步。 39 | 40 | 最终,我们可以预料到:docker守护进程将会限制特权,以授权的方式操作一些安全的子进程,并且每个都有自己的受限制的Linux功能,虚拟网络的配置,文件系统的管理等。也就是说,以后很有可能docker engine本身会在容器中运行。
41 | 最后,如果你在服务器上运行docker,建议服务器去掉其他服务,专门运行docker服务。当然,你也可以保留一些你喜欢的管理工具如SSH服务,进程管理工具(如:NRPE,collectd)等等。 42 | 43 | ## Linux Kernel Capabilities 44 | 45 | 在默认情况下,docker启动的容器的功能会有一些限制。这意味着什么呢? 46 | 47 | 这是一个root或非root 二分法粒度管理的访问控制系统。比如web服务这样的进程只需要绑定到一个低于1024的端口,而不需要root权限,它们只需要被授权net_bind_service功能就可以了。当然还有其他许多功能,但几乎所有的功能都需要root权限。
48 | 这对容器的安全性来说意味着很多,让我们来看看: 49 | 50 | 通常你的服务器(物理机或虚拟机)都需要以root权限运行一堆进程,包括SSH, cron, syslogd,硬件管理工具(如加载模块),网络配置工具(如DHCP, WPA, or VPNs)等等,而容器却不同,几乎所有的任务都是由围绕容器的基础设施来处理的: 51 | 52 | * SSH的访问通常由docker主机上的一个单独的服务器来管理 53 | * cron,必要时可以作为用户进程来运行,并利用它的调度服务来专门的应用于某个应用程序,而不是作为一个平台级的设施。 54 | * 日志服务也通常交给docker来管理,或者是第三方的服务,比如Loggly 或 Splunk 55 | * 硬件的管理是无关紧要的,这意味着你不必运行udevd 或在容器中运行类似于守护进程的进程来管理硬件
56 | * 网络的管理是在容器的外面,这就是说容器中没有必要执行ifconfig,route 或 ip 命令(除了一个容器被专门设置为路由器或防火墙) 57 | 58 | 在大多数情况下,容器根本不需要“真实的”root权限,因此,容器拥有的功能是被削减过的,就是说容器中的root权限小于真实的root权限,例如以下几个方面: 59 | 60 | * 取消所有的“mount”操作 61 | * 取消了访问 raw sockets的权限(防止数据包的欺骗) 62 | * 取消了一些文件系统的权限,比如创建一个新的设备节点,改变文件的所有者,或是改变一些属性(包括不可改变的标志) 63 | * 取消了模块的加载 64 | * 还有其他一些方面 65 | 66 | 这意味着即使入侵者在容器中将权限升级到root权限,他也很难对主机造成巨大的伤害。 67 | 68 | 然而这些都不会影响常规的web apps,一些恶意的用户会发现他们容器中可以支配的技术大大的缩水了!在默认的情况下,docker舍弃了大多数功能除了它所需要的,它会将需要的例如白名单,不需要的例如黑名单,Linux manpages你可以在这篇文章中找到docker拥有的所有功能。 69 | 70 | 在运行docker 容器时首要的风险是容器的默认功能和挂载可能会提供不完全的隔离,无论是独立使用或是与内核漏洞组合使用。 71 | 72 | 同时,docker还提供了添加和删除的功能,并且允许使用非默认的配置文件。这在删除docker的某些功能时可能会让docker更安全,或者在添加某些功能时导致docker的安全性降低。最佳的做法是用户可以保留运行他们的应用必要的功能,删除其他的功能。 73 | 74 | ## Other Kernel Security Features 75 | 76 | Capabilities 是现代Linux内核提供的许多安全功能之一, 77 | -------------------------------------------------------------------------------- /Articles/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Articles/README.md -------------------------------------------------------------------------------- /Articles/b2d_volume_resize.md: -------------------------------------------------------------------------------- 1 | # 出现“no space left on device” 错误怎么办? 2 | 3 | 如果你使用Boot2Docker创建了许多镜像,或者你使用的镜像非常庞大,你pull时可能会提示“no space left on device”错误。解决办法就是增加一个数据卷挂载,重新规定工具的磁盘部分的大小。 4 | 5 | 我们推荐[GParted](http://gparted.sourceforge.net/download.php/index.php)。这个工具将作为一个可启动的ISO,它是免费的而且在VirtualBox中工作良好。 6 | 7 | 1. 停止Boot2Docker 8 | 9 | 问题的建议就是先停止Boot2Docker VM,通过命令行: 10 | 11 | $ boot2docker stop 12 | 13 | 2. 克隆VMDK镜像到VDI镜像 14 | 15 | Boot2Docker 挂载的是VMDK镜像,不可能重新规定大小。我们将替换为VDI镜像,创建VDI镜像并克隆VMDK镜像到VDI镜像中。 16 | 17 | 使用VirtualBox命令行工具,克隆VMDK镜像到VDI镜像中: 18 | 19 | $ vboxmanage clonehd /full/path/to/boot2docker-hd.vmdk /full/path/to/.vdi --format VDI --variant Standard 20 | 21 | 3. 重新修改VDI镜像大小 22 | 23 | 选择你需要的合适大小。如果你将要挂载很多容器或者你的容器非常的大或者更大: 24 | 25 | $ vboxmanage modifyhd /full/path/to/.vdi --resize 26 | 27 | 4. 下载磁盘分割工具ISO 28 | 29 | 为了重新修改数据卷的大小,我们将使用[GParted](http://gparted.sourceforge.net/download.php/index.php)。一旦你下载完这个工具,添加ISO到Boot2Docker VM IDE bus。你可能需要创建这个bus以便添加这个ISO。 30 | 31 | > 说明:你选择分割工具是重要的,ISO是一种可以挂在并启动的有效工具。 32 | 33 | 34 | ![](../Images/add_new_controller.png) 35 | ![](../Images/add_cd.png) 36 | 37 | 5. 添加一个新的VDI镜像 38 | 39 | 在VirtualBox里的Boot2Docker镜像上的设置,移除VMDK镜像从SATA控制,添加VDI镜像。 40 | 41 | ![](../Images/add_volume.png) 42 | 43 | 6. 确认启动顺序 44 | 45 | 在Boot2Docker VM的系统设置中,确保CD/DVD是第一个启动项。 46 | 47 | ![](../Images/boot_order.png) 48 | 49 | 7. 启动磁盘分割ISO 50 | 51 | 手动启动Boot2Docker VM和磁盘分割ISO。使用GParted,选择GParted Live (default settings) 参数。选择默认的键盘,语言和XWindows设置,GParted 工具将启动和显示你创建的VDI数据卷。在VDI上右键选择 **Resize/Move** 。 52 | 53 | ![](../Images/gparted.png) 54 | 55 | 拖拽slider显示数据卷到最大大小,点击**Resize/Move**,然后**应用**。 56 | 57 | ![](../Images/gparted2.png) 58 | 59 | 退出GParted然后关闭掉VM。移除GParted ISO从IDE控制器。 60 | 61 | 8. 启动Boot2Docker VM 62 | 63 | 手动启动Boot2Docker。VM自动显示日志,但是如果它没有,这个认证证书是在docker/tcuser下的。使用df -h命令,确认你的修改生效了。 -------------------------------------------------------------------------------- /Articles/baseimages.md: -------------------------------------------------------------------------------- 1 | # 创建一个基本的镜像 # 2 | 3 | 如果你想创建你自己的基本镜像,那好! 4 | 5 | 指定程序依赖linux分配你想要的包。我们已经有一些示例了,你被鼓励提交要求到贡献最新的包。 6 | 7 | ## 创建一个全镜像使用tar ## 8 | 9 | 在大众情况下,你想启动一个正在工作的机器,运行发布的基于你基本镜像的包,尽管不被要求某些工具(例如Debian's Debootstrap),你也可以可以构建Ubuntu镜像。 10 | 11 | 它就像创建一个Ubuntu基本镜像: 12 | 13 | $ sudo debootstrap raring raring >/dev/null 14 | 15 | $ sudo tar -C raring -c .| sudo docker import- raring 16 | 17 | a29c15f1bf7a 18 | 19 | $ sudo docker run raring cat /etc/lsb-release 20 | 21 | DISTRIB_ID=Ubuntu 22 | 23 | DISTRIB_RELEASE=13.04 24 | 25 | DISTRIB_CODENAME=raring 26 | 27 | DISTRIB_DESCRIPTION="Ubuntu 13.04" 28 | 29 | 有更多示例脚本创建基本镜像,在Docker GitHub Repo: 30 | 31 | * BusyBox 32 | 33 | * CentOS / Scientific Linux CERN (SLC) on Debian/Ubuntu or on CentOS/RHEL/SLC/etc. 34 | 35 | * Debian / Ubuntu 36 | 37 | ## 创建一个简单基本镜像使用scratch ## 38 | 39 | 有一个指定库在Docker中叫做scratch,这个库可以是哟个空的tar文件创建 40 | 41 | $ tar cv --files-from /dev/null | docker import- scratch 42 | 43 | 你可以docker pull。你可以稍后使用那个镜像,构建你的新的最小化的容器FROM: 44 | 45 | FROM scratch 46 | 47 | COPY true-asm/true 48 | 49 | CMD ["/true"] 50 | 51 | Dockerfile 来自一个额外的最小化镜像 tianon/true. 52 | 53 | ## 更多资源 ## 54 | 55 | 有更多的资源提供给你写你的Dockerfile。 56 | 57 | * There's a complete guide to all the instructions available for use in a Dockerfile in the reference section. 58 | 59 | * To help you write a clear, readable, maintainable Dockerfile, we've also written a Dockerfile Best Practices guide. 60 | 61 | * If you're working on an Official Repo, be sure to check out the Official Repo Guidelines. -------------------------------------------------------------------------------- /Articles/certificates.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Articles/certificates.md -------------------------------------------------------------------------------- /Articles/cfengine_process_management.md: -------------------------------------------------------------------------------- 1 | # 使用CFEngine进程管理工具 2 | 3 | 通过进程管理工具创建docker 容器。 4 | Docker监控在每个运行容器里的一个进程,并且每个容器存亡都依赖于这个进程。通过介绍Docker容器中的CFEngine,我们可以缓解我们日益担心的问题: 5 | 6 | 1. 在一个容器里,能轻松开启多进程,所有这些都能自动管理,通过普通的docker run命令。 7 | 2. 如果管理的进程消亡或者异常中断,CFEngine 将随后一分钟后重新启动进程。 8 | 3. 只要CFEngine调度daemon存活着容器它自身也就存活着。拥有CFEngine,我们可能较少对容器提供的服务的正常运行时间的担心与依赖。 9 | 10 | ## 工作原理 11 | 12 | CFEngine,在Dockerfile中被申明并被安装。这样就会将CFEngine构建进Docker镜像。 13 | 14 | Dockerfile的ENTRYPOINT采用任意数量的命令作为参数。当我们运行Docker容器,这些写入CFEngine策略的参数和CFEngine能确保运行在容器的进程安全。 15 | 16 | CFEngine自动控制进程列表(通过提供ENTRYPOINT命令的basename ),如果没有查找到basename,运行启动进程的命令。例如,如果我们启动容器通过docker run "/path/to/my/application parameters",CFEngine 将查看名称为application的进程,然后运行命令。如果一个对于application的入口没有在进程列表中找到,CFEngine才会再次执行/path/to/my/application parameters命令来启动application。对进程的检查每几分钟进行一次。 17 | 18 | 注意,启动你的应用的命令 生存在带有basename命令的进程中是重要的。如果需要,通过细微的调整CFEngine策略,会变得更加的灵活。 19 | 20 | ## 用法 21 | 22 | 本例子假设你安装了Docker并且可以正常工作。我们在一个简单的容器中,将安装并管理apache2和sshd。 23 | 24 | 我们通过三步完成这个实例: 25 | 26 | 1. 在容器中安装CFEngine。 27 | 2. 复制`CFEngine Docker进程管理策略`到容器化的CFEngine安装过程。 28 | 3. 启动你的应用进程,作为docker run命令的一部分。 29 | 30 | ### 构建镜像 31 | 32 | 前两部可以通过Dockerfile一步完成,如下: 33 | 34 | FROM ubuntu:14.04 35 | MAINTAINER Eystein Måløy Stenberg 36 | 37 | RUN apt-get update && apt-get install -y wget lsb-release unzip ca-certificates 38 | 39 | # install latest CFEngine 40 | RUN wget -qO- http://cfengine.com/pub/gpg.key | apt-key add - 41 | RUN echo "deb http://cfengine.com/pub/apt $(lsb_release -cs) main" > /etc/apt/sources.list.d/cfengine-community.list 42 | RUN apt-get update && apt-get install -y cfengine-community 43 | 44 | # install cfe-docker process management policy 45 | RUN wget https://github.com/estenberg/cfe-docker/archive/master.zip -P /tmp/ && unzip /tmp/master.zip -d /tmp/ 46 | RUN cp /tmp/cfe-docker-master/cfengine/bin/* /var/cfengine/bin/ 47 | RUN cp /tmp/cfe-docker-master/cfengine/inputs/* /var/cfengine/inputs/ 48 | RUN rm -rf /tmp/cfe-docker-master /tmp/master.zip 49 | 50 | # apache2 and openssh are just for testing purposes, install your own apps here 51 | RUN apt-get update && apt-get install -y openssh-server apache2 52 | RUN mkdir -p /var/run/sshd 53 | RUN echo "root:password" | chpasswd # need a password for ssh 54 | 55 | ENTRYPOINT ["/var/cfengine/bin/docker_processes_run.sh"] 56 | 57 | 通过保存Dockerfile到工作目录下,你可以构建你的镜像,通过docker build -t managed_image。 58 | 59 | ### 测试容器 60 | 61 | 启动带有运行和管理apache2和sshd的容器,映射端口到我们的SSH 实例: 62 | 63 | $ sudo docker run -p 127.0.0.1:222:22 -d managed_image "/usr/sbin/sshd" "/etc/init.d/apache2 start" 64 | 65 | 66 | 我们现在可以清晰地看到cfe-docker集成的好处:它允许通过docker run命令同时启动多个进程。 67 | 68 | 我们现在可以查看我们新容器的日志,可以看到apache2和sshd同时运行着。我们设置的root密码(Dockerfile中的"password"),可以进入的ssh中查看日志。 69 | 70 | ssh -p222 root@127.0.0.1 71 | 72 | ps -ef 73 | UID PID PPID C STIME TTY TIME CMD 74 | root 1 0 0 07:48 ? 00:00:00 /bin/bash /var/cfengine/bin/docker_processes_run.sh /usr/sbin/sshd /etc/init.d/apache2 start 75 | root 18 1 0 07:48 ? 00:00:00 /var/cfengine/bin/cf-execd -F 76 | root 20 1 0 07:48 ? 00:00:00 /usr/sbin/sshd 77 | root 32 1 0 07:48 ? 00:00:00 /usr/sbin/apache2 -k start 78 | www-data 34 32 0 07:48 ? 00:00:00 /usr/sbin/apache2 -k start 79 | www-data 35 32 0 07:48 ? 00:00:00 /usr/sbin/apache2 -k start 80 | www-data 36 32 0 07:48 ? 00:00:00 /usr/sbin/apache2 -k start 81 | root 93 20 0 07:48 ? 00:00:00 sshd: root@pts/0 82 | root 105 93 0 07:48 pts/0 00:00:00 -bash 83 | root 112 105 0 07:49 pts/0 00:00:00 ps -ef 84 | 85 | 如果我们停止apache2,它将被CFEngine数分钟内重新启动。 86 | 87 | service apache2 status 88 | Apache2 is running (pid 32). 89 | service apache2 stop 90 | * Stopping web server apache2 ... waiting [ OK ] 91 | service apache2 status 92 | Apache2 is NOT running. 93 | # ... wait up to 1 minute... 94 | service apache2 status 95 | Apache2 is running (pid 173). 96 | 97 | ## 适应你的应用 98 | 99 | 为了确保你的应用能相同方式的获得管理,这里有如下两件事情需要你做: 100 | 101 | 1. Dockerfile中,安装你的应用替换掉apache2和sshd。 102 | 2. 当你启动容器时,docker run命令指定命令行参数到你的应用中而不是apache2和sshd。 -------------------------------------------------------------------------------- /Articles/chef.md: -------------------------------------------------------------------------------- 1 | # 使用Chef 2 | 3 | > 说明:请注意这是社区提供的的安装方式。官方的方式请阅读[Ubuntu环境下安装Docker](../Installation/ubuntulinux.md)。这个版本可能已经过时了。 4 | 5 | ## 先决条件 6 | 7 | 你需要了解[Chef](http://www.getchef.com/)的安装说明。cookbook支持一个系列的操作系统的安装。 8 | 9 | ## 安装 10 | 11 | 在[Chef Community Site](http://community.opscode.com/cookbooks/docker)的cookbook长期有效,可以使用你喜欢cookbook的依赖管理器来安装。 12 | 13 | 其源代码可以在[Github](https://github.com/bflad/chef-docker)上可以看到。 14 | 15 | ## 用法 16 | 17 | cookbook 提供安装Docker的recipes,配置并初始化Docker,管理镜像和容器等资源。它支持所有docker的功能。 18 | 19 | ### 安装 20 | 21 | include_recipe 'docker' 22 | 23 | ### 镜像 24 | 25 | 接下来的步骤就是pull一个镜像。就想这样: 26 | 27 | docker_image 'samalba/docker-registry' 28 | 29 | 这等价于运行: 30 | 31 | $ sudo docker pull samalba/docker-registry 32 | 33 | 有属性可以有效的控制cookbook的下载时间(默认情况下是5分钟)。 34 | 35 | 为了移除你不在需要的镜像: 36 | 37 | docker_image 'samalba/docker-registry' do 38 | action :remove 39 | end 40 | 41 | ### 容器 42 | 43 | 现在,你有一个镜像,通过该镜像你可以通过Docker在一个容器中运行命令。 44 | 45 | docker_container 'samalba/docker-registry' do 46 | detach true 47 | port '5000:5000' 48 | env 'SETTINGS_FLAVOR=local' 49 | volume '/mnt/docker:/docker-storage' 50 | end 51 | 52 | 这等价于运行如下命令: 53 | 54 | $ sudo docker run --detach=true --publish='5000:5000' --env='SETTINGS_FLAVOR=local' --volume='/mnt/docker:/docker-storage' samalba/docker-registry 55 | 56 | 这里的资源接受一个单独的字符串或者数组(当docker的flags有多个的时候)。 57 | 58 | 59 | -------------------------------------------------------------------------------- /Articles/configuring.md: -------------------------------------------------------------------------------- 1 | # 配置Docker(在各式各样的分布环境下) 2 | 3 | 在成功安装Docker daemon在一个分布式环境下,它运行时都是默认的参数。通常它被要求修改默认的参数以符合个人要求。 4 | 5 | Docker可以通过flag到daemon直接配置,通常那是不可靠的。一个进程管理工具(像 SysVinit, Upstart, systemd等)是可靠的启动并运行daemon的方式。 6 | 7 | 某些常用的参数如下: 8 | 9 | * -D : 启用debug模式 10 | 11 | * -H : Daemon socket(s)链接方式 12 | 13 | * --tls : 启用或者取消 TLS 认证方式 14 | 15 | 这些flag完成功能可以在[命令行参考](../Reference/commandline/cli.md)章节可以了解到。 16 | 17 | ## Ubuntu 18 | 19 | 成功[在Ubuntu环境下安装Docker](Installation/ubuntulinux.md),你检查选择运行状态。 20 | 21 | $ sudo status docker 22 | docker start/running, process 989 23 | 24 | 你可以启动/停止/重启 docker,使用: 25 | 26 | $ sudo start docker 27 | 28 | $ sudo stop docker 29 | 30 | $ sudo restart docker 31 | 32 | ### 配置Docker 33 | 34 | Docker可以编辑配置文件`/etc/default/docker`来编辑参数。如果这个文件不存在,他需要被创建。这个文件包含了一个变量叫做`DOCKER_OPTS`。所有的配置参数需要放置在这个变量上。例如: 35 | 36 | DOCKER_OPTS=" --dns 8.8.8.8 -D --tls=false -H tcp://0.0.0.0:2375 " 37 | 38 | 如上的参数干了这些事情: 39 | 40 | 1. 为所有容器设置dns 41 | 42 | 2. 启用Debug模式 43 | 44 | 3. 设置 tls 为 false 45 | 46 | 4. 确保daemon链接到tcp://0.0.0.0:2375 47 | 48 | 随后保存文件,重启docker使用sudo restart docker。核实docker daemon是否启动运行,通过命令`ps aux | grep docker | grep -v grep`。 49 | -------------------------------------------------------------------------------- /Articles/dockerfile_best-practices.md: -------------------------------------------------------------------------------- 1 | #Dockerfile最佳实践 2 | ##综述 3 | Docker可以建立图像自动通过阅读从dockerfile指令,一个文本文件,包含了所有的命令,在秩序,需要建立一个给定的图像。dockerfiles坚持一个特定的格式,使用一组特定的指令。你可以学习基本的dockerfile参考页。如果你是新来的写作dockerfiles,你应该从这里开始。 4 | 本文档介绍的最佳实践和方法推荐的docker,公司和创建易于使用的docker社区,有效dockerfiles。我们强烈建议你遵循这些建议(事实上,如果你创造了官方形象,你必须坚持这些做法)。 5 | 你可以看到许多这样的做法和建议在行动在buildpack DEPS dockerfile。 6 | 注:更详细的解释,任何dockerfile命令提到这里,参观dockerfile参考页。 7 | ##dockerfile参考页总体指南 8 | ###容器应该是暂时的 9 | 你的dockerfile定义应尽可能短暂的形象产生的容器。“短暂的”,我们的意思是,它可以停止和破坏,并建立一个新的建立和到位的绝对最低限度的设置和配置。 10 | ###使用dockerignore文件 11 | 更快的上传和效率建立在docker窗,你应该使用一个.dockerignore文件中排除的文件或目录的建立背景和最终图像。例如,unless.git通过构建过程或脚本需要,你应该把它.dockerignore,这可以节省许多兆缩短上传时间。 12 | ###避免安装不必要的软件包 13 | 为了减少复杂性、依赖、文件大小和搭建时间,你应该避免安装额外的或不必要的包只是因为他们可能是“不错”例如,你也不需要包括数据库图像中的文本编辑器。 14 | -------------------------------------------------------------------------------- /Articles/dsc.md: -------------------------------------------------------------------------------- 1 | # 使用PowerShell DSC 2 | 3 | Windows PowerShell Desired State Configuration(DSC)是一个配置管理工具,这个工具依赖于已经存在的Windows PowerShell的功能。DSC使用一个陈述语法来定义一个规定。在规定中,一个目标应该被配置。更多关于PowerShell DSC的信息可以在http://technet.microsoft.com/en-us/library/dn249912.aspx上了解到。 4 | 5 | ## 先决条件 6 | 7 | 为了使用这个教程,你需要一个Windows主机安装有 PowerShell v4.0或者更新。 8 | 9 | 安装好的 DSC配置脚本也是用官方的PPA,因此仅仅一个Ubuntu目标被支持。Ubuntu目标机也需要OMI Server和PowerShell DSC for Linux提供安装。更多的信息,请了解 https://github.com/MSFTOSSMgmt/WPSDSCLinux。其源代码仓库列举在下边,也包含PowerShell DSC for Linux的安装和初始化脚本,也提供更多的详细的安装信息。 10 | 11 | ## 安装 12 | 13 | DSC配置示例源码在如下的仓库是有效的:https://github.com/anweiss/DockerClientDSC。它可以被clone下来: 14 | 15 | $ git clone https://github.com/anweiss/DockerClientDSC.git 16 | 17 | ## 用法 18 | 19 | DSC配置,利用一个系列脚本来确定,是否指定的Docker组件来配置target节点。源代码仓库中也包括一个脚本RunDockerClientConfig.ps1,可以被使用来建立必要的CIM 并执行Set-DscConfiguration命令(cmdlet)。 20 | 21 | 更多信息,请了解https://github.com/anweiss/DockerClientDSC。 22 | 23 | ### 安装Docker 24 | 25 | Docker的安装配置等价于运行: 26 | apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys\ 27 | 36A1D7869245C8950F966E92D8576A8BA88D21E9 28 | sh -c "echo deb https://get.docker.com/ubuntu docker main\ 29 | > /etc/apt/sources.list.d/docker.list" 30 | apt-get update 31 | apt-get install lxc-docker 32 | 33 | 确保你当前的工作目录是被设置到DockerClientDSC源上的,加载DockerClient 配置项到当前PowerShell sessin中。 34 | 35 | . .\DockerClient.ps1 36 | 37 | 生成要求的DSC配置项 .mof文件,在target节点上。 38 | 39 | DockerClient -Hostname "myhost" 40 | 41 | 一个简单的DSC配置数据文件也会被包括进来,也可能被修改或者在conjunction 中使用,通过替换掉Hostname 参数。 42 | 43 | DockerClient -ConfigurationData .\DockerConfigData.psd1 44 | 45 | 启动配置应用进程在target节点上。 46 | 47 | .\RunDockerClientConfig.ps1 -Hostname "myhost" 48 | 49 | RunDockerClientConfig.ps1脚本同样会解析DSC 配置数据文件,让后再多个节点上执行配置项。 50 | 51 | .\RunDockerClientConfig.ps1 -ConfigurationData .\DockerConfigData.psd1 52 | 53 | ### 镜像 54 | 55 | 镜像配置等价于运行docker pull [image] 或者 docker rmi -f [IMAGE]。 56 | 57 | 使用相同的步骤,执行带有Image参数的DockerClient命令来应用配置。 58 | 59 | DockerClient -Hostname "myhost" -Image "node" 60 | .\RunDockerClientConfig.ps1 -Hostname "myhost" 61 | 62 | 你也可以配置host来pull多个镜像。 63 | 64 | DockerClient -Hostname "myhost" -Image "node","mongo" 65 | .\RunDockerClientConfig.ps1 -Hostname "myhost" 66 | 67 | 为了移除镜像,请使用如下的hashtable: 68 | 69 | DockerClient -Hostname "myhost" -Image @{Name="node"; Remove=$true} 70 | .\RunDockerClientConfig.ps1 -Hostname $hostname 71 | 72 | 73 | ### 容器 74 | 75 | 容器配置等价于运行: 76 | 77 | docker run -d --name="[containername]" -p '[port]' -e '[env]' --link '[link]'\ 78 | '[image]' '[command]' 79 | 80 | 或者 81 | 82 | docker rm -f [containername] 83 | 84 | 85 | 86 | 为了创建或移除容器,你可以使用Container参数带一个或者多个hashtable。这些hashtable传递如下这些参数: 87 | 88 | 89 | - Name (required) 90 | - Image (required unless Remove property is set to $true) 91 | - Port 92 | - Env 93 | - Link 94 | - Command 95 | - Remove 96 | 97 | 98 | 例如,创建一个hashtable,通过设置你的容器: 99 | 100 | 101 | $webContainer = @{Name="web"; Image="anweiss/docker-platynem"; Port="80:80"} 102 | 103 | 104 | 然后,使用相同的步骤定义,执行带有-Image和-Container参数的DockerClient: 105 | 106 | DockerClient -Hostname "myhost" -Image node -Container $webContainer 107 | .\RunDockerClientConfig.ps1 -Hostname "myhost" 108 | 109 | 存在的容器也可以通过如下的方式移除: 110 | 111 | $containerToRemove = @{Name="web"; Remove=$true} 112 | DockerClient -Hostname "myhost" -Container $containerToRemove 113 | .\RunDockerClientConfig.ps1 -Hostname "myhost" 114 | 115 | 这是一个hashtable,带有创建以容器的参数: 116 | 117 | $containerProps = @{Name="web"; Image="node:latest"; Port="80:80"; ` 118 | Env="PORT=80"; Link="db:db"; Command="grunt"} 119 | 120 | -------------------------------------------------------------------------------- /Articles/host_integration.md: -------------------------------------------------------------------------------- 1 | # 自动启动容器 # 2 | 3 | Docker 1.2过后,重启策略就加入到Docker机制中了,实现当他们停止时重新启动。当 Docker daemon被重新启动时,重启策略将会被使用;尤其典型的是当加载系统时,使用重启策略。重启策略将安全保证链接的容器按照正确的顺序启动。 4 | 5 | 如果重启策略不能适应你的需要(例如,你有 非Docker 进程依赖于docker容器),你可以使用一个进程管理工具,例如upstart、systemd或者supervisor代替。 6 | 7 | ## 使用进程管理工具 ## 8 | 9 | Docker不设置任何默认的重启策略,但是知道他们将会和许多进程管理冲突。因此,不设置重启策略,如果你使用了一个进程管理工具。 10 | 11 | 说明:Docker 1.2早前的版本,重启Docker容器不得不明确的禁止。阅读相关之前版本的文章以了解更加详细的描述怎么去做。 12 | 13 | 当你结束了设置你的镜像,高兴的运行的镜像时,你可能附加一个进程管理工具去管理它。当你运行docker start -a,docker将自动附加运行在容器,如果需要或者直接运行它,以此来传送信号;因此进程管理工具可以发现当容器停止时正确重启它。 14 | 15 | 这里有些systemd、upstart实例脚本以此来集合到Docker。 16 | 17 | ## 实例 ## 18 | 19 | 如下的实例现实两个熟悉的进程管理工具(upstart和systemd)的配置文件。在这些例子中,我们将呈现我们已经创建好的一个容器Redis,使用`run --name=redis_server`来运行容器。这些文件定义了一个新的服务,在docker daemon服务重启后被执行重启。 20 | 21 | ### upstart ### 22 | 23 | description "Redis container" 24 | 25 | author "Me" 26 | 27 | start on filesystem and started docker 28 | 29 | stop on runlevel [!2345] 30 | 31 | respawn 32 | 33 | script 34 | 35 | /usr/bin/docker start -a redis_server 36 | 37 | end script 38 | 39 | ### systemd ### 40 | 41 | [Unit] 42 | Description=Redis container 43 | Requires=docker.service 44 | After=docker.service 45 | 46 | [Service] 47 | Restart=always 48 | ExecStart=/usr/bin/docker start -a redis_server 49 | ExecStop=/usr/bin/docker stop -t 2 redis_server 50 | 51 | [Install] 52 | WantedBy=local.target 53 | 54 | 如果你需要传递参数到redis容器,例如--env,你将需要使用docker run然后docker start。这将创建一个新的容器,每当服务被重启时;当服务停止时被停止并被移除,当服务被停止时。 55 | 56 | [Service] 57 | ... 58 | ExecStart=/usr/bin/docker run --env foo=bar --name redis_server redis 59 | ExecStop=/usr/bin/docker stop -t 2 redis_server ; /usr/bin/docker rm -f redis_server 60 | ... -------------------------------------------------------------------------------- /Articles/puppet.md: -------------------------------------------------------------------------------- 1 | # 运用Puppet 2 | 3 | > 说明:请注意这是社区提供的的安装方式。官方的方式请阅读[Ubuntu环境下安装Docker](../Installation/ubuntulinux.md)。这个版本可能已经过时了。 4 | 5 | 6 | ## 先决条件 7 | 8 | 请访问[Puppet Labs](https://puppetlabs.com/)了解Puppet的安装。 9 | 10 | 当前使用的官方PPA的module仅仅在Ubuntu中使用。 11 | 12 | ## 安装 13 | 14 | 在[Puppet Forge](https://forge.puppetlabs.com/garethr/docker/)上,module是有效的,可以构建的module工具来安装。 15 | 16 | $ puppet module install garethr/docker 17 | 18 | 19 | 这可以在[Github](https://github.com/garethr/garethr-docker)上可以找到,如果你希望通过源码安装。 20 | 21 | ## 用法 22 | 23 | module提供了一个puppet类来安装docker,两个定义好的类型来管理镜像和容器。 24 | 25 | 26 | ### 安装 27 | 28 | include 'docker' 29 | 30 | ### 镜像 31 | 32 | 接下来可以来安装一个Docker镜像。为了这些,我们有一个定义好的类型,具体使用方法如下: 33 | 34 | docker::image { 'ubuntu': } 35 | 36 | 这就等价于执行: 37 | 38 | $ sudo docker pull ubuntu 39 | 40 | 注意,如果一个镜像名称早已不存在,它仅仅被下载。这将下载一个大的二进制,首次可能会花费一段时间。为此,这个定义大概5分钟的超时执行类型。注意,你可以移除镜像不再需要时: 41 | 42 | docker::image { 'ubuntu': 43 | ensure => 'absent', 44 | } 45 | 46 | ### 容器 47 | 48 | 现在你有一个镜像,借此可以运行命令通过Docker管理的容器。 49 | 50 | docker::run { 'helloworld': 51 | image => 'ubuntu', 52 | command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"', 53 | } 54 | 55 | 这等价于运行如下命令: 56 | 57 | $ sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 58 | 59 | Run也可以包含多个参数: 60 | 61 | docker::run { 'helloworld': 62 | image => 'ubuntu', 63 | command => '/bin/sh -c "while true; do echo hello world; sleep 1; done"', 64 | ports => ['4444', '4555'], 65 | volumes => ['/var/lib/couchdb', '/var/log'], 66 | volumes_from => '6446ea52fbc9', 67 | memory_limit => 10485760, # bytes 68 | username => 'example', 69 | hostname => 'example.com', 70 | env => ['FOO=BAR', 'FOO2=BAR2'], 71 | dns => ['8.8.8.8', '8.8.4.4'], 72 | } 73 | 74 | > 说明:ports,env,dns和volumes属性被设置时不是一个单单的字符串,而是一个数组。 75 | -------------------------------------------------------------------------------- /Articles/registry_mirror.md: -------------------------------------------------------------------------------- 1 | #运行本地私有库# 2 | 3 | ## 为什么要运行本地私有库呢? ## 4 | 5 | 如果你有多个Docker实例运行在你的环境中(多台物理机或者虚拟机,或者所有能运行docker daemon的机器),每次其中一台请求了一个没有的镜像将链接网络从公共Docker库去下载。为了运行本地镜像,你可以保留很多镜像在你的本地网络中。 6 | 7 | ## 怎样实现呐? ## 8 | 9 | 首先,你得要求你本地能有镜像,它是从公共docker库pull下来的,保存在本地。随后,本地镜像库提供镜像服务。 10 | 11 | 怎样设置本地镜像库呐? 12 | 13 | 这里有两步设置和使用本地镜像库。 14 | 15 | 1. 第一步:配置你的docker daemon来使用本地镜像库 16 | 17 | 你讲需要通过--registry-mirror参数在你启动docker daemon时。 18 | 19 | sudo docker --registry-mirror=http:// -d 20 | 21 | 例如:如果你的镜像放在http://192.168.91.134:5000的,你将运行: 22 | 23 | sudo docker --registry-mirror=http://192.168.91.134:5000 -d 24 | 25 | > 说明:依赖你的本地主机设置,你可以添加--registry-mirror参数到DOCKER_OPTS变量到/etc/defaults/docker。 26 | 27 | 2. 第二步:运行本地镜像库 28 | 29 | 你将需要启动本地镜像服务。registry image提供这个功能。例如,鱼腥一个本地镜像库服务端口为5000,镜像内容为registry-1.docker.io。 30 | 31 | sudo docker run -d -p 5000:5000 \ 32 | 33 | -e STANDALONE=false \ 34 | 35 | -e MIRROR_SOURCE=https://registry-1.docker.io \ 36 | 37 | -e STORAGE_PATH=/tmp/registry \ 38 | 39 | -e MIRROR_SOURCE_INDEX=https://index.docker.io \ 40 | 41 | -v /tmp/registry:/tmp/registry registry 42 | 43 | 如果运行成功,访问http://IP:5000 将会打印相关信息,这里是: 44 | 45 | 46 | 47 | ## 尝试一下 ## 48 | 49 | 随着你的镜像的运行,pull一个镜像你不再pull之前的了。 50 | 51 | $ time sudo docker pull node:latest 52 | 53 | Pulling repository node 54 | 55 | [...] 56 | 57 | real 1m14.078s 58 | 59 | user 0m0.176s 60 | 61 | sys 0m0.120s 62 | 63 | 现在,移除镜像从你的本地机器中。 64 | 65 | $ sudo docker rmi node:latest 66 | 67 | 最后,再次pull镜像: 68 | 69 | $ time sudo docker pull node:latest 70 | 71 | Pulling repository node[...] 72 | 73 | real 0m51.376s 74 | 75 | user 0m0.120s 76 | 77 | sys 0m0.116s 78 | 79 | 80 | 81 | 第二次,本地镜像已经从本地开始提供服务了,避免了绕到网络去获取镜像。 -------------------------------------------------------------------------------- /Articles/systemd.md: -------------------------------------------------------------------------------- 1 | # 使用Systemd配置和控制Docker 2 | 3 | 许多Linux资源管理程序(Linux distributions)使用systemd启动Docker daemon。这篇文章介绍一些怎样自定义Docker设置。 4 | 5 | ## 启动Docker daemon 6 | 7 | 一旦Docker安装,你将需要启动Docker daemon。 8 | 9 | $ sudo systemctl start docker 10 | 11 | # or on older distributions, you may need to use 12 | 13 | $ sudo service docker start 14 | 15 | 如果你想在boot时就启动docker,你也可以: 16 | 17 | $ sudo systemctl enable docker 18 | 19 | # or on older distributions, you may need to use 20 | 21 | $ sudo chkconfig docker on 22 | 23 | ## 自定义Docker daemon参数 24 | 25 | 有许多配置daemon flags和环境变量的方法。如果docker.service文件是被用来设置EnvironmentFile(通常指向/etc/sysconfig/docker)的,你可以修改这个指定的文件。 26 | 27 | 或者,你可能需要编辑docker.service文件,在/usr/lib/systemd/system或者/etc/systemd/service。 28 | 29 | ## 运行时目录和存储驱动 30 | 31 | 你可能想控制Docker 镜像,容器,数据卷的磁盘空间,通过移动它到一个分离的地方。 32 | 33 | 在本次示例中,我们将假设你的docker.service文件长得像这个样子: 34 | 35 | [Unit]Description=Docker Application Container 36 | 37 | EngineDocumentation=http://docs.docker.com 38 | 39 | After=network.target docker.socket 40 | 41 | Requires=docker.socket 42 | 43 | [Service]Type=notify 44 | 45 | EnvironmentFile=-/etc/sysconfig/docker 46 | 47 | ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS 48 | 49 | LimitNOFILE=1048576 50 | 51 | LimitNPROC=1048576 52 | 53 | [Install]Also=docker.socket 54 | 55 | 这里将允许我们添加额外的标志在/etc/sysconfig/docker文件,通过设置OPTIONS: 56 | 57 | OPTIONS="--graph /mnt/docker-data --storage btrfs" 58 | 59 | 你也可以设置其它的环境变量在这个文件中,例如HTTP_PROXY 。 60 | 61 | ## HTTP Proxy 62 | 63 | 这个例子继承默认的docker.service文件。 64 | 65 | 如果你后台运行HTTP proxy server,例如corporate 设置,你将需要添加这个的配置在你的docker systemd service文件中。 66 | 67 | 首先,创建一个systemd drop-in 目录。 68 | 69 | mkdir /etc/systemd/system/docker.service.d 70 | 71 | 创建一个文件叫做/etc/systemd/system/docker.service.d/http-proxy.conf,添加HTTP_PROXY 环境变量。 72 | 73 | [Service]Environment="HTTP_PROXY=http://proxy.example.com:80/" 74 | 75 | 如果你有 internal Docker registries ,你需要用不用代理的链接,你可以指定它们通过NO_PROXY环境变量。 76 | 77 | Environment="HTTP_PROXY=http://proxy.example.com:80/""NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com" 78 | 79 | 刷新修改 80 | 81 | $ sudo systemctl daemon-reload 82 | 83 | 重启Docker 84 | 85 | $ sudo systemctl restart docker 86 | 87 | ## 手动创建systemd unit files 88 | 89 | 当没有使用package安装binary ,你可能想使用systemd结合Docker 。为了能这样,简单安装两个unit files(service and socket)从the github repository 下载到你的/etc/systemd/system目录下。 90 | 91 | -------------------------------------------------------------------------------- /Articles/using_supervisord.md: -------------------------------------------------------------------------------- 1 | # 在Docker中使用Supervisor 2 | 3 | 传统的Docker容器运行一个进程,当进程启动时,例如Apache守护进程或SSH服务器守护进程。虽然常常要在一个容器中运行多个进程。有许多方法可以实现这种从使用一个简单的bash脚本作为您的容器的CMD指令安装过程管理工具。 4 | 5 | 在这个例子中我们要运用过程管理工具,Supervisor,在容器中管理更多个进程。利用Supervisor可以让我们更好的控制,管理,并重新启动,我们要运行的过程。为了证明这一点我们要安装和管理一个SSH守护进程和一个Apache进程。 6 | 7 | ## 创建一个Dockerfile 8 | 9 | 先为我们的新镜像传一个Dockerfile 10 | 11 | sudo gedit Dockerfile 12 | 13 | 写入如下内容: 14 | 15 | FROM ubuntu:13.04 16 | 17 | MAINTAINER examples@docker.com 18 | 19 | 1、安装 Supervisor 20 | 21 | 我们现在可以安装我们的SSH和Apache作为在我们容器中的Supervisor。 22 | 23 | RUN apt-get update && apt-get install -y openssh-server apache2 supervisor 24 | 25 | RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor 26 | 27 | 这里我们安装openssh-server, apache2和 supervisor。我们也创建4个新的目录(运行SSH和Supervisor必须的目录)。 28 | 29 | 2、添加Supervisor配置文件 30 | 31 | 现在然我们添加一个Supervisor配置文件。默认文件是supervisord.conf,位于本地/etc/supervisor/conf.d/。 32 | 33 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 34 | 35 | 我们看看supervisord.conf写入的内容: 36 | 37 | [supervisord] 38 | 39 | nodaemon=true 40 | 41 | [program:sshd] 42 | 43 | command=/usr/sbin/sshd -D 44 | 45 | [program:apache2] 46 | 47 | command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" 48 | 49 | supervisord.conf配置文件包含配置Supervisor 的指令和它管理的进程。第一个方括号[supervisord]提供了Supervisor 本身的配置。我们使用一个指令nodaemon ,来告知Supervisor交互运行而不是守护化。 50 | 51 | 接下来的两个方括号,管理我们希望控制的服务。每个方括号控制一个分离的进程。方括号包含一个单指令,command,该指令指定一条命令来运行启动每个进程。 52 | 53 | 3、暴露端口并运行Supervisor 54 | 55 | 现在让我们结束我们的Dockerfile ,通过暴露某些要求的端口,指定CMD指令来启动Supervisor ,当我们的容器运行起来时。 56 | 57 | EXPOSE 22 80 58 | 59 | CMD ["/usr/bin/supervisord"] 60 | 61 | 我们暴露端口22和80,当我们运行/usr/bin/supervisord。 62 | 63 | ## 构建我们镜像 64 | 65 | $ sudo docker build -t /supervisord . 66 | 67 | ## 运行我们的Supervisor容器 68 | 69 | 一旦,我们已经得到一个构建好的镜像,我们可以通过构建好的镜像启动一个镜像。 70 | 71 | $ sudo docker run -p 22-p 80-t -i /supervisord 72 | 73 | 2013-11-2518:53:22,312 CRIT Supervisor running as root (no user in config file) 74 | 75 | 2013-11-2518:53:22,312 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing 76 | 77 | 2013-11-2518:53:22,342 INFO supervisord started with pid 1 78 | 79 | 2013-11-2518:53:23,346 INFO spawned:'sshd'with pid 6 80 | 81 | 2013-11-2518:53:23,349 INFO spawned:'apache2'with pid 7 82 | 83 | ... 84 | 85 | 我们启动了一个交互性容器,使用docker run命令。该容器具有运行Supervisor和启动的SSH和Apache守护进程。我们指定-p标志使端口22和80暴露。从这里我们可以确定暴露的端口和连接到一个或两个的SSH和Apache的守护进程。 -------------------------------------------------------------------------------- /Compose/cli.md: -------------------------------------------------------------------------------- 1 | ## Compose命令行 2 | 3 | 绝大多数docker组合命令作用于一个或多个服务。如果没有指明服务,则命令会应用到所用服务中。 4 | 5 | 可以通过docker-compose [COMMAND] --help获取全部信息。 6 | 7 | ## 命令 8 | 9 | ### build 10 | 11 | 构建或者重建服务 12 | 13 | 服务至构建一次然后被标记为project_service,如composetest_db。如果改变一个服务的dockerfile或者其构建目录的内容,则需用docker-compose build重建它。 14 | 15 | ### Help 16 | 17 | 显示命令的帮助和使用方法。 18 | 19 | ### Kill 20 | 21 | 通过SIGLILL信号强制运行的容器停止。如下,信号可以这样传递: 22 | 23 | $ docker-compose kill -s SIGINT 24 | 25 | ### logs 26 | 27 | 显示服务的日志输出。 28 | 29 | ### port 30 | 31 | 打印端口绑定时的公共端口。 32 | 33 | ### Ps 34 | 35 | 列出容器 36 | 37 | ### Pull 38 | 39 | 拉取服务镜像 40 | 41 | ### Rm 42 | 43 | 删除已停止的服务容器 44 | 45 | ### Run 46 | 47 | 服务中运行一个一次性命令,如: 48 | 49 | $ docker-compose run web python manage.py shell 50 | 51 | 这会开启WEB服务然后在python中运行manage.py shell。注意,默认,如果相关服务没有运行,则相关服务也会被启动。 52 | 53 | 一次性命令会以与普通命令一样的配置运行,所以卷,链接会被如期创建。使用run时有两个跟启动普通容器不同的地方: 54 | 55 | 1. 命令将会被指定服务覆盖。如果使用docker-compose run web bash,,容器的web命令(可能默认如python app.py)将被覆盖到bash。 56 | 57 | 2. 默认,将不会建立端口,以防止和已经打开的端口冲突。 58 | 59 | 命令与其他作为服务一部分的容器之间将会建立链接,所以可以运行 60 | 61 | $ docker-compose run db psql -h db -U docker 62 | 63 | 这将为关联的db容器(按需建立或启动)开启一个交互式 PostgreSQL shell。如果不想要关联的容器启动则指定--no-deps标签: 64 | 65 | $ docker-compose run --no-deps web python manage.py shell 66 | 67 | 类似,如果需要服务的端口被建立被应设置主机,指定--service-ports 标签: $ docker-compose run --service-ports web python manage.py shell 68 | 69 | ### Scale 70 | 71 | 设置运行服务的容器数量 72 | 73 | 数量以参数方式指定service=num,如 74 | 75 | $ docker-compose scale web=2 worker=3 76 | 77 | 给服务开启一个存在的容器: 78 | 79 | ### Stop 80 | 81 | 停止运行的容器而不移除他们,可以用docker-compose start重启。 82 | 83 | ### Up 84 | 85 | 为服务构建,(重新)建立,启动和关联到容器。 86 | 87 | 如链接服务没有启动,则会被启动。 88 | 89 | 默认,docker-compose up会增加每个容器的输出,而且其存在会使所有容器停止。运行docker-compose up -d会在后台启动容器,并使其运行。 90 | 91 | 默认,如果某服务存在容器,docker-compose up 将停止并重新建立(以volumes-from保存挂载卷),所以docker-compose.yml中改变会被获知。如果不需要容器停止并重建,则使用docker-compose up --no-recreate。这将会按需启动任何停止的容器。 92 | 93 | 94 | 95 | ## 参数 96 | 97 | #### --verbose 98 | 99 | 显示更多的输出 100 | 101 | ### --versiion 102 | 103 | 打印版本并退出 104 | 105 | ### -f ,--file FILE 106 | 107 | 指定yanml文件的替代文件(默认:docker-compose.yml)。 108 | 109 | ### -p,--project-name NAME 110 | 111 | 指定可选的工程名字(默认:当前目录的名字) 112 | 113 | 114 | 115 | ## 环境变量: 116 | 117 | 配置Compose行为时有几个环境变量可用 118 | 119 | 以DOCKER_开头的变量和配置docker命令行客户端一样。如果使用boot2 120 | 121 | Docker,$(boot2docker shellinit)会被设置巍峨正确的值 122 | 123 | ### COMPOSE_PROJECT_NAME 124 | 125 | 设置工程名字,该名字会被添加到由每个Compose建立的容器名字前。默认为当前工作目录。 126 | 127 | 128 | 129 | ### COMPOSE_FILE 130 | 131 | 设置可用 的ocker-compose.yml文件路径,默认是当前木目录的docker-compose.yml。 132 | 133 | 134 | 135 | ### DOCKER_HOST 136 | 137 | 设置docker后台进程的URL。客户端默认是unix:///var/run/docker.sock. 138 | 139 | 140 | 141 | ### DOCKER_TLS_VERIFY 142 | 143 | 当设置为任何飞非空字符串时,将会开启与后台的TLS通信。 144 | 145 | 146 | 147 | ### DOCKER_CERT_PATH 148 | 149 | 配置ca.pem, cert.pem, 和key.pem 文件路径,以用于 TLS 认证. 默认为~/.docker. 150 | 151 | 152 | ## Compose documentation 153 | 154 | Compose文档 155 | 156 | [User guide](https://docs.docker.com/compose/) 157 | 158 | [Command line reference](https://docs.docker.com/compose/cli/) 159 | 160 | [Yaml file reference](https://docs.docker.com/compose/yml/) 161 | 162 | [Compose environment variables](https://docs.docker.com/compose/env/) 163 | 164 | [Compose command line completion](https://docs.docker.com/compose/completion/) -------------------------------------------------------------------------------- /Compose/completion.md: -------------------------------------------------------------------------------- 1 | ## Command Completion 2 | 3 | Compose与bash shell下的command completion 是分不开的。 4 | 5 | 安装Command Completion 6 | 7 | 确保bash Completion已安装。如果当前使用的是非最简化安装的linux,那么应该bash Completion已经可以使用。Mac中可以使用brew install bash-completion 安装bash Completion。 8 | 9 | 把安装脚本放在/etc/bash_completion.d/ (mac路径/usr/local/etc/bash_completion.d/ ),例如 10 | 11 | curl -L https://raw.githubusercontent.com/docker/compose/1.2.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose 12 | 13 | 下次登录时Completion就能使用了。 14 | 15 | 可用的completion取决于命令行输入非内容,完整的包括: 16 | 17 | - 可用的 docker-compose 命令 18 | - 特殊命令的可用选项 19 | - 特定上下文中有意义的服务(如,运行中或已停止的服务实例或者基于镜像的服务与基于Dockerfile的 服务。 ). 在docker-compose 尺度上, 完全的服务名字将会自动添加 "="。 20 | - 已选项的参数如 docker-compose kill -s 会完像SIGHUP 和IGUSR1的成信号传递 21 | 22 | 更加高效低错的享受Compose吧! -------------------------------------------------------------------------------- /Compose/dockercompose.md: -------------------------------------------------------------------------------- 1 | # Docker Compose用户指南 2 | 3 | ## Docker Compose 4 | 5 | Compose 是一个工具,定义和运行复杂Docker应用。使用Compose,你定义多容器应用在当个文件中,然后将你的所有应用联系在一起,通过单一命令就可以完成运行这么多容器应用的事情。 6 | 7 | Compose 对与开发环境,staging servers和CI是有利的。我们不用推荐使用它,在你的产品中。 8 | 9 | 使用Compose 基本上分为三步: 10 | 11 | 第一步,你定义你的app的环境使用dockerfile,它可以在任何地方被生成。 12 | 13 | FROM python:2.7 14 | WORKDIR /code 15 | ADD requirements.txt /code/ 16 | RUN pip install -r requirements.txt 17 | ADD ./code 18 | CMD python app.py 19 | 20 | 接下来,你定义服务,确保在docker-compose.yml包含你的应用,它们可以被运行在隔离的环境。 21 | 22 | web: 23 | build: . 24 | links: 25 | - db 26 | ports: 27 | -"8000:8000" 28 | db: 29 | image: postgres 30 | 31 | 最后,运行docker-compose up,Compose 将启动并运行你整个app。 32 | 33 | Compose 有命令用来管理你app的整个生命周期: 34 | 35 | 启动、停止,重构服务 36 | 37 | 查看正在运行服务的状态 38 | 39 | 打印正在运行服务的log输出。 40 | 41 | 运行一次性的服务命令 42 | 43 | ## Compose 文档 44 | 45 | * Installing Compose 46 | 47 | * Command line reference 48 | 49 | * Yaml file reference 50 | 51 | * Compose environment variables 52 | 53 | * Compose command line completion 54 | 55 | ## 快速开始 56 | 57 | 让我们开始与演练获得一个简单的Python Web应用程序上,运行Compose。它是需要Python的一点知识,但这里展示的概念,即使你不熟悉Python是可以理解的。 58 | 59 | ### 安装与设置 60 | 61 | 首先,安装Docker Compose。 62 | 63 | 接下来,你需要为项目建立目录: 64 | 65 | $ mkdir composetest 66 | 67 | $ cd composetest 68 | 69 | 在这个目录里面,创建`app.py`,一个单个web app,使用Flask 框架,在Redis增加一个值。 70 | 71 | from flask import Flask 72 | 73 | from redis import Redis 74 | 75 | import os 76 | 77 | app =Flask(__name__) 78 | 79 | redis =Redis(host='redis', port=6379) 80 | 81 | 82 | 83 | @app.route('/') 84 | 85 | def hello(): 86 | 87 | redis.incr('hits') 88 | 89 | return'Hello World! I have been seen %s times.'% redis.get('hits') 90 | 91 | if __name__ =="__main__": 92 | 93 | app.run(host="0.0.0.0", debug=True) 94 | 95 | 接下来,定义Python依赖,在一个叫做`requirements.txt`文件中写入: 96 | 97 | flask 98 | 99 | redis 100 | 101 | ### 创建一个docker镜像 102 | 103 | 现在,创建一个docker镜像,包含你app的依赖项。你指定怎样构建镜像,使用一个叫做Dockerfile文件。 104 | 105 | FROM python:2.7 106 | ADD . /code 107 | WORKDIR /code 108 | RUN pip install -r requirements.txt 109 | 110 | 这告诉docker包含Python,code和你的Python 依赖项到你的docker镜像中。关于怎样写dockerfile的信息,请阅读Docker user guide 和Dockerfile reference。 111 | 112 | ### 定义服务 113 | 114 | 接下来,定义一个服务,使用docker-compose.yml: 115 | 116 | web: 117 | build: . 118 | command: python app.py 119 | ports: 120 | - "5000:5000" 121 | volumes: 122 | - .:/code 123 | links: 124 | - redis 125 | redis: 126 | image: redis 127 | 128 | 129 | 130 | 这里定义了两个服务: 131 | 132 | web,在当前目录通过Dockerfile构建。在构建的镜像中,它一直说明运行命令 python app.py,期望暴露容器端口5000到宿主机端口5000,链接Redis服务,挂载当前目录到容器中,因此我们可以操作code目录而不必重构镜像。 133 | 134 | redis, 使用公有image redis, 从 Docker Hub registry中pull下来。 135 | 136 | ### 通过Compose构建和运行你的app 137 | 138 | 现在,你可以运行docker-compose up,Compose 将pull一个Redis 镜像,构建一个包含你的code的镜像,启动所有的任何事情。 139 | 140 | $ docker-compose up 141 | 142 | Pulling image redis... 143 | 144 | Building web... 145 | 146 | Starting composetest_redis_1... 147 | 148 | Starting composetest_web_1... 149 | 150 | redis_1 |[8]02Jan18:43:35.576# Server started, Redis version 2.8.3 151 | 152 | web_1 |*Running on http://0.0.0.0:5000/ 153 | 154 | web app现在需要监听5000 端口,在你的docker daemon主机。 155 | 156 | 如果你想运行你的服务在后台,你可以通过-d标志到docker-compose up命令后,使用docker-compose ps查看当前运行的情况: 157 | 158 | $ docker-compose up -d 159 | 160 | Starting composetest_redis_1... 161 | 162 | Starting composetest_web_1... 163 | 164 | $ docker-compose ps 165 | 166 | Name Command State Ports 167 | 168 | ------------------------------------------------------------------- 169 | 170 | composetest_redis_1 /usr/local/bin/run Up 171 | 172 | composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp 173 | 174 | `docker-compose run`命令,运行你运行一次性命令为你的服务。例如,查看web 服务的环境变量。 175 | 176 | $ docker-compose run web env 177 | 178 | `docker-compose --help`看看其他有效的命令。 179 | 180 | 如果你启动Compose 是通过docker-compose up -d,你将可能想要停止你的服务,一旦你结束他们时。 181 | 182 | $ docker-compose stop 183 | 184 | 最后,你已经看到了基本的怎样让Compose 工作了。 185 | 186 | 接下来,你可以快速开始 Django, Rails, 或者 Wordpress. 187 | 188 | 可以查看参考指南,了解更加详尽的 commands, configuration file 和environment variables。 -------------------------------------------------------------------------------- /Compose/env.md: -------------------------------------------------------------------------------- 1 | # Compose环境变量 2 | 3 | > 注意:环境变量不在是连接关联服务(linked service)的推荐方法。而应使用链接名称(默认是关联服务的名称)作为主讲名称去进行连接。详见docker-compose.yml documentation 4 | 5 | 组合使用Docker连接(Docker links)向另一个容器暴露服务所在的容器。每个关联的容器注入一系列以容器名称大写开头的环境变量。 6 | 7 | 使用docker-compose run SERVICE env可以查看那些环境变量可用。 8 | 9 | name_PORT 10 | 11 | 完整的URL, 如DB_PORT=tcp://172.17.0.5:5432 12 | 13 | name_PORT_num_protocol 14 | 完整的URL, 如DB_PORT_5432_TCP=tcp://172.17.0.5:5432 15 | 16 | name_PORT_num_protocol_ADDR 17 | 容器 IP 如 DB_PORT_5432_TCP_ADDR=172.17.0.5 18 | 19 | name_PORT_num_protocol_PORT 20 | 容器端口,如 DB_PORT_5432_TCP_PORT=5432 21 | 22 | name_PORT_num_protocol_PROTO 23 | 协议(tcp 或 udp),如DB_PORT_5432_TCP_PROTO=tcp 24 | 25 | name_NAME 26 | 完全有效容器名字 DB_1_NAME=/myapp_web_1/myapp_db_1 -------------------------------------------------------------------------------- /Compose/install/compose.md: -------------------------------------------------------------------------------- 1 | ##准备安装Compose 2 | 3 | 为了安装Compose,你需要先安装docker,然后通过一个curl命令安装Compose。 4 | 5 | ##安装docker 6 | 7 | 首先,安装docker 版本1.3或者更高: 8 | 9 | * [Instructions for Mac OS X](http://docs.docker.com/installation/mac/) 10 | * [Instructions for Ubuntu](http://one-h.lofter.com/post/1d031c4b_60b72ad) 11 | * [Instructions for other systems](http://docs.docker.com/installation/) 12 | 13 | ##安装Compose 14 | 15 | 为了安装Compose,运行如下命令: 16 | 17 | curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 18 | chmod +x /usr/local/bin/docker-compose 19 | 20 | 随意的,你也可以安装通过命令行完成,[command completion](https://docs.docker.com/compose/completion/)。 21 | 22 | Compose 可供OS X和64位Linux安装。如果你是其它平台,Compose也可以通过Python包安装。 23 | 24 | $ sudo pip install -U docker-compose 25 | 26 | 没有进一步的步骤是必需的,Compose 现在已经被成功安装了。你可以测试是否安装成功,尝试docker-compose --version。 27 | 28 | ##Compose文档 29 | 30 | [User guide](https://docs.docker.com/compose/) 31 | 32 | [Command line reference](https://docs.docker.com/compose/cli/) 33 | 34 | [Yaml file reference](https://docs.docker.com/compose/yml/) 35 | 36 | [Compose environment variables](https://docs.docker.com/compose/env/) 37 | 38 | [Compose command line completion](https://docs.docker.com/compose/completion/) 39 | 40 | 41 | -------------------------------------------------------------------------------- /Compose/production.md: -------------------------------------------------------------------------------- 1 | # 生产环境使用Compose 2 | 3 | 当Compose被认为不是深思熟虑的生产环境时,如果你希望了解更多生产环境下使用它的内容,本文将帮到你。Compose正积极地朝向预生产的地步迈进;了解更多进程,看看[roadmap](https://github.com/docker/compose/blob/master/ROADMAP.md)中关于怎样独自走来并达到需要地步的说明。 4 | 5 | 当生产环境中部署,你将尽可能想修改自己的app配置,以便运用到各种各样的真实环境中。这些修改包括: 6 | 7 | 1. 移除任何应用代码的volume绑定,因为code保留在容器里边,不需要被在外边修改。 8 | 9 | 2. 绑定不同的主机端口 10 | 11 | 3. 设置不同的环境变量 12 | 13 | 4. 指定重启策略,避免宕机。 14 | 15 | 5. 添加额外的服务。 16 | 17 | 18 | 针对这些,你可能想定义一个单独的Compose文件,叫做production.yml,能指定合适生产参数。 19 | 20 | > 说明:[Compose扩展](extends.md)维护多个Comose文件也是必要的(重用基础服务,避免人为复制和粘贴)。 21 | 22 | 一旦你获得一个可替换的配置文件,让Compose使用这个文件作为COMPOSE_FILE环境变量的值。 23 | 24 | $ COMPOSE_FILE=production.yml 25 | $ docker-compose up -d 26 | 27 | > 说明:你也可以一次性使用文件,不通过设置环境变量的方式。为此,你可以设置-f参数,docker-`compose -f production.yml up -d`。 28 | 29 | ## 修改时重新部署 30 | 31 | 当你修改你的app代码时,你将需要重构你的镜像然后重新创建你的app容器。为了重新部署一个叫做web的服务,你需要: 32 | 33 | $ docker-compose build web 34 | $ docker-compose up --no-deps -d web 35 | 36 | 这将首次重构镜像web,然后停止,销毁,重新创建web服务。`--no-deps`标识阻止Compose重新创建任何web依赖的服务。 37 | 38 | ## 运行Compose在单个server上 39 | 40 | 你可以使用Compose部署一个app到远端Docker主机,通过设置DOCKER_HOST,DOCKER_TLS_VERIFY, 和 DOCKER_CERT_PATH环境变量。如果我有多个Docker主机呐,[Docker Machine](https://docs.docker.com/machine)能轻松管理本地的或者远端的Docker主机,被推荐来作为你不用远端部署Compose的方式。 41 | 42 | 一旦你设置了你的环境变量,所有默认的docker-compose命令,都将采用非未来的配置(翻译有待商酌)。 43 | 44 | ## 运行Compose在Swarm集群上 45 | 46 | [Docker Swarm](https://docs.docker.com/swarm),一个Docker本地集群管理系统,为每一个单独的Docker主机暴露相同的API,意味着你使用Compose可能违背一个Swarm实例运行在你的跨多个主机应用。 47 | 48 | Compose/Swarm集成处于实验性阶段,Swarm将一直保持在beta阶段,但是如果你希望探索和尝试,看看[这里](https://github.com/docker/compose/blob/master/SWARM.md)。 -------------------------------------------------------------------------------- /DockerHub/README.md: -------------------------------------------------------------------------------- 1 | # 引言 2 | 本章节主要对docker hub的相关概念以及怎样使用做了说明。 3 | ## 章节列表 4 | * [Docker Hub](docker-hub.md) 5 | * [账户](accounts.md) 6 | * [用户指南](userguide.md) 7 | * [私有库](repos.md) 8 | * [自动构建](builds.md) 9 | * [官方库](official_repos.md) -------------------------------------------------------------------------------- /DockerHub/accounts.md: -------------------------------------------------------------------------------- 1 | # Docker Hub账户 2 | 3 | ## Docker Hub 账户 4 | 5 | 在Docker Hub上,你可以在没有账户或者签名的情况下,`search`镜像并`pull`它们。但是,如果要push镜像,被评论或者被评星的话,你需要一个Docker Hub账户。 6 | 7 | ### 注册Docker Hub账户 8 | 9 | 你可以注册[Docker Hub](https://hub.docker.com/)账户,在[注册页面](https://hub.docker.com/account/signup/)。一个有效的Email地址是需要用来注册、激活账户的。 10 | 11 | ### Email激活操作 12 | 13 | 你需要有一个尽快地去邮件认证并使用Docker Hub账户。如果你没有发现认证Email,你可以要求再一次访问[重发Email确认页面](https://hub.docker.com/account/resend-email-confirmation/) 14 | 15 | ### 密码重置操作 16 | 17 | 如果你不能登录你的账户,你需要[重置密码](https://hub.docker.com/account/forgot-password/)。 18 | 19 | ## Organizations & Groups 20 | 21 | 一个Docker Hub组织包含公有的和私有的仓库,就想一个用户账号一样。组织(Organizations)具有创建、pull、push镜像到自己的仓库的权限。这样的权限被分配给自定义的用户组(Groups),然后分配组权限到指定的仓库。这允许你可以指定受限的操作的docker镜像,选择哪个具有发布新镜像的Docker Hub用户。 22 | 23 | ### 创建和查看组织 24 | 25 | 你会在Account Settings下,看到[组织(Organizations)](https://hub.docker.com/account/organizations/)。 26 | 27 | ![orgs.png](../Images/orgs.png) 28 | 29 | ### Organization groups 30 | 31 | 在组织下的Owners组(Groups)的用户,具有创建和修改所有组的用户。如果他们不是组织的Owner(拥有者),用户仅仅可以看到他们的成员结构。 32 | 33 | ![groups.png](../Images/groups.png) 34 | 35 | ### 组的仓库管理权限 36 | 37 | 使用组织的组来管理谁对你的仓库负责。 38 | 39 | 你需要成为一个组织Owners组(Groups)的用户,才能创建一个新的组,Hub仓库或者自动构建等功能。作为一个Owner,你会代理分配如下仓库操作权限给特定组。 40 | 41 | 1. 读权限: 允许组用户查看、search和pull一个私有仓库或公有仓库。 42 | 43 | 2. 写权限:允许组用户push非自动化构建的仓库到Docker Hub。 44 | 45 | 3. 管理员权限:允许组用户修改仓库的"Description", "Collaborators", "Mark as unlisted", "Public/Private" status 和 "Delete"。 46 | 47 | > 说明:一个用户没有验证Email将仅有对仓库读的权限,不管你给定他们组的权限是什么。 48 | 49 | ![org-repo-collaborators.png](../Images/org-repo-collaborators.png) -------------------------------------------------------------------------------- /DockerHub/builds.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/DockerHub/builds.md -------------------------------------------------------------------------------- /DockerHub/docker-hub.md: -------------------------------------------------------------------------------- 1 | # Docker Hub 2 | 3 | Docker Hub提供了一个基于云平台的服务,包括容器镜像分发和修改管理,用户或者团队成员之间的合作,自动化生命周期工作流。 4 | 5 | ![hub.png](../Images/hub.png) 6 | 7 | ## 发现和pull镜像 8 | 9 | 阅读[Docker Hub用户指南](userguide.md),了解怎样发现和pull镜像并运行或者构建。 10 | 11 | ## 账户 12 | 13 | 阅读[怎样创建DockerHub账户](accounts.md),创建用户并管理你的组织和分组 (organizations and groups)。 14 | 15 | ## 你的仓库 16 | 17 | 阅读怎样分享你的Docker镜像到[DockerHub仓库](repos.md),了解存储和管理私有镜像。 18 | 19 | ## 自动构建 20 | 21 | 了解怎样使用[自动构建](builds.md)来实现自动化构建和部署管道。 -------------------------------------------------------------------------------- /DockerHub/official_repos.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/DockerHub/official_repos.md -------------------------------------------------------------------------------- /DockerHub/repos.md: -------------------------------------------------------------------------------- 1 | ## Hub仓库 2 | 3 | Docker Hub仓库让你和同事、顾客以及docker大社区分享镜像成为可能。如果你在建立自己内部的镜像,在你的守护进程又或者用你的连续集成服务时,你可以把他们放到一个docker的hub仓库里面,然后你可以添加用户和管理账户。 4 | 5 | 另外,如果你的docker镜像的源代码在GitHub或者bitbucket,您可以使用“自动生成”库,这是由docker服务构建。见自动生成文档来阅读这些服务提供的额外功能。 6 | 7 | ![repos.png](../Images/repos.png) 8 | 9 | 你的docker库有大量有用的功能。 10 | 11 | ### 星级 12 | 13 | 你可以在返回的库中,把你的知识库用星标记。星级是一种表明你喜欢某仓库的方法。他们也是书签收藏夹的简便方法。 14 | 15 | ### 评论 16 | 17 | 你可以通过docker窗社区的留言和维护其他成员互动。如果你发现任何不恰当的评论,你可以将它们进行审查。 18 | 19 | ### 合作者及其角色 20 | 21 | 合作者是一个你想访问的私人仓库。一旦被指定,他们可以推到你的仓库。他们不被允许执行任何管理任务,如删除库或改变其状态从私人到公众。 22 | 23 | 注:合作者不能添加其他合作者。只有拥有的知识库的所有者具有管理访问权限。 24 | 25 | 你还可以指定更多的合作者的权利(“读”,“写”,或“admin”)的docker组织和团体。对于更多的信息,请参阅帐户文档。 26 | 27 | ### 私人库 28 | 29 | 私人知识库可以让你拥有一个包含镜像的存储库,你可以在存储库里面保持自己的图像,或者是你自己的帐户,或者是在一个组织或组中的图像。 30 | 31 | 在docker私人仓库工作,你将需要添加一个通过添加存储库的链接。你可以免费得到一个专用库docker帐户。如果你需要更多的账户,你可以升级你的docker规划。 32 | 33 | 一旦私人库创建,你可以推拉的图像和使用docker窗。 34 | 35 | 注意:您需要在和一个私有存储库中签名并访问工作。 36 | 37 | 私人知识库就像是公共的。然而,它是不可能浏览或搜索他们的内容在公共登记。它们没有得到相同的方式作为一个公共存储库。 38 | 39 | 这是可能的,以获得一私个人资料库,您所指定的人(即,合作者)从其设置页面。从那里,您还可以切换到存储库状态(公众到私人,反之亦然)。您需要有一个可用的私有存储库,在您可以做这样一个开关之前打开。如果你没有任何可用的,你可以升级你的docker规划。 40 | 41 | ### Webhooks 42 | 43 | 一个是一个HTTP回电webhook由特定的事件触发。你可以使用一个中心仓库webhook通知人,服务,和之后的新形象推到你的库的其他应用(这也会自动生成)。例如,你可以触发一个自动测试或部署,只要图像是可用的。 44 | 45 | 开始添加webhooks,去中心所需的存储库,然后单击“webhooks”下的“设置”对话框。一个webhook之后才成功推动了所谓的。调用HTTP POST请求的webhook用类似下面的示例JSON有效负载。 46 | 47 | 例如webhook JSON有效负载: 48 | 49 | { 50 | "callback_url": "https://registry.hub.docker.com/u/svendowideit/busybox/hook/2141bc0cdec4hebec411i4c1g40242eg110020/", 51 | "push_data": { 52 | "images": [ 53 | "27d47432a69bca5f2700e4dff7de0388ed65f9d3fb1ec645e2bc24c223dc1cc3", 54 | "51a9c7c1f8bb2fa19bcd09789a34e63f35abb80044bc10196e304f6634cc582c", 55 | ... 56 | ], 57 | "pushed_at": 1.417566822e+09, 58 | "pusher": "svendowideit" 59 | }, 60 | "repository": { 61 | "comment_count": 0, 62 | "date_created": 1.417566665e+09, 63 | "description": "", 64 | "full_description": "webhook triggered from a 'docker push'", 65 | "is_official": false, 66 | "is_private": false, 67 | "is_trusted": false, 68 | "name": "busybox", 69 | "namespace": "svendowideit", 70 | "owner": "svendowideit", 71 | "repo_name": "svendowideit/busybox", 72 | "repo_url": "https://registry.hub.docker.com/u/svendowideit/busybox/", 73 | "star_count": 0, 74 | "status": "Active" 75 | } 76 | 77 | 测试,你可以试着向一个HTTP请求的工具requestb.in。 78 | 79 | 注:docker服务器当前的IP范围162.242.195.64 - 162.242.195.127,所以你可以限制webhooks接受那套IP地址webhook的请求。 80 | 81 | ### webhook链 82 | 83 | 允许你调用链webhook链多种服务。例如,您可以使用此引发的部署你的容器只有在它已成功通过测试,然后更新一个单独的更新一旦部署完成。在点击“添加webhook”按钮,只需添加尽可能多的URL是必要的在你的链。 84 | 85 | 在一个链的第一个webhook将成功推动后调用。随后的网址将被联系后,回调已验证。 86 | 87 | ### 验证回调 88 | 89 | 为了验证回调在webhook链,你需要 90 | 91 | 检索请求中的JSON有效负载的callback_url价值。 92 | 93 | 发送一个POST请求该URL包含一个有效的JSON的身体。 94 | 95 | 注:一个链的请求,只会被认为是完整的,一旦最后的回调已经验证。 96 | 97 | 帮助你调试或者查看webhook结果,查看“历史”在其设置页面可用webhook。 98 | 99 | 回调的JSON数据 100 | 101 | 回调数据中的下列参数: 102 | 103 | 状态(必需):接受的价值是成功,失败和错误。如果国家不成功,将被打断的webhook链。 104 | 105 | 描述:一个包含各种信息,将在泊坞枢纽可。最大255个字符。 106 | 107 | 上下文:一个包含操作上下文的字符串。可以从泊坞枢纽检索。最大100个字符。 108 | 109 | target_url:URL的运行结果可以发现。可以在泊坞枢纽检索。 110 | 111 | 例如回调有效载荷: 112 | 113 | { 114 | "state": "success", 115 | "description": "387 tests PASSED", 116 | "context": "Continuous integration by Acme CI", 117 | "target_url": "http://ci.acme.com/results/afd339c1c3d27" 118 | } 119 | 120 | ### 标记为未上市 121 | 122 | 通过标记库作为未上市,您可以创建一个公开pullable库不会在集线器或命令行搜索。这允许你有一个有限的释放,但不限制访问任何人,被告知,或猜测的知识库名称。 123 | -------------------------------------------------------------------------------- /DockerHub/userguide.md: -------------------------------------------------------------------------------- 1 | # Docker Hub用户指南 2 | 3 | Docker Hub可以用来查找、pull 镜像并运行或者构建镜像,可以发布或者构建其它用户所使用的镜像。 4 | 5 | ![dashboard.png](../Images/dashboard.png) 6 | 7 | ## 查找仓库和镜像 8 | 9 | 有两种方式搜索公有仓库和镜像。你可以使用Docker Hub Search工具或者使用Docker命令行工具: 10 | 11 | $ docker search ubuntu 12 | 13 | 两种方式都将显示当前有效的公有仓库。 14 | 15 | 如果仓库是私有的或者被标记不被列举,这将都不会在搜索的结果中。为了看到所有的仓库(你得有权限)和状态,你可以看你的[个人信息页](https://hub.docker.com/)。 16 | 17 | ## pull、运行和构建镜像 18 | 19 | 你可以了解[更多信息](../Userguide/dockerimages.md)。 20 | 21 | ## 官方仓库 22 | 23 | Docker Hub包含了许多[官方仓库](http://registry.hub.docker.com/official)。有Docker贡献者或者供应商认证的仓库。包含来自供应商的docker镜像,例如:Canonical, Oracle, 和 Red Hat ,你可以使用来构建应用或者服务。 24 | 25 | 如果你使用官方仓库,你需要知道你使用一个最佳或者更新的镜像来应用到你的应用中。 26 | 27 | > 说明:如果你喜欢共享一个官方的仓库,请阅读[官方仓库]()了解更多信息。 28 | 29 | ## 构建和传送你自己的仓库和镜像 30 | 31 | Docker Hub提供给你和你的团队放置构建和传送的Docker镜像。 32 | 33 | Docker镜像的集合都使用仓库管理。 34 | 35 | 你可以配置两种仓库管理的类型: 36 | 37 | 1. 仓库:允许你push镜像到Hub,从你本地Docker daemon。 38 | 2. 自动构建:允许你配置Github或者Bitbucket来触发重构仓库,当这些仓库修改时。 -------------------------------------------------------------------------------- /DockerHubEnterprise/README.md: -------------------------------------------------------------------------------- 1 | # 企业版DockerHub 2 | 3 | 本章主要介绍搭建存储、管理、传送Docker镜像的私有定制DockerHub,让你可以在本地更加灵活的管理Docker Image Registry。 4 | 5 | ## 章节列表 6 | 7 | * [概述](docker-hub-enterprise.md) 8 | * [快速开始:基本流程](quick-start.md) 9 | * [用户指南](userguide.md) 10 | * [管理员指南](adminguide.md) 11 | * [安装](install.md) 12 | * [配置项](configuration.md) 13 | * [支持](support.md) 14 | * [版本说明](release-notes.md) 15 | -------------------------------------------------------------------------------- /DockerHubEnterprise/adminguide.md: -------------------------------------------------------------------------------- 1 | # Docker Hub Enterprise 管理员指南 2 | 3 | 本指南包含几个DHE管理员的任务或者功能将需要被知道,例如报告、日志、系统管理、运行性能等。对于大多数任务,DHE用户需要提前了解,例如使用DHEpush和pull镜像,请访问[用户指南](userguide.md)。 4 | 5 | 6 | ## 报告 7 | 8 | ### System Health 9 | 10 | ![admin-metrics](../Images/admin-metrics.png) 11 | 12 | "System Health" 页签显示了可利用资源的图表。CPU和RAM使用情况在顶部就能看到,更加详细的时间序列图表将后续支持。你可以鼠标滑上报表查看星系的数据点。 13 | 14 | 点击一个服务名称(例如"load_balancer", "admin_server"等)将显示网络、CPU和内存使用数据对于指定的服务。查看如下[detailed explanation of the available services](https://docs.docker.com/docker-hub-enterprise/adminguide/#services)。 15 | 16 | ### 日志 17 | 18 | ![admin-logs](./Images/admin-logs.png) 19 | 20 | "Logs" 页签查看和你DHE相关的日志信息。你将看到不同服务的日志信息。老的和新的日志通过华东滚动条都可以看到。查看如下[detailed explanation of the available services](https://docs.docker.com/docker-hub-enterprise/adminguide/#services)。 21 | 22 | DHE的日志文件可以在主机/usr/local/etc/dhe/logs/看到。这些文件限制达到一个最大的大小64MB。他们每两周循环一次,当整合者发送整合服务或者他们达到循环的要求(超过64MB)。日志文件被命名为-,这里的"component name"是它提供的服务(例如manager, admin-server)。 23 | 24 | ### 使用报告以及异常报告 25 | 26 | 在正常使用过程中,DHE会生成使用数据和异常报告。这些信息会被docker Inc.收集并帮助我们事务的本质以及解决bug并提升我们的产品。特别地,Docker Inc收集如下信息: 27 | 28 | * Error logs 29 | * Crash logs 30 | 31 | ## 紧急访问DHE 32 | 33 | 如果你的认证或者公有权限能访问DHE网页突然停止了,但是你的DHE管理容器缺是依然运行着的,你可以添加一个 [ambassador container](../Articles/ambassador_pattern_linking 34 | .md)来获得一个临时非安全访问。 35 | 36 | $ docker run --rm -it --link docker_hub_enterprise_admin_server:admin -p 9999:80 svendowideit/ambassador 37 | 38 | 39 | > 说明:本指南假设你可以运行Docker命令从一个含有docker group的用户或者具有root权限的机器上。换句话说,你需要添加sudo在示例命令前。 40 | 41 | 你将通过端口9999访问你的DHE server: 42 | http://:9999/admin/ 43 | 44 | 45 | ## 服务 46 | 47 | DHE运行数个Docker服务。这些服务,你可以通过 System Health 和 Logs页查询到运行情况。 48 | 49 | * admin_server: Used for displaying system health, performing upgrades, configuring settings, and viewing logs. 50 | * load_balancer: Used for maintaining high availability by distributing load to each image storage service (image_storage_X). 51 | * log_aggregator: A microservice used for aggregating logs from each of the other services. Handles log persistence and rotation on disk. 52 | * image_storage_X: Stores Docker images using the [Docker Registry HTTP API V2](https://github.com/docker/distribution/blob/master/doc/SPEC.md). Typically, multiple image storage services are used in order to provide greater uptime and faster, more efficient resource utilization. 53 | 54 | ## DHE system management 55 | 56 | The dockerhubenterprise/manager image is used to control the DHE system. This image uses the Docker socket to orchestrate the multiple services that comprise DHE. 57 | 58 | $ sudo bash -c "$(sudo docker run dockerhubenterprise/manager [COMMAND])" 59 | 60 | Supported commands are: install, start, stop, restart, status, and upgrade. 61 | 62 | Note: sudo is needed for dockerhubenterprise/manager commands to ensure that the Bash script is run with full access to the Docker host. 63 | 64 | ## Next Steps 65 | For information on installing DHE, take a look at the Installation instructions. -------------------------------------------------------------------------------- /DockerHubEnterprise/configuration.md: -------------------------------------------------------------------------------- 1 | # 配置 DHE 2 | 3 | ## 概述 4 | 5 | 本文将帮助你适当配置你的DHE,以让它可以运行在你的环境中。浏览器加载你的DHE,点击"Settings"页,查看配置参数。你抗看到如下配置参数: 6 | 7 | - Domains and ports 8 | - Security settings 9 | - Storage settings 10 | - Authentication settings 11 | - Your DHE license 12 | 13 | 14 | ## Domains and ports 15 | 16 | ![admin-settings-http](../Images/admin-settings-http.png) 17 | 18 | 19 | Domain Name: required defaults to an empty string, the fully qualified domain name assigned to the DHE host. 20 | 21 | Load Balancer HTTP Port: defaults to 80, used as the entry point for the image storage service. To see load balancer status, you can query http:///load_balancer_status. 22 | 23 | Load Balancer HTTPS Port: defaults to 443, used as the secure entry point for the image storage service. 24 | 25 | HTTP_PROXY: defaults to an empty string, proxy server for HTTP requests. 26 | 27 | HTTPS_PROXY: defaults to an empty string, proxy server for HTTPS requests. 28 | NO_PROXY: defaults to an empty string, proxy bypass for HTTP and HTTPS requests. 29 | 30 | > 说明:如果你需要DHE重新生成自签的证书,你将需要先删除`/usr/local/etc/dhe/ssl/server.pem`文件,让后重启DHE容器,通过修改并保存 "Domain Name"或者使用`bash -c "$(docker run dockerhubenterprise/manager restart)"`。 31 | 32 | ## Security(安全) 33 | 34 | ![admin-settings-security](../Images/admin-settings-security.png) 35 | 36 | SSL Certificate: Used to enter the hash (string) from the SSL Certificate. This cert must be accompanied by its private key, entered below. 37 | 38 | Private Key: The hash from the private key associated with the provided SSL Certificate (as a standard x509 key pair). 39 | 40 | 为了运行,DHE要求使用HTTPS/SSL进行编码在DHE私有库和你的Docker Engine之间通信,以及DHE私有库和你的DHE网页浏览器、DHE管理员服务之间。这里有一些配置参数: 41 | 42 | 43 | - You can use the self-signed certificate DHE generates by default. 44 | - You can generate your own certificates using a public service or your enterprise's infrastructure. See the Generating SSL certificates section for the options available. 45 | 46 | 如果你生成你自己的证书,你可以安全他们,通过如下的命令[添加你自己的私有库证书到DHE](https://docs.docker.com/docker-hub-enterprise/configuration/#adding-your-own-registry-certificates-to-dhe)。 47 | 48 | 另一方面,如果选择使用DHE生成的证书,或者你自己生成的证书在你的Docker host上的client不受信任,你将需要作如下的步骤: 49 | 50 | - Install a registry certificate on all of your client Docker daemons, 51 | 52 | - Set your client Docker daemons to run with an unconfirmed connection to the registry. 53 | 54 | ### 生成SSL证书 55 | 56 | ### 添加自己的私有库证书到DHE 57 | 58 | ### 安装私有库证书到Docker daemons客户端 59 | 60 | ### 如果你不安装证书 61 | 62 | 63 | ### Boot2Docker 64 | 65 | 66 | ## 镜像存储配置 67 | 68 | ## 权限认证 69 | 70 | ### 没有权限认证 71 | 72 | ### 基本的权限认证 73 | 74 | ### LDAP 权限认证 75 | 76 | ## 下一步 77 | 78 | 为了了解更多DHE支持的信息,请阅读[DHE支持](support.md) -------------------------------------------------------------------------------- /DockerHubEnterprise/docker-hub-enterprise.md: -------------------------------------------------------------------------------- 1 | # Docker Hub Enterprise 2 | 3 | ## 概述 4 | 5 | Docker Hub Enterprise(DHE)让你运行和管理你的Docker容器存储服务,同时是安全地运行在你公司设备的防火墙后边。这允许你安全存储、push、pull镜像,使用你的DHE构建、传送和运行应用。DHE也提供监视和使用信息,以便帮助你理解运行在DHE上的工作负载情况。 6 | 7 | 明确一下,DHE提供: 8 | 9 | 1. 一个镜像存储服务,在Docker镜像的存储、管理和合作方面。 10 | 2. 可切换式存储驱动。 11 | 3. 配置选项,以便允许你运行DHE在特别的企业环境中。 12 | 4. 简单易懂的升级。 13 | 5. 日志,记录使用情况以及系统的健康情况。 14 | 15 | DHE完美的完成如下任务: 16 | 17 | 1. 提供一个安全、预生产环境 18 | 2. 创建一个流线型构建管道。 19 | 3. 构建一致、高性能的测试/QA环境。 20 | 4. 管理镜像部署。 21 | 22 | ## 可读的文档 23 | 24 | 下面是DHE可读的文档: 25 | 26 | 1. `概述` (本文) 27 | 2. `快速开始:基本的用户工作流`:学习DHE怎样工作的,以及你需要怎样配置一个简单且实用的工作流。[阅读](quick-start.md) 28 | 3. `DHE用户指南`:进一步了解DHE的使用方法。[阅读](userguide.md) 29 | 4. `管理员指南`:如果你有一个负责运行和管理DHE的管理员,需要阅读[这篇文章](adminguide.md)。 30 | 5. `安装DHE`:安装DHE的步骤以让它工作。[阅读](install.md) 31 | 6. `配置DHE`:发现一些为你的特别环境安装和配置DHE的细节。了解这些[细节](configuration.md) 32 | 7. `支持DHE`:为DHE提供支持的一些[信息](support.md)。 -------------------------------------------------------------------------------- /DockerHubEnterprise/support.md: -------------------------------------------------------------------------------- 1 | # 商业支持 2 | 3 | ## 怎样获得商业支持 4 | 5 | 购买DHE license或者签署商业支持,表示你关于DHE的问题或者bug将获得优化支持。你可以通过邮件获得一个ticket,或者访问我们的[支持网站](https://support.docker.com/)。在另外的实例中,你将需要核实你的邮件地址,然后可以通过邮件或者网站和我们支持团队沟通。 6 | 7 | **有效的支持依赖于你的[support subscription](https://www.docker.com/enterprise/support/)。** -------------------------------------------------------------------------------- /DockerHubEnterprise/userguide.md: -------------------------------------------------------------------------------- 1 | # Docker Hub Enterprise用户指南 2 | 3 | 本指南包含Docker DHE需要知道的功能和任务,例如push或者pull镜像等。对于DHE管理员需要完成的任务,例如配置和管理DHE,请阅读[DHE管理员指南](adminguide.md) 4 | 5 | ## 概述 6 | 7 | 对于DHE使用者最基础的使用示例就是push和pull镜像。例如,你可能pull官方镜像从Docker Hub,定制它通过配置相应的参数,然后push定制的镜像到你的DHE镜像存储,以提供给其他开发人员pull和使用。 8 | 9 | Push和pull镜像的工作性质很像其他Docker registry:你使用docker pull命令获取镜像,dockerpush命令添加一个镜像到DHE私有库中去。为了了解docker镜像,请看用户指南:[了解Docker镜像](../Userguide/dockerimages.md)。为了一步步了解全部过程,请查看[快速开始:基本工作流指南](quick-start.md) 10 | 11 | > 说明:如果你的DHE实例需要有权限认证,你将需要使用你的命令行登录 (例如docker login dhe.yourdomain.com)。失败的认证会是这样的: 12 | > 13 | > $ docker pull dhe.yourdomain.com/hello-world 14 | > 15 | > Pulling repository dhe.yourdomain.com/hello-world 16 | > 17 | > FATA[0001] Error: image hello-world:latest not found 18 | > 19 | > $ docker push dhe.yourdomain.com/hello-world 20 | > 21 | > The push refers to a repository [dhe.yourdomain.com/hello-world] (len: 1) 22 | > 23 | > e45a5af57b00: Image push failed 24 | > 25 | > FATA[0001] Error pushing to registry: token auth attempt for registry 26 | > 27 | > https://dhe.yourdomain.com/v2/: 28 | > 29 | > https://dhe.yourdomain.com/auth/v2/token/?scope= 30 | > 31 | > repository%3Ahello-world%3Apull%2Cpush&service=dhe.yourdomain.com 32 | > 33 | > request failed with status: 401 Unauthorized 34 | 35 | ## Push镜像 36 | 37 | 通过使用Docker push命令将镜像push到DHE上去。 38 | 39 | 你可以给你的镜像打一个tag,因此你可以更多容易从很多版本中识别它。 40 | 41 | `$ docker tag hello-world:latest dhe.yourdomain.com/yourusername/hello-mine:latest` 42 | 43 | 命令中的标签`hello-world:latest`镜像使用了一个新的tag,以 `[REGISTRYHOST/][USERNAME/]NAME[:TAG]`的形式。在例子中,REGISTRYHOST是你的DHE服务器,`dhe.yourdomain.com`。USERNAME是你的用户名。最后,镜像tag就设置的是`hello-mine:latest`。 44 | 45 | 46 | 一旦镜像被tag,你可以push它到DHE上,使用如下命令行: 47 | 48 | `$ docker push dhe.yourdomain.com/demouser/hello-mine:latest` 49 | 50 | 说明:如果docker daemon,push的权限错误,你将得到一个相似的错误信息: 51 | $ docker push dhe.yourdomain.com/demouser/hello-world 52 | FATA[0000] Error response from daemon: v1 ping attempt failed with error: 53 | Get https://dhe.yourdomain.com/v1/_ping: x509: certificate signed by 54 | unknown authority. If this private registry supports only HTTP or HTTPS 55 | with an unknown CA certificate, please add `--insecure-registry 56 | dhe.yourdomain.com` to the daemon's arguments. In the case of HTTPS, if 57 | you have access to the registry's CA certificate, no need for the flag; 58 | simply place the CA certificate at 59 | /etc/docker/certs.d/dhe.yourdomain.com/ca.crt 60 | 61 | ## Pull镜像 62 | 63 | 你可以获取一个镜像通过docker pull命令,或者获取一个镜像并启动容器通过docker run命令。 64 | 为了获取镜像从DHE,启动容器,docker run命令需要添加如下的信息: 65 | 66 | $ docker run dhe.yourdomain.com/yourusername/hello-mine 67 | latest: Pulling from dhe.yourdomain.com/yourusername/hello-mine 68 | 511136ea3c5a: Pull complete 69 | 31cbccb51277: Pull complete 70 | e45a5af57b00: Already exists 71 | Digest: sha256:45f0de377f861694517a1440c74aa32eecc3295ea803261d62f950b1b757bed1 72 | Status: Downloaded newer image for dhe.yourdomain.com/demouser/hello-mine:latest 73 | 74 | 注意,如果你没有指定了版本号,默认将pull latest版本的镜像。 75 | 76 | 77 | 如果你运行docker images,你将看到hello-mine镜像。 78 | 79 | $ docker images 80 | REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 81 | dhe.yourdomain.com/yourusername/hello-mine latest e45a5af57b00 3 months ago 910 B 82 | 83 | 为了不使用构建容器的方式pull镜像,使用docker pull指定你的DHE私有库来添加镜像。 84 | 85 | $ docker pull dhe.yourdomain.com/yourusername/hello-mine 86 | 87 | ## 下一步 88 | 为了了解更多管理DHE,请阅读[DHE管理员指南](adminguide.md) 89 | -------------------------------------------------------------------------------- /Examples/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Examples/README.md -------------------------------------------------------------------------------- /Examples/compose_django.md: -------------------------------------------------------------------------------- 1 | # 使用Compose部署Django应用 # 2 | 3 | 快速入门指南将演示怎样使用Compose来安装和运行一个简单的Django/PostgreSQL应用。在开始之前,你确保已经阅读Compose installed。 4 | 5 | ## 定义项目 ## 6 | 7 | 以安装三个你需要构建的文件开始。首先,你的应用将运行在Docker容器里,包含它的所有依赖项(你将需要定义额外需要包括在容器里的内容)。这些我们都将在Dockerfile中去做。开始,Dockerfile包含: 8 | 9 | FROM python:2.7 10 | 11 | ENV PYTHONUNBUFFERED 1 12 | 13 | RUN mkdir /code 14 | 15 | WORKDIR /code 16 | 17 | ADD requirements.txt /code/ 18 | 19 | RUN pip install -r requirements.txt 20 | 21 | ADD ./code/ 22 | 23 | 这个Dockerfile将定义一个镜像,被使用来构建一个包含你应用和Python及其依赖项的容器。为了了解更多关于怎样书写Dockerfile的信息,请查看 Docker user guide和 Dockerfile reference。 24 | 25 | 其次,你将定义你的Python依赖项在一个文件中叫做requirements.txt。 26 | 27 | Django 28 | 29 | psycopg2 30 | 31 | 最后,这些将通过一个叫docker-compose.yml的文件联系起来。它描述包含你的应用的所有服务,同时也是Docker镜像所使用的服务;也描述他们怎样联系起来的,什么数据卷将会被挂载在容器里,什么端口他们将暴露。 32 | 33 | db: 34 | 35 | image: postgres 36 | 37 | web: 38 | 39 | build:. 40 | 41 | command: python manage.py runserver 0.0.0.0:8000 42 | 43 | volumes: 44 | 45 | - . : /code 46 | 47 | ports: 48 | 49 | -"8000:8000" 50 | 51 | links: 52 | 53 | - db 54 | 55 | 查看docker-compose.yml参考以了解更多关于怎样让这个文件起作用。 56 | 57 | ## 构建项目 58 | 59 | 你现在可以启动一个Django 项目使用`docker-compose run`命令: 60 | 61 | $ docker-compose run web django-admin.py startproject composeexample . 62 | 63 | 首先,通过使用Dockerfile,Compose 将构建一个提供web服务的镜像。它将在一个使用镜像构建的容器中运行django-admin.py startproject composeexample .。 64 | 65 | 这将生成Dijango应用在当前目录下: 66 | 67 | $ ls 68 | 69 | Dockerfile docker-compose.yml composeexample manage.pyrequirements.txt 70 | 71 | ## 链接数据库 72 | 73 | 现在,你需要安装数据库链接。替换DATABASES = ...定义,在composeexample/settings.py文件中。 74 | 75 | DATABASES ={ 76 | 77 | 'default':{ 78 | 79 | 'ENGINE':'django.db.backends.postgresql_psycopg2', 80 | 81 | 'NAME':'postgres', 82 | 83 | 'USER':'postgres', 84 | 85 | 'HOST':'db', 86 | 87 | 'PORT':5432, 88 | 89 | } 90 | 91 | } 92 | 93 | 这些设置将通过 postgres镜像确定。 94 | 95 | ## 稍后运行`docker-compose up` 96 | 97 | Recreating myapp_db_1... 98 | 99 | Recreating myapp_web_1... 100 | 101 | Attaching to myapp_db_1, myapp_web_1 102 | 103 | myapp_db_1 |myapp_db_1 |PostgreSQL stand-alone backend 9.1.11 104 | 105 | myapp_db_1 |2014-01-2712:17:03 UTC LOG: database system is ready to accept connections 106 | 107 | myapp_db_1 |2014-01-2712:17:03 UTC LOG: autovacuum launcher startedmyapp_web_1 |Validating models... 108 | 109 | myapp_web_1 | 110 | 111 | myapp_web_1 |0 errors found 112 | 113 | myapp_web_1 |January27,2014-12:12:40 114 | 115 | myapp_web_1 |Django version 1.6.1,using settings 'composeexample.settings' 116 | 117 | myapp_web_1 |Starting development server at http://0.0.0.0:8000/ 118 | 119 | myapp_web_1 |Quit the server with CONTROL-C. 120 | 121 | 你的Django应用需要运行在8000端口,在你的Docker daemon(如果你将使用Boot2docker,boot2docker ip将告诉你它的地址)。 122 | 123 | 你也可以运行管理命令使用Docker。为了安装你的数据库,例如,运行docker-compose up和在另外一个终端运行: 124 | 125 | $ docker-compose run web python manage.py syncdb 126 | 127 | ## 更多Compose文档 128 | 129 | Installing Compose 130 | 131 | User guide 132 | 133 | Command line reference 134 | 135 | Yaml file reference 136 | 137 | Compose environment variables 138 | 139 | Compose command line completion -------------------------------------------------------------------------------- /Examples/compose_rails.md: -------------------------------------------------------------------------------- 1 | # 使用Compose部署Rails应用 # 2 | 3 | 本次快速教程将展示怎样使用Compose来安装和运行 Rails/PostgreSQL应用,在开始之前,你需要了解Compose installed。 4 | 5 | ## 定义项目 ## 6 | 7 | 开始设定三个应用需要构建的文件。首先,当你应用将运行在一个Docker容器(包含所有它的依赖项)时,你将需要额外定义在容器中。这些,我们都使用Dockerfile来完成。开始,Docker包含内容: 8 | 9 | FROM ruby:2.2.0 10 | 11 | RUN apt-get update -qq && apt-get install -y build-essential libpq-dev 12 | 13 | RUN mkdir /myapp 14 | 15 | WORKDIR /myapp 16 | 17 | ADD Gemfile/myapp/Gemfile 18 | 19 | RUN bundle install 20 | 21 | ADD . /myapp 22 | 23 | 放置你的应用代码在构建有Ruby,Bundler和所有依赖项的镜像里边。了解更多书写Dockerfile的内容,查看 Docker user guide和Dockerfile reference。 24 | 25 | 接下来,创建一个Bootstrap的Gemfile文件。它将被rails new重写。 26 | 27 | source 'https://rubygems.org' 28 | 29 | gem 'rails','4.2.0' 30 | 31 | 最后,docker-compose.yml让所有逻辑生效。这个文件描述了包含你应用的所有服务,Docker镜像怎样获得每一个服务的,以及配置需要彼此链接在一起的,暴露的web应用端口。 32 | 33 | db: 34 | 35 | image: postgres 36 | 37 | ports: 38 | 39 | - "5432" 40 | 41 | web: 42 | 43 | build: . 44 | 45 | command: bundle exec rails s -p 3000-b '0.0.0.0' 46 | 47 | volumes: 48 | 49 | - . : /myapp 50 | 51 | ports: 52 | 53 | -"3000:3000" 54 | 55 | links: 56 | 57 | - db 58 | 59 | ## 构建项目 60 | 61 | 这三个文件就位,你现在可以生成Rails框架应用,使用docker-compose run命令: 62 | 63 | $ docker-compose run web rails new . --force --database=postgresql --skip-bundle 64 | 65 | 首先,Compose将构建包含web服务的镜像。然后,它将运行rails new在新的容器中。一旦完成,你应该生成一个崭新的应用。 66 | 67 | $ ls 68 | 69 | Dockerfile app docker-compose.yml tmp 70 | 71 | Gemfile bin lib vendor 72 | 73 | Gemfile.lock config log 74 | 75 | README.rdoc config.rupublic 76 | 77 | Rakefile db test 78 | 79 | 取消注释行,在你的新Gemfile将加载therubyracer,因此你获得一个JS运行时: 80 | 81 | gem 'therubyracer', platforms::ruby 82 | 83 | 现在,你获得一个新的Gemfile,你需要重新构建一次镜像。 84 | 85 | $ docker-compose build 86 | 87 | ## 连接数据库 88 | 89 | app现在是可引导的,但是你现在不会很安静。默认情况下,Rails期望一个数据库运行在localhost,因此你需要将它指向db容器里边。你也需要修改数据库和用户名,来与postgres镜像的默认设置联系起来。 90 | 91 | 打开新生成的database.yml文件。替换它的内容如下: 92 | 93 | development:&default 94 | 95 | adapter: postgresql 96 | 97 | encoding: unicode 98 | 99 | database: postgres 100 | 101 | pool:5 102 | 103 | username: postgres 104 | 105 | password: 106 | 107 | host: db 108 | 109 | test: 110 | 111 | <<:*default 112 | 113 | database: myapp_test 114 | 115 | 你现在可以重启app 116 | 117 | $ docker-compose up 118 | 119 | 如果完成,你需要看某些PostgreSQL 输出,然后隔几秒看到相似的输出: 120 | 121 | myapp_web_1 |[2014-01-1717:16:29] INFO WEBrick1.3.1 122 | 123 | myapp_web_1 |[2014-01-1717:16:29] INFO ruby 2.2.0(2014-12-25)[x86_64-linux-gnu] 124 | 125 | myapp_web_1 |[2014-01-1717:16:29] INFO WEBrick::HTTPServer#start: pid=1 port=3000 126 | 127 | 最后,你需要创建数据库。在其它终端,运行: 128 | 129 | $ docker-compose run web rake db:create 130 | 131 | 你的应用现在被运行在端口3000,在你的Docker daemon上(如果你使用Boot2docker,boot2docker ip将告诉你它的地址)。 132 | 133 | ## 更多Compose文档 134 | 135 | Installing Compose 136 | 137 | User guide 138 | 139 | Command line reference 140 | 141 | Yaml file reference 142 | 143 | Compose environment variables 144 | 145 | Compose command line completion 146 | 147 | -------------------------------------------------------------------------------- /Examples/compose_wordpress.md: -------------------------------------------------------------------------------- 1 | # 使用Compose部署Wordpress应用 2 | 3 | Compose使得运行wordpress在一个隔离的环境中变得容易且非常好。安装Compose ,然后下载Wordpress在当前目录中。 4 | 5 | $ curl https://wordpress.org/latest.tar.gz | tar -xvzf - 6 | 7 | 这将创建一个叫做`wordpress`的目录,如果你愿意你也可以重新命名你的工程名称,在那个目录下边,我们创建Dockerfile文件,定义你的应用的运行环境。 8 | 9 | FROM orchardup/php5 10 | 11 | ADD ./code 12 | 13 | 这描述docker将怎样构建一个包含php和wordpress的镜像。了解更多有关写dockerfile的内容,查看 Docker user guide 和Dockerfile reference。 14 | 15 | 接下来,docker-compose.yml 开启我们的web服务和一个分开的MySQL实例。 16 | 17 | web: 18 | 19 | build: . 20 | 21 | command: php -S 0.0.0.0:8000-t /code 22 | 23 | ports:-"8000:8000" 24 | 25 | links:- db 26 | 27 | volumes:-.:/code 28 | 29 | db: 30 | 31 | image: orchardup/mysql 32 | 33 | environment: 34 | 35 | MYSQL_DATABASE: wordpress 36 | 37 | 两个支持文件需要让这些工作有效,首先,wp-config.php 是标准的wordpress配置文件,带有一个需要修改数据库配置端口指向db容器。 38 | 39 | 说明:dockerfile是灵活的。然而,他们需要遵从某些格式。第一项,定义是一个镜像名称,成为docker化的MongoDB镜像不可或缺的父镜像。 32 | 33 | 我们将构建我们的镜像使用Docker Hub Ubuntu库中最近的Ubuntu版本镜像。 34 | 35 | # Format: FROM repository[:version] 36 | 37 | FROM ubuntu:latest 38 | 39 | 继续,我们将明确MAINTAINER : 40 | 41 | # Format: MAINTAINER Name 42 | 43 | MAINTAINER M.Y.Name 44 | 45 | 46 | 47 | 48 | > 说明:尽管Ubuntu系统有MongoDB软件包,但是可能已经过时了。因此,在这个例子中,我们将使用官方的MongoDB软件包。 49 | 50 | 我们将开始导入 MongoDB公共GPG key。我们也将创建一个MongoDB 库文件。 51 | 52 | # Installation: 53 | 54 | # Import MongoDB public GPG key AND create a MongoDB list file 55 | 56 | RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 57 | 58 | RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen'| tee /etc/apt/sources.list.d/10gen.list 59 | 60 | 初始化预处理过后,我们可以更新我们的包并安装MongoDB。 61 | 62 | # Update apt-get sources AND install MongoDB 63 | 64 | RUN apt-get update && apt-get install -y mongodb-org 65 | 66 | > 说明:你可以安装一个指定的MongoDB 版本,通过使用列举带版本号的依赖包,RUN apt-get update && apt-get install -y mongodb-org=2.6.1 mongodb-org-server=2.6.1 mongodb-org-shell=2.6.1 mongodb-org-mongos=2.6.1 mongodb-org-tools=2.6.1 67 | 68 | MongoDB依赖一个数据目录。让我们创建数据目录作为安装说明的最后一步: 69 | 70 | # Create the MongoDB data directory 71 | 72 | RUN mkdir -p /data/db 73 | 74 | 最后,我设置ENTRYPOINT ,告诉docker运行mongodb在容器启动时。至于端口,我们将使用EXPOSE 指令。 75 | 76 | # Expose port 27017 from the container to the host 77 | 78 | EXPOSE 27017 79 | 80 | # Set usr/bin/mongod as the dockerized entry-point application 81 | 82 | ENTRYPOINT usr/bin/mongod 83 | 84 | 现在,保存文件并构建镜像。 85 | 86 | > 说明:所有版本的Dockerfile可以在这里查看here。 87 | 88 | ## 构建MongoDB镜像 89 | 90 | 写完dockerfile,我们可以构建MongoDB镜像了。除了尝试,最好的方式就是添加镜像tag ,通过传递--tag参数在docker build命令后边。 91 | 92 | # Format: sudo docker build --tag/-t / . 93 | 94 | # Example: 95 | 96 | sudo docker build --tag my/repo . 97 | 98 | 一旦这个命令执行,docker将通过Dockerfile构建镜像。最后的镜像叫做my/repo。 99 | 100 | ## 发布MongoDB镜像到Docker Hub 101 | 102 | 所有的Docker镜像库可以是在自己机器上,也可以分享到Docker Hub上,使用docker push命令。为了达到这点,你需要登录: 103 | 104 | # Log-in 105 | 106 | sudo docker login 107 | 108 | Username: 109 | 110 | .. 111 | 112 | 113 | 114 | # Push the image 115 | 116 | # Format: sudo docker push / 117 | 118 | sudo docker push my/repo 119 | 120 | The push refers to a repository [my/repo](len:1) 121 | 122 | Sending image list 123 | 124 | Pushing repository my/repo (1 tags) 125 | 126 | .. 127 | 128 | ## 使用MongoDB镜像 129 | 130 | 使用MongoDB镜像,我们可以运行一个或者多个MongoDB实例: 131 | 132 | # Basic way 133 | 134 | # Usage: sudo docker run --name -d / 135 | 136 | $ sudo docker run --name mongo_instance_001 -d my/repo 137 | 138 | 139 | 140 | # Dockerized MongoDB, lean and mean! 141 | 142 | # Usage: sudo docker run --name -d / --noprealloc --smallfiles 143 | 144 | $ sudo docker run --name mongo_instance_001 -d my/repo --noprealloc --smallfiles 145 | 146 | 147 | 148 | # Checking out the logs of a MongoDB container 149 | 150 | # Usage: sudo docker logs 151 | 152 | sudo docker logs mongo_instance_001 153 | 154 | 155 | 156 | # Playing with MongoDB 157 | 158 | # Usage: mongo --port 159 | 160 | mongo --port 12345 161 | 162 | Linking containers 163 | 164 | Cross-host linking containers 165 | 166 | Creating an Automated Build -------------------------------------------------------------------------------- /Examples/nodejs_web_app.md: -------------------------------------------------------------------------------- 1 | # docker化Node.js 2 | 3 | 本示例的目标是告诉你怎样构建你自己的Docker镜像使用Dockerfile。为此我们将创建一个简单的Node.js hello world web应用运行在CentOS上。你可以获得全部源代码https://github.com/enokd/docker-node-hello/。 4 | 5 | ## 创建Node.js应用 6 | 7 | 首先,创建一个目录src,然后创建一个pachage.json文件(描述你的app和app依赖项): 8 | 9 | { 10 | 11 | "name":"docker-centos-hello", 12 | 13 | "private":true, 14 | 15 | "version":"0.0.1", 16 | 17 | "description":"Node.js Hello world app on CentOS using docker", 18 | 19 | "author":"Daniel Gasienica ", 20 | 21 | "dependencies":{"express":"3.2.4"} 22 | 23 | } 24 | 25 | 其次,创建一个index.js文件,定义web app使用Express.js框架。 26 | 27 | var express =require('express'); 28 | // Constantsvar 29 | PORT =8080; 30 | // App 31 | var app = express(); 32 | app.get('/',function(req, res){ 33 | res.send('Hello world\n'); 34 | }); 35 | app.listen(PORT); 36 | console.log('Running on http://localhost:'+ PORT); 37 | 38 | 接下来,我们将展示使用Docker在CentOS容器里运行这个app。首先,你将需要构建一个docker镜像。 39 | 40 | ## 创建Dockerfile 41 | 42 | 创建一个空的文件Dockerfile。 43 | 44 | touch Dockerfile 45 | 46 | 打开Dockerfile。 47 | 48 | 定义父镜像(你想使用来构建app 镜像基于的镜像)。这里,我们将使用在Docker Hub上的CentOS(tag:centos6): 49 | 50 | FROM centos:centos6 51 | 52 | 刚我们创建一个Node.js应用,所以你得先安装Node.js(npm)在你的CentOS镜像里。Node.js要求运行你的app,npm 安装你定义在package.json的应用依赖项。为了安装正确的package,我们将使用来自Node.js wiki的解释。 53 | 54 | # Enable EPEL for Node.js 55 | 56 | RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm 57 | 58 | # Install Node.js and npm 59 | 60 | RUN yum install -y npm 61 | 62 | 为了bundle你的app源代码到docker镜像中,使用COPY 命令。 63 | 64 | # Bundle app source 65 | 66 | COPY ./src 67 | 68 | 安装你的app依赖项使用npm二进制。 69 | 70 | # Install app dependencies 71 | 72 | RUN cd /src; npm install 73 | 74 | 你的app绑定到端口8080,因此你将使用EXPOSE指令: 75 | 76 | EXPOSE 8080 77 | 78 | 最后,定义运行你app的命令,使用CMD 79 | 80 | CMD ["node","/src/index.js"] 81 | 82 | ## 构建你的镜像 83 | 84 | 进入目录,有你的dockerfile和运行如下命令构建docker镜像。-t标志允许你的镜像添加tag,因此,使用的docker images命令,容易发现later。 85 | 86 | sudo docker build -t /centos-node-hello . 87 | 88 | 你的镜像,现在能被docker列举出来了。 89 | 90 | sudo docker images 91 | 92 | # Example 93 | 94 | REPOSITORY TAG ID CREATED 95 | 96 | centos centos6 539c0211cd768 weeks ago 97 | 98 | /centos-node-hello latest d64d3505b0d2 2 hours ago 99 | 100 | ## 运行镜像 101 | 102 | -d,以隔离模式运行你的镜像,让容器运行在后台。-p标志指定公有端口到容器私有端口。运行你事先构建好的镜像。 103 | 104 | sudo docker run -p 49160:8080-d /centos-node-hello 105 | 106 | 打印你app的输出: 107 | 108 | # Get container ID 109 | 110 | sudo docker ps 111 | 112 | # Print app output 113 | 114 | sudo docker logs 115 | 116 | # ExampleRunning on http://localhost:8080 117 | 118 | ## 测试 119 | 120 | 为了测试你的app,得到你应用(Docker映射的)端口。 121 | 122 | sudo docker ps 123 | 124 | # ExampleID IMAGE COMMAND ... PORTS 125 | 126 | ecce33b30ebf /centos-node-hello:latest node /src/index.js 49160->8080 127 | 128 | 在以上的示例中,docker映射容器的8080端口到49160端口。 129 | 130 | 现在你可以访问app使用curl。 131 | 132 | curl -i localhost:49160 133 | 134 | HTTP/1.1200 OK 135 | 136 | X-Powered-By:Express 137 | 138 | Content-Type: text/html; charset=utf-8 139 | 140 | Content-Length:12 141 | 142 | Date:Sun,02Jun201303:53:22 GMT 143 | 144 | Connection: keep-alive 145 | 146 | Hello world 147 | 148 | 如果你使用Boot2docker 在OS X上,端口实际映射到Docker host VM上,你需要使用如下命令: 149 | 150 | curl $(boot2docker ip):49160 151 | 152 | 我们希望这个教程对你有帮助,安装和运行Node.js在CentOS上使用Docker。你可以得到所有源代码 https://github.com/enokd/docker-node-hello/ 153 | 154 | -------------------------------------------------------------------------------- /Examples/running_redis_service.md: -------------------------------------------------------------------------------- 1 | # Docker化Redis Service 2 | 3 | 非常简单,毫无修饰,Redis Service附加到一个web 应用仅需使用link。 4 | 5 | ## 创建一个Redis docker容器 6 | 7 | 首先,我们创建一个Dockerfile为我们新的Redis镜像。 8 | 9 | 10 | 11 | FROM ubuntu:14.04 12 | 13 | RUN apt-get update && apt-get install -y redis-server 14 | 15 | EXPOSE 6379 16 | 17 | ENTRYPOINT ["/usr/bin/redis-server"] 18 | 19 | 接下来,我们构建一个镜像,替换为你自己的用户名。 20 | 21 | sudo docker build -t /redis . 22 | 23 | ## 运行Service 24 | 25 | 使用我们刚刚创建的镜像,命名你的容器为redis。 26 | 27 | -d运行Service,是容器运行在分离模式,让容器运行在后台。 28 | 29 | 重要的是,我们不用暴露任何端口在我们的容器中。相反,我们将使用容器链接来提供访问我们Redis数据库的权限。 30 | 31 | sudo docker run --name redis -d /redis 32 | 33 | ## 创建你的web应用容器 34 | 35 | 接下来,我们可以为我们的应用创建一个容器。我们将使用-link标志创建一个链接互联到redis容器中,并别名为db。这将创建一个安全通道到redis容器,暴露运行在容器内部的Redis实例到web应用容器中。 36 | 37 | sudo docker run --link redis:db -i -t ubuntu:14.04/bin/bash 38 | 39 | 在我们刚刚创建的容器内部,我们需要安装Redis,为了能得到redis-cli二进制来测试你的链接。 40 | 41 | sudo apt-get update 42 | 43 | sudo apt-get install redis-server 44 | 45 | sudo service redis-server stop 46 | 47 | 当,我们已经使用--link redis:db参数时,Docker已经创建一些环境变量在我们的web应用容器中了。 48 | 49 | $ env | grep DB_ 50 | 51 | # Should return something similar to this with your values 52 | 53 | DB_NAME=/violet_wolf/db 54 | 55 | DB_PORT_6379_TCP_PORT=6379 56 | 57 | DB_PORT=tcp://172.17.0.33:6379 58 | 59 | DB_PORT_6379_TCP=tcp://172.17.0.33:6379 60 | 61 | DB_PORT_6379_TCP_ADDR=172.17.0.33 62 | 63 | DB_PORT_6379_TCP_PROTO=tcp 64 | 65 | 我们可以看到,我们已经得到一个小的带前缀DB_环境变量列表。DB_来自链接别名指定的,但我们启动容器时。然我们使用DB_PORT_6379_TCP_ADDR变量来链接到Redis容器。 66 | 67 | $ redis-cli -h $DB_PORT_6379_TCP_ADDR 68 | 69 | $ redis 172.17.0.33:6379> 70 | 71 | $ redis 172.17.0.33:6379>set docker awesome 72 | 73 | OK 74 | 75 | $ redis 172.17.0.33:6379>get docker 76 | 77 | "awesome" 78 | 79 | $ redis 172.17.0.33:6379>exit 80 | 81 | 我们可能容易使用这些或者其它的环境变量在我们的web应用中,明确一个链接到我们的redis容器。 -------------------------------------------------------------------------------- /Examples/running_riak_service.md: -------------------------------------------------------------------------------- 1 | # Docker化Riak Service 2 | 3 | 本例子的目标是为了显示你怎样构建使用预安装Riak的Docker镜像。 4 | 5 | ## 创建Dockefile 6 | 7 | 创建一个空文件Dockerfile: 8 | 9 | $ touch Dockerfile 10 | 11 | 接下来,定义继承镜像。我们将使用在Docker Hub上有效的Ubuntu(tag:latest)。 12 | 13 | # Riak 14 | 15 | # 16 | 17 | # VERSION 0.1.0 18 | 19 | # Use the Ubuntu base image provided by dotCloud 20 | 21 | FROM ubuntu:latest 22 | 23 | MAINTAINER HectorCastro hector@basho.com 24 | 25 | 稍后,我们安装并配置一些依赖项: 26 | 27 | curl 被用来下载Basho's APT repository key 28 | 29 | lsb-release 帮助我们得到Ubuntu版本代号 30 | 31 | openssh-server允许我们远程登录容器同时加入Riak 结点以形成集群 32 | 33 | supervisor被使用来管理OpenSSH 和Riak进程 34 | 35 | # Install and setup project dependencies 36 | 37 | RUN apt-get update && apt-get install -y curl lsb-release supervisor openssh-server 38 | 39 | RUN mkdir -p /var/run/sshd 40 | 41 | RUN mkdir -p /var/log/supervisor 42 | 43 | 44 | 45 | RUN locale-gen en_US en_US.UTF-8 46 | 47 | 48 | 49 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 50 | 51 | 52 | 53 | RUN echo 'root:basho'| chpasswd 54 | 55 | 接下来,我们添加Basho's APT repository: 56 | 57 | RUN curl -sSL http://apt.basho.com/gpg/basho.apt.key | apt-key add -- 58 | 59 | RUN echo "deb http://apt.basho.com $(lsb_release -cs) main">/etc/apt/sources.list.d/basho.list 60 | 61 | 稍后,我们安装Riak,修改一些默认配置: 62 | 63 | # Install Riak and prepare it to run 64 | 65 | RUN apt-get update && apt-get install -y riak 66 | 67 | RUN sed -i.bak 's/127.0.0.1/0.0.0.0/'/etc/riak/app.config 68 | 69 | RUN echo "ulimit -n 4096">>/etc/default/riak 70 | 71 | 然后,我们暴露 Riak Protocol Buffers和HTTP接口(携带SSH): 72 | 73 | # Expose Riak Protocol Buffers and HTTP interfaces, along with SSH 74 | 75 | EXPOSE 8087 8098 22 76 | 77 | 最后,运行supervisord 以此让Riak和OpenSSH被启动。 78 | 79 | CMD ["/usr/bin/supervisord"] 80 | 81 | ## 创建一个supervisord 配置文件 82 | 83 | 创建一个空文件supervisord.conf。确保它和dockerfile在相同目录下: 84 | 85 | touch supervisord.conf 86 | 87 | 写入如下程序定义: 88 | 89 | [supervisord] 90 | 91 | nodaemon=true 92 | 93 | [program:sshd] 94 | 95 | command=/usr/sbin/sshd -D 96 | 97 | stdout_logfile=/var/log/supervisor/%(program_name)s.log 98 | 99 | stderr_logfile=/var/log/supervisor/%(program_name)s.log 100 | 101 | autorestart=true 102 | 103 | [program:riak] 104 | 105 | command=bash -c ". /etc/default/riak && /usr/sbin/riak console" 106 | 107 | pidfile=/var/log/riak/riak.pid 108 | 109 | stdout_logfile=/var/log/supervisor/%(program_name)s.log 110 | 111 | stderr_logfile=/var/log/supervisor/%(program_name)s.log 112 | 113 | ## 构建Riak镜像 114 | 115 | 现在你需要构建Riak镜像: 116 | 117 | $ sudo docker build -t "/riak". 118 | 119 | ## 接下来 120 | 121 | Riak 是一个分布式数据库。许多生产部署存在至少五个结点。查看 docker-riak项目关于怎样部署Riak集群使用Docker和Pipework的详细内容。 -------------------------------------------------------------------------------- /Examples/running_ssh_service.md: -------------------------------------------------------------------------------- 1 | # Docker化一个SSH服务 # 2 | 3 | ## 构建一个eg_sshd镜像 ## 4 | 5 | 如下的Dockerfile 安装一个SSHD服务在容器中,你可以使用链接SSH,监视其他容器的数据卷,或者快速获得一个测试容器的权限。 6 | 7 | # sshd 8 | 9 | # 10 | 11 | # VERSION 0.0.2 12 | 13 | 14 | 15 | FROM ubuntu:14.04 16 | 17 | MAINTAINER SvenDowideit 18 | 19 | 20 | 21 | RUN apt-get update && apt-get install -y openssh-server 22 | 23 | RUN mkdir /var/run/sshd 24 | 25 | RUN echo 'root:screencast'| chpasswd 26 | 27 | RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/'/etc/ssh/sshd_config 28 | 29 | 30 | 31 | # SSH login fix. Otherwise user is kicked off after login 32 | 33 | RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g'-i /etc/pam.d/sshd 34 | 35 | 36 | 37 | ENV NOTVISIBLE "in users profile" 38 | 39 | RUN echo "export VISIBLE=now">>/etc/profile 40 | 41 | 42 | 43 | EXPOSE 22 44 | 45 | CMD ["/usr/sbin/sshd","-D"] 46 | 47 | 使用命令构建镜像: 48 | 49 | $ sudo docker build -t eg_sshd . 50 | 51 | ## 运行test_sshd容器 ## 52 | 53 | 然后运行它。你可以稍后使用`docker port`来发现容器端口22映射到了主机的什么端口上: 54 | 55 | $ sudo docker run -d -P --name test_sshd eg_sshd 56 | 57 | $ sudo docker port test_sshd 22 58 | 59 | 0.0.0.0:49154 60 | 61 | 现在,我们可以ssh最为root在容器上的IP地址,或者Docker daemon host的IP地址和端口`48154`,或者localhost(如果当前是在Docker daemon host上)。 62 | 63 | $ ssh root@192.168.1.2-p 49154 64 | 65 | # The password is ``screencast``. 66 | 67 | $$ 68 | 69 | ## 环境变量 70 | 71 | 使用sshd daemon来生成shell确保它复杂地传递环境变量到用户shell,通过普通的docker机制,例如sshd 清除环境在它启动shell之前。 72 | 73 | 如果你将设置值,你在dockerfile中使用ENV,你将需要把他们放到一个shell初始化文件中,例如`/etc/profile`(在上边的Dockerfile是这样的)。 74 | 75 | 如果你需要传递`docker run -e ENV=value`,你将需要写一个简短的脚本来做相同的事情,在你启动sshd -D之前,然后替换CMD脚本。 76 | 77 | ## 清除 78 | 79 | 最后,清除你测试用的用例,通过使用停止和移除容器,然后移除镜像。 80 | 81 | $ sudo docker stop test_sshd 82 | 83 | $ sudo docker rm test_sshd 84 | 85 | $ sudo docker rmi eg_sshd -------------------------------------------------------------------------------- /Images/20150607200346.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150607200346.png -------------------------------------------------------------------------------- /Images/20150607200637.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150607200637.png -------------------------------------------------------------------------------- /Images/20150607201505.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150607201505.png -------------------------------------------------------------------------------- /Images/20150612230144.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150612230144.jpg -------------------------------------------------------------------------------- /Images/20150612230246.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150612230246.jpg -------------------------------------------------------------------------------- /Images/20150612230343.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150612230343.jpg -------------------------------------------------------------------------------- /Images/20150612230445.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/20150612230445.png -------------------------------------------------------------------------------- /Images/2406048100940639758.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/2406048100940639758.png -------------------------------------------------------------------------------- /Images/6630399262629212065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/6630399262629212065.png -------------------------------------------------------------------------------- /Images/6630719220513025143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/6630719220513025143.png -------------------------------------------------------------------------------- /Images/add-ssh-public-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/add-ssh-public-key.png -------------------------------------------------------------------------------- /Images/add_cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/add_cd.png -------------------------------------------------------------------------------- /Images/add_new_controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/add_new_controller.png -------------------------------------------------------------------------------- /Images/add_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/add_volume.png -------------------------------------------------------------------------------- /Images/admin-logs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/admin-logs.png -------------------------------------------------------------------------------- /Images/admin-metrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/admin-metrics.png -------------------------------------------------------------------------------- /Images/admin-settings-http-unlicensed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/admin-settings-http-unlicensed.png -------------------------------------------------------------------------------- /Images/admin-settings-http.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/admin-settings-http.png -------------------------------------------------------------------------------- /Images/admin-settings-license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/admin-settings-license.png -------------------------------------------------------------------------------- /Images/admin-settings-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/admin-settings-security.png -------------------------------------------------------------------------------- /Images/bad_host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/bad_host.png -------------------------------------------------------------------------------- /Images/boot_order.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/boot_order.png -------------------------------------------------------------------------------- /Images/branch-sig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/branch-sig.png -------------------------------------------------------------------------------- /Images/commits_expected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/commits_expected.png -------------------------------------------------------------------------------- /Images/console-pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/console-pull.png -------------------------------------------------------------------------------- /Images/console-push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/console-push.png -------------------------------------------------------------------------------- /Images/containers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/containers.png -------------------------------------------------------------------------------- /Images/contributor-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/contributor-edit.png -------------------------------------------------------------------------------- /Images/cool_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/cool_view.png -------------------------------------------------------------------------------- /Images/copy_url.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/copy_url.png -------------------------------------------------------------------------------- /Images/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/dashboard.png -------------------------------------------------------------------------------- /Images/docker-hub-org-enterprise-license-CSDE-dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/docker-hub-org-enterprise-license-CSDE-dropdown.png -------------------------------------------------------------------------------- /Images/docker-hub-org-enterprise-license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/docker-hub-org-enterprise-license.png -------------------------------------------------------------------------------- /Images/easy_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/easy_issue.png -------------------------------------------------------------------------------- /Images/existing_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/existing_issue.png -------------------------------------------------------------------------------- /Images/fixes_num.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/fixes_num.png -------------------------------------------------------------------------------- /Images/fork_docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/fork_docker.png -------------------------------------------------------------------------------- /Images/git_bash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/git_bash.png -------------------------------------------------------------------------------- /Images/good_host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/good_host.png -------------------------------------------------------------------------------- /Images/gordon.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/gordon.jpeg -------------------------------------------------------------------------------- /Images/gparted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/gparted.png -------------------------------------------------------------------------------- /Images/gparted2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/gparted2.png -------------------------------------------------------------------------------- /Images/groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/groups.png -------------------------------------------------------------------------------- /Images/hub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/hub.png -------------------------------------------------------------------------------- /Images/installing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/installing.png -------------------------------------------------------------------------------- /Images/irc_after_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/irc_after_login.png -------------------------------------------------------------------------------- /Images/irc_chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/irc_chat.png -------------------------------------------------------------------------------- /Images/irc_connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/irc_connect.png -------------------------------------------------------------------------------- /Images/issue_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/issue_list.png -------------------------------------------------------------------------------- /Images/jenkins-plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/jenkins-plugins.png -------------------------------------------------------------------------------- /Images/jenkins-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/jenkins-ui.png -------------------------------------------------------------------------------- /Images/kitematic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/kitematic.png -------------------------------------------------------------------------------- /Images/latest_commits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/latest_commits.png -------------------------------------------------------------------------------- /Images/list_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/list_example.png -------------------------------------------------------------------------------- /Images/locate_branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/locate_branch.png -------------------------------------------------------------------------------- /Images/login-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/login-github.png -------------------------------------------------------------------------------- /Images/minecraft-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-create.png -------------------------------------------------------------------------------- /Images/minecraft-data-volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-data-volume.png -------------------------------------------------------------------------------- /Images/minecraft-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-login.png -------------------------------------------------------------------------------- /Images/minecraft-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-map.png -------------------------------------------------------------------------------- /Images/minecraft-port.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-port.png -------------------------------------------------------------------------------- /Images/minecraft-restart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-restart.png -------------------------------------------------------------------------------- /Images/minecraft-server-address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/minecraft-server-address.png -------------------------------------------------------------------------------- /Images/newsite_view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/newsite_view.png -------------------------------------------------------------------------------- /Images/nginx-2048-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/nginx-2048-files.png -------------------------------------------------------------------------------- /Images/nginx-2048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/nginx-2048.png -------------------------------------------------------------------------------- /Images/nginx-data-folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/nginx-data-folder.png -------------------------------------------------------------------------------- /Images/nginx-data-volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/nginx-data-volume.png -------------------------------------------------------------------------------- /Images/nginx-hello-world.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/nginx-hello-world.png -------------------------------------------------------------------------------- /Images/nginx-serving-2048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/nginx-serving-2048.png -------------------------------------------------------------------------------- /Images/org-repo-collaborators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/org-repo-collaborators.png -------------------------------------------------------------------------------- /Images/orgs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/orgs.png -------------------------------------------------------------------------------- /Images/osx-installer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/osx-installer.png -------------------------------------------------------------------------------- /Images/proposal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/proposal.png -------------------------------------------------------------------------------- /Images/pull_request_made.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/pull_request_made.png -------------------------------------------------------------------------------- /Images/register_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/register_email.png -------------------------------------------------------------------------------- /Images/register_nic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/register_nic.png -------------------------------------------------------------------------------- /Images/rethink-container.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/rethink-container.png -------------------------------------------------------------------------------- /Images/rethink-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/rethink-create.png -------------------------------------------------------------------------------- /Images/rethink-ports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/rethink-ports.png -------------------------------------------------------------------------------- /Images/rethinkdb-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/rethinkdb-preview.png -------------------------------------------------------------------------------- /Images/three_running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/three_running.png -------------------------------------------------------------------------------- /Images/three_terms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/three_terms.png -------------------------------------------------------------------------------- /Images/to_from_pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/to_from_pr.png -------------------------------------------------------------------------------- /Images/win_docker_host.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/win_docker_host.png -------------------------------------------------------------------------------- /Images/windows-boot2docker-cmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/windows-boot2docker-cmd.png -------------------------------------------------------------------------------- /Images/windows-boot2docker-powershell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/windows-boot2docker-powershell.png -------------------------------------------------------------------------------- /Images/windows-boot2docker-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/windows-boot2docker-start.png -------------------------------------------------------------------------------- /Images/windows-installer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/windows-installer.png -------------------------------------------------------------------------------- /Images/windows-mingw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Images/windows-mingw.png -------------------------------------------------------------------------------- /Installation/README.md: -------------------------------------------------------------------------------- 1 | # 安装 2 | 3 | 本章节主要对docker不同环境下的安装做了详细说明。 4 | 5 | ## 章节列表 6 | 7 | * [在Ubuntu环境下进行Docker安装](ubuntu.md) 8 | * [在Amazon EC2上安装Docker](amazon.md) 9 | * [在Arc Linux上安装Docker](Arc Linux.md) 10 | * [以Binaries形式安装Docker](binaries.md) 11 | * [在CentOS上安装Docker](centos.md) 12 | * [在CRUX Linux上安装Docker](cruxlinux.md) 13 | * [在Debian上安装Docker](debian.md) 14 | * [在Fedoras上安装Docker](fedora.md) 15 | * [在Frugalware上安装Docker](frugalware.md) 16 | * [在Google Cloud Platform上安装Docker](google cloud platform.md) 17 | * [在Gentoo上安装Docker](gentoo.md) 18 | * [在IBM SoftLayer上安装Docker](softlayer.md) 19 | * [在Rackspace Cloud上安装Docker](rackspace.md) 20 | * [在Red Hat Enterprise Linux上安装Docker](rhel.md) 21 | * [在Oracle Linux上安装Docker](oracle.md) 22 | * [在SUSE上安装Docker](SUSE.md) 23 | * [安装Docker Compose](compose.md) 24 | -------------------------------------------------------------------------------- /Installation/SUSE.md: -------------------------------------------------------------------------------- 1 | # openSUSE 2 | 3 | Docker 在 **openSUSE 12.3 及以后** 都可用。但是请注意,基于当前Docker技术的限制,Docker只能运行在 **64位** 的系统上。 4 | 5 | 在 openSUSE 12.3 和 openSUSE 13.1版本中,Docker不是官方默认的源。 6 | 因此为了安装 docker 软件包,必须从[OBS](https://build.opensuse.org/) 7 | 中添加[Virtualization repository](https://build.opensuse.org/project/show/Virtualization)。 8 | 9 | 执行下面任一命令添加虚拟化仓库: 10 | 11 | # openSUSE 12.3 12 | $ sudo zypper ar -f http://download.opensuse.org/repositories/Virtualization/openSUSE_12.3/ Virtualization 13 | 14 | # openSUSE 13.1 15 | $ sudo zypper ar -f http://download.opensuse.org/repositories/Virtualization/openSUSE_13.1/ Virtualization 16 | 17 | openSUSE 13.2 及以后版本不需要额外的仓库。 18 | 19 | # SUSE Linux Enterprise 20 | 21 | Docker 在 **SUSE Linux Enterprise 12 and later** 都可用。但是请注意,基于当前Docker技术的限制,Docker只能运行在 **64位** 的系统上。 22 | 23 | 24 | ## 安装 25 | 26 | 安装 Docker 包。 27 | 28 | $ sudo zypper in docker 29 | 30 | 现在已经安装了,让我们来启动 Docker 守护进程。 31 | 32 | $ sudo systemctl start docker 33 | 34 | 如果我们想要Docker 开机自启动,我们应该专业: 35 | 36 | $ sudo systemctl enable docker 37 | 38 | Docker 安装包会自动创建一个新的docker组。如果用户不是root用户, 39 | 为了能与Docker 守护进程交互,需要将用户加入这个组。你可以像下面这样 40 | 添加用户: 41 | 42 | 43 | $ sudo /usr/sbin/usermod -a -G docker 44 | 45 | 验证是否已经像预期的那样生效: 46 | 47 | $ sudo docker run --rm -i -t opensuse /bin/bash 48 | 49 | 这会下载并导入 `opensuse` 镜像,并在容器中启动 `bash`。输入 `exit` 50 | 退出容器。 51 | 52 | 如果你想你的容器可以访问外部网关,你必须启用 `net.ipv4.ip_forward` 规则。 53 | 这可以使用YaST 完成,到`Network Devices -> Network Settings -> Routing`菜单,确保勾选`Enable IPv4 Forwarding` 。 54 | 55 | 如果网络是被Network Manager组件管理的,则上面的选择无法更改。在这种情况下, 56 | 可以手动的编辑 `/etc/sysconfig/SuSEfirewall2` 文来,确保 `FW_ROUTE` 选项设置成 `yes` ,就像下面这样: 57 | 58 | FW_ROUTE="yes" 59 | 60 | 61 | **完成!** 62 | 63 | ## 定制守护进程选项 64 | 65 | 如果你需要增加一个HTTP Proxy, 给Docker设置一个不同的目录或分区作为运行时的文件集, 66 | 或者做其他的定制,请阅读我们的系统文章来学习:[customize your systemd Docker daemon options](/articles/systemd/)。 67 | 68 | ## 卸载 69 | 70 | 卸载 Docker 软件包: 71 | 72 | $ sudo zypper rm docker 73 | 74 | 上面的命令不会删除你机器上的镜像,容器,卷,或者自定义的文件。如果你想要删除所有的镜像,容器 75 | 和卷,执行下面命令: 76 | 77 | $ rm -rf /var/lib/docker 78 | 79 | 你必须手动删除自定义的文件。 80 | 81 | ## 下一步 82 | 83 | 继续阅读 [用户指南](../UserGuide/README.md)。 84 | -------------------------------------------------------------------------------- /Installation/amazon.md: -------------------------------------------------------------------------------- 1 | # AMAZON EC2 2 | --------------------- 3 | 4 | 在Amazon EC2上安装Docker有许多方法。你可以使用Amazon Linux,因为在它的软件库中包含了Docker安装包,你也可以选择其他支持Linux的镜像,比如 Standard Ubuntu Installation. 5 | 6 | ##### 当然,前提是你要有一个AWS的账号。 7 | 8 | ## Amazon QuickStart with Amazon Linux AMI 2014.09.1 ## 9 | 10 | 最新的Amazon Linux AMI, 2014.09.1 已经支持Docker了,可以从AWS的软件库中获取Docker的安装包,步骤如下: 11 | 12 | 1. 选择你要使用的镜像 13 | 2. 在AWS控制台中点击[创建实例向导](https://console.aws.amazon.com/ec2/v2/home?#LaunchInstanceWizard:) 14 | 3. 在快速开始菜单中,选择 **AMI for Amazon Linux 2014.09.1** 15 | 4. 如果是为了简单的练习使用,你可以使用默认的 ```t2.micro``` 实例 16 | 5. 点击右下角的 **Next: Configure Instance Details** 17 | 6. 后面几步默认就可以了,现在你的Amazon Linux实例就已经跑起来了! 18 | 7. 现在,我们要在这个实例中安装Docker,首先要通过SSH连接到我们的实例:```ssh -i ec2-user@``` 19 | 8. 连接上去后,安装Docker:```sudo yum install -y docker``` 20 | 9. 运行Docker: ``` sudo service docker start``` 21 | 22 | ##### 如果这是你第一次使用AWS ,你可能需要对SSH进行一些设置 23 | 24 | 默认情况下,实例中所有的输入端口都会被AWS安全组( AWS Security Group)屏蔽,所以你在连接时可能会出现连接超时的错误。 25 | 26 | Docker安装完毕后,你就可以参考[用户指南](../UserGuide/README.md) 27 | 28 | ## Standard Ubuntu Installation 29 | 30 | 如果你想自己动手安装Docker,你可以参照[Ubuntu安装方法](ubuntulinux.md)在你的EC2 ubuntu实例中安装。 31 | -------------------------------------------------------------------------------- /Installation/archlinux.md: -------------------------------------------------------------------------------- 1 | # Arch Linux 2 | 3 | 在 Arch Linux 上安装Docker可以通过package的方式,有如下两种package: 4 | - [Arch Linux社区安装包](https://www.archlinux.org/packages/community/x86_64/docker/) 5 | - AUR 安装包 [docker-git](https://aur.archlinux.org/packages/docker-git/) 6 | 7 | 第一种方式会安装最新版本的Docker,而第二中方式是直接从Docker master分支build 8 | 9 | ## 依赖关系 10 | 11 | Docker核心的依赖包如下: 12 | - bridge-utils 13 | - device-mapper 14 | - iproute2 15 | - lxc 16 | - sqlite 17 | 18 | ## 安装 19 | 20 | 如果采用的是上面第一种方式的package,执行如下安装命令: 21 | ``` 22 | pacman -S docker 23 | ``` 24 | 25 | 如果是AUR的方式,就执行下面的命令: 26 | ``` 27 | yaourt -S docker-git 28 | ``` 29 | > 这种情况默认是你已经安装了**yaourt**,如果没有安装,可以查看这篇文章:[Arch User Repository](https://wiki.archlinux.org/index.php/Arch_User_Repository#Installing_packages) 30 | 31 | 32 | ## 运行Docker 33 | 34 | Docker在运行之前会是一个Systemd形式的服务,现在执行下面的命令来运行我们的Docker吧: 35 | ``` 36 | $ sudo systemctl start docker 37 | ``` 38 | 39 | 还可以让Docker开机自启: 40 | ``` 41 | $ sudo systemctl enable docker 42 | ``` 43 | 44 | ## 守护进程(daemon)的一些设置 45 | 46 | 如果你需要一个http的代理,可以在docker运行时指定不同的目录或分区,如果你先要一些其它的自定义,请查看 [customize your systemd Docker daemon options](https://docs.docker.com/articles/systemd/) -------------------------------------------------------------------------------- /Installation/azure.md: -------------------------------------------------------------------------------- 1 | page_title: Installation on Microsoft Azure platform 2 | page_description: Instructions for creating a Docker-ready virtual machine on Microsoft Azure cloud platform. 3 | page_keywords: Docker, Docker documentation, installation, azure, microsoft 4 | 5 | # Microsoft Azure 6 | 7 | ## 在Microsoft Azure创建一个Docker主机 8 | 9 | 请阅读如下详细教程在[Microsoft Azure][0]上,找到创建Docker预装的Linux虚拟机的不同方式: 10 | 11 | * [Docker Virtual Machine Extensions on Azure][1] 12 | * [How to use the Docker VM Extension from Azure Cross-Platform Interface][2] 13 | * [How to use the Docker VM Extension with the Azure Portal][3] 14 | * [Using Docker Machine with Azure][4] 15 | 16 | ## 下一步 17 | 18 | 继续阅读 [用户指南](../UserGuide/README.md)。 19 | 20 | [0]: http://azure.microsoft.com/ 21 | [1]: http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-vm-extension/ 22 | [2]: http://azure.microsoft.com/documentation/articles/virtual-machines-docker-with-xplat-cli/ 23 | [3]: http://azure.microsoft.com/documentation/articles/virtual-machines-docker-with-portal/ 24 | [4]: http://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-machine/ -------------------------------------------------------------------------------- /Installation/centos.md: -------------------------------------------------------------------------------- 1 | # CentOS 2 | 3 | Docker支持以下几个版本的CentOS: 4 | 5 | * CentOS 7 (64-bit) 6 | * CentOS 6.5 (64-bit) 及更高版本 7 | 8 | 本文描述可能也支持具有相同二进制编译的EL6/EL7分支,例如Scientific Linux等。但是,这些还没有测试过。 9 | 10 | 请注意,基于当前Docker技术的限制,Docker只能运行在 **64位** 的系统上。 11 | 12 | ## 内核支持 13 | 14 | 当前CentOS将仅仅支持Docker,当运行在分布式内核。如果你运行在沙盒之外或非分布式内核包上,因为有内核修改,将会造成bug。 15 | 16 | 在[CentOS-6.5](http://www.centos.org/)或更高版本的CentOS上运行Docker,内核需要升级到2.6.32-431或更高版本,这些版本的内核做了特别的修正,使得Docker可以在这些内核上运行。 17 | 18 | ## 在CentOS-7上安装Docker 19 | 20 | Docker默认情况已经在CentOS-Extras软件包中已经包含了。运行以下安装命令: 21 | 22 | $ sudo yum install docker 23 | 24 | 安装好后可以查看,下文“启动Docker Daemon”。 25 | 26 | ## FirewallD 27 | 28 | CentOS-7引入了firewalld,包装了iptables功能可能会和Docker冲突. 29 | 30 | 当firewalld启动或者重启时,它将从iptables列表中移除Docker chain,阻止Docker友好的运行。 31 | 32 | 当使用Systemd时,firewalld会在docker之前启动,如果你要从firewalld之后启动Docker,你必须得重启Docker daemon。 33 | 34 | ## 在CentOS-6.5上安装Docker 35 | 36 | 对于CentOS-6.5, Docker软件包是[Extra Packages for Enterprise Linux (EPEL)](https://fedoraproject.org/wiki/EPEL)软件包的一部分, 一个社区创建和维护的对于RHEL贡献的补充包。 37 | 38 | 首先,你需要确保你有EPEL软件包可用。没有的话,请阅读[EPEL安装说明](https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F)。 39 | 40 | 对于CentOS-6,有一个包的名称可能会和系统托盘应用冲突,妨碍运行,因此Docker PRM包叫做docker-io。 41 | 42 | 为了能顺利安装docker-io到CentOS-6上, 你首先需要移除docker软件包. 43 | 44 | $ sudo yum -y remove docker 45 | 46 | 接下来安装docker-io软件包,这将安装Docker在你的主机上。 47 | 48 | $ sudo yum install docker-io 49 | 50 | 安装好后可以查看,下文“启动Docker Daemon”。 51 | 52 | ## 手动安装Docker的最新版本 53 | 54 | 当使用推荐的方法安装Docker时,安装的往往不是最新的Docker版本。如果你需要安装最新版本,你可以直接安装二进制文件。 55 | 56 | 当通过二进制而不通过软件包的形式安装,你可能需要整合Docker和Systemd。为此,需要从[Github库](https://github.com/docker/docker/tree/master/contrib/init/systemd)上安装两个unit files(service 和 socket)到/etc/systemd/system。 57 | 58 | 请开始使用Docker服务。 59 | 60 | ## 启动Docker Daemon 61 | 62 | Docker装好后,我们需要启动Docker的服务: 63 | 64 | $ sudo service docker start 65 | 66 | 如果我们想开始启动Docker,我们也可以: 67 | 68 | $ sudo chkconfig docker on 69 | 70 | 我们看看Docker是不是在工作。首先,我们需要得到centos的最新镜像。 71 | 72 | $ sudo docker pull centos 73 | 74 | 下一步我们确定一下我们可以看到这个映像 75 | 76 | $ sudo docker images centos 77 | 78 | 这将产生类似于下面的输出: 79 | 80 | $ sudo docker images centos 81 | REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 82 | centos latest 0b443ba03958 2 hours ago 297.6 MB 83 | 84 | 运行一个简单的bash命令,来测试一下这个Docker映像: 85 | 86 | $ sudo docker run -i -t centos /bin/bash 87 | 88 | 如果一切都正确工作,你将得到一个简单的bash提示符。打exit可以退出继续。 89 | 90 | ## 定制服务 91 | 92 | 如果你需要增加一个HTTP Proxy, 给Docker设置一个不同的目录或分区作为运行时的文件集,或者做其他的定制,请阅读我们系统的文章:如果定制你的Docker系统服务。 93 | 94 | ## Dockerfile 95 | 96 | CentOS项目提供了很多Docer文件系统的例子。你可以用作模板,从而是你更熟悉Docker。这些模板提供在GitHub的https://github.com/CentOS/CentOS-Dockerfiles 97 | 98 | 完成!你可以继续使看Docker用户指南,或者建立或浏览一个你自己的Docker镜像。 99 | 100 | ## 建议或意见 101 | 102 | 如果你有什么建议或者意见,请直接汇报至[CentOS bug tracker](http://bugs.centos.org/)。 103 | -------------------------------------------------------------------------------- /Installation/cruxlinux.md: -------------------------------------------------------------------------------- 1 | # CRUX Linux 环境下安装Docker 2 | 3 | CRUX Linux环境下的安装可以通过contrib ports从 4 | [James Mills](http://prologic.shortcircuit.net.au/) 和官方[contrib](http://crux.nu/portdb/?a=repo&q=contrib) ports: 5 | 6 | - docker 7 | 8 | `docker` port 将构建和安装最新版本的的Docker。 9 | 10 | 11 | ## 安装 12 | 13 | 假设你的contrib有效, 更新你的ports tree 安装docker: 14 | 15 | $ sudo prt-get depinst docker 16 | 17 | 18 | ## 内核要求 19 | 20 | 有一个可用的 **CRUX+Docker** 主机,你必须确保你的内核有可用的模块供Docker Daemon功能调用。 21 | 22 | 请阅读`README`: 23 | 24 | $ sudo prt-get readme docker 25 | 26 | `docker` port 安装 `contrib/check-config.sh`脚本(Docker贡献者所支持),以便检查你的内核配置,让你的Docker 主机有效。 27 | 28 | 运行该脚本: 29 | 30 | $ /usr/share/docker/check-config.sh 31 | 32 | ## 启动docker 33 | 34 | 这里有一个rc脚本启动Docker服务: 35 | 36 | $ sudo /etc/rc.d/docker start 37 | 38 | 为了在系统引导中启动: 39 | 40 | - 编辑`/etc/rc.conf` 41 | - 把`docker` 放进`SERVICES=(...)` 数组,在`net`后面。 42 | 43 | ## 镜像 44 | 45 | 一个CRUX镜像由 [James Mills](http://prologic.shortcircuit.net.au/)维护作为Docker官方库的镜像。为了使用镜像简单的pull或者使用它作为`FROM` 行的参数在你的`Dockerfile(s)`文件中。 46 | 47 | $ docker pull crux 48 | $ docker run -i -t crux 49 | 50 | 在DockerHub上,这里也有个人贡献的 [CRUX based image(s)](https://registry.hub.docker.com/repos/crux/) 。 51 | 52 | 53 | ## 卸载 54 | 为了卸载Docker包: 55 | 56 | $ sudo prt-get remove --purge docker 57 | 58 | 命令将不会移除镜像,容器,数据卷,或者用户创建的配置文件。如果你希望删除所有镜像,容器,数据卷 ,运行如下命令: 59 | 60 | $ rm -rf /var/lib/docker 61 | 62 | 你必须手动删除用户创建的配置项。 63 | 64 | ## 建议或者意见 65 | 66 | 如果你任何意见或者建议请点击[CRUX Bug Tracker](http://crux.nu/bugs/). 67 | 68 | ## Support 69 | 70 | 了解更多支持的介绍 [CRUX Mailing List](http://crux.nu/Main/MailingLists) 71 | 或者加入CRUX's [IRC Channels](http://crux.nu/Main/IrcChannels).有关 72 | [FreeNode](http://freenode.net/) IRC Network的信息。 73 | -------------------------------------------------------------------------------- /Installation/debian.md: -------------------------------------------------------------------------------- 1 | # Debian环境下安装Docker 2 | 3 | Docker支持如下Debian版本: 4 | 5 | - [*Debian 8.0 Jessie (64-bit)*](#debian-jessie-80-64-bit) 6 | - [*Debian 7.7 Wheezy (64-bit)*](#debian-wheezystable-7x-64-bit) 7 | 8 | ## Debian Jessie 8.0 (64-bit) 9 | 10 | Debian 8带有3.16.0 Linux内核, `docker.io` 包 可以在 `jessie-backports` 软件包中发现。 其背后的原因请点击这里。 介绍怎样补丁库有效请点击 这里。 11 | 12 | > **Note**: 13 | > Debian包含许多老的KDE3/GNOME2包,叫``docker``,因此 14 | > 其执行包叫做``docker.io``. 15 | 16 | ### 安装 17 | 18 | 确保`jessie-backports`软件包可用, 阅读上文。 19 | 20 | 为了安装最新 Debian 上的包 (可能不是最新的Docker版本): 21 | 22 | $ sudo apt-get update 23 | $ sudo apt-get install docker.io 24 | 25 | 验证工作是否成功: 26 | 27 | $ sudo docker run --rm hello-world 28 | 29 | 这个命令将下载 `hello-world` 镜像运行为一个容器。当容器运行它将打印信息。随后停止。 30 | 31 | > **说明**: 32 | > 如果你想确保memory和swap计数可用请点击 33 | > [这里](/installation/ubuntulinux/#memory-and-swap-accounting). 34 | 35 | ### 卸载 36 | 37 | 为了卸载Docker包: 38 | 39 | $ sudo apt-get purge docker-io 40 | 41 | 为了永久卸载Docker及其依赖包,你应该这样: 42 | 43 | $ sudo apt-get autoremove --purge docker-io 44 | 45 | 命令将不会移除镜像,容器,数据卷,或者用户创建的配置文件。如果你希望删除所有镜像,容器,数据卷 ,运行如下命令: 46 | 47 | $ rm -rf /var/lib/docker 48 | 49 | 你必须手动删除用户创建的配置项。 50 | 51 | ## Debian Wheezy/Stable 7.x (64-bit) 52 | 53 | Docker要求Kernel 3.8+,当Wheezy携带Kernel 3.2 (为了了解更多为什么要使用3.8+内核,请阅读 54 | [bug #407](https://github.com/docker/docker/issues/407))。 55 | 56 | 幸运的是, wheezy-backports 目前有[Kernel 3.16 57 | ](https://packages.debian.org/search?suite=wheezy-backports§ion=all&arch=any&searchon=names&keywords=linux-image-amd64), 58 | 该版本正式支持Docker。 59 | 60 | ### Installation 61 | 62 | 1. 从wheezy-backports安装内核 63 | 64 | 在文件 `/etc/apt/sources.list`中添加如下行 65 | 66 | `deb http://http.debian.net/debian wheezy-backports main` 67 | 68 | 然后安装`linux-image-amd64`包 (注意使用 69 | `-t wheezy-backports`) 70 | 71 | $ sudo apt-get update 72 | $ sudo apt-get install -t wheezy-backports linux-image-amd64 73 | 74 | 2. 重启你的系统。对于Debian来说使用新内核是必要的。 75 | 76 | 3. 安装Docker,使用get.docker.com 的脚本: 77 | 78 | `curl -sSL https://get.docker.com/ | sh` 79 | 80 | ### 卸载 81 | 82 | 为了卸载Docker包: 83 | 84 | $ sudo apt-get purge lxc-docker 85 | 86 | 为了永久卸载Docker及其依赖包,你应该这样: 87 | 88 | $ sudo apt-get autoremove --purge lxc-docker 89 | 90 | 命令将不会移除镜像,容器,数据卷,或者用户创建的配置文件。如果你希望删除所有镜像,容器,数据卷 ,运行如下命令: 91 | 92 | $ rm -rf /var/lib/docker 93 | 94 | 你必须手动删除用户创建的配置项。 95 | 96 | ## 获得非root权限 97 | 98 | `docker` daemon总是运行在root账户, `docker` 99 | daemon 绑定一个Unix socket 替代TCP端口. 默认情况 100 | Unix socket被账户*root*所拥有, 因此你需要取得操作权限,通过添加`sudo`。 101 | 102 | 如果你或者Docker安装者创建了一个Unix group 叫 *docker* 103 | 并向它添加账户,然后`docker` daemon将会确保其Unix socket被*docker* 组所读写,当daemon启动时。 `docker` daemon必须一直运行在root账户, 除非你运行的是`docker` client ,作为*docker*组的用户你不需要为所有的客户端命令添加`sudo`。 104 | 105 | > **警告**: 106 | > *docker* 组 (或者指定组使用`-G`)是root等价的; 107 | > 阅读[*Docker Daemon Attack Surface*](../Articles/security.md#docker-daemon-attack-surface)详细说明。 108 | 109 | 110 | **例如:** 111 | 112 | # Add the docker group if it doesn't already exist. 113 | $ sudo groupadd docker 114 | 115 | # Add the connected user "${USER}" to the docker group. 116 | # Change the user name to match your preferred user. 117 | # You may have to logout and log back in again for 118 | # this to take effect. 119 | $ sudo gpasswd -a ${USER} docker 120 | 121 | # Restart the Docker daemon. 122 | $ sudo service docker restart 123 | 124 | 125 | ## 下一步 126 | 127 | 继续阅读 [用户指南](../UserGuide/README.md)。 128 | -------------------------------------------------------------------------------- /Installation/fedora.md: -------------------------------------------------------------------------------- 1 | # Fedora环境下安装Docker 2 | 3 | Docker安装支持如下Fedora版本: 4 | 5 | - [*Fedora 20 (64-bit)*](#fedora-20-installation) 6 | - [*Fedora 21 and later (64-bit)*](#fedora-21-and-later-installation) 7 | 8 | 当前Fedora项目仅仅支持Docker当运行在分布式内核中。内核的修改将造成问题,如果决定继续在box外运行非分布式内核包。 9 | 10 | ## Fedora 21 and later 11 | 12 | ### 安装 13 | 14 | 安装Docker包将在你的主机上安装docker。 15 | 16 | $ sudo yum -y install docker 17 | 18 | 为了更新Docker包: 19 | 20 | $ sudo yum -y update docker 21 | 22 | 接下来阅读下文 [Starting the Docker daemon](#starting-the-docker-daemon). 23 | 24 | ### Uninstallation 25 | 26 | 为了卸载Docker包: 27 | 28 | $ sudo yum -y remove docker 29 | 30 | 命令将不会移除镜像,容器,数据卷,或者用户创建的配置文件。如果你希望删除所有镜像,容器,数据卷 ,运行如下命令: 31 | 32 | $ rm -rf /var/lib/docker 33 | 34 | 你必须手动删除用户创建的配置项。 35 | 36 | ## Fedora 20 37 | 38 | ### 安装 39 | 40 | 对于`Fedora 20`, 包名会和系统托盘冲突, 因此Docker RPM 包叫做`docker-io`. 41 | 42 | 为了 安装`docker-io`在Fedora 20上, 请首先移除`docker`包。 43 | 44 | $ sudo yum -y remove docker 45 | $ sudo yum -y install docker-io 46 | 47 | 为了更新Docker包: 48 | 49 | $ sudo yum -y update docker-io 50 | 51 | 接下来请阅读下文 [Starting the Docker daemon](#starting-the-docker-daemon). 52 | 53 | ### 卸载 54 | 55 | 为了卸载Docker包: 56 | 57 | $ sudo yum -y remove docker-io 58 | 59 | 命令将不会移除镜像,容器,数据卷,或者用户创建的配置文件。如果你希望删除所有镜像,容器,数据卷 ,运行如下命令: 60 | 61 | $ rm -rf /var/lib/docker 62 | 63 | 你必须手动删除用户创建的配置项。 64 | 65 | 66 | ##启动Docker daemon 67 | 68 | 安装过后,启动Docker daemon: 69 | 70 | $ sudo systemctl start docker 71 | 72 | 如果系统引导中启动Docker daemon: 73 | 74 | $ sudo systemctl enable docker 75 | 76 | 检查Docker是否其作用: 77 | 78 | $ sudo docker run -i -t fedora /bin/bash 79 | 80 | > 说明: 如果你得到`Cannot start container` 错误提及SELinux 或者说权限错误,你需要更新SELinux策略。这可能需要使用`sudo yum upgrade selinux-policy`然后重启。 81 | 82 | 83 | ## 准许其它用户使用Docker 84 | 85 | `docker`命令行工具联系`docker` daemon 进程通过一个 86 | socket 文件 `/var/run/docker.sock` 被 `root:root`所拥有。尽管[推荐]((https://lists.projectatomic.io/projectatomic-archives/atomic-devel/2015-January/msg00034.html))使用sudo作为docker命令的一部分,如果用户不希望这样做, 管理员可以创建`docker` 组, 让它拥有`/var/run/docker.sock`, 然后添加用户到这个组。 87 | 88 | $ sudo groupadd docker 89 | $ sudo chown root:docker /var/run/docker.sock 90 | $ sudo usermod -a -G docker $USERNAME 91 | 92 | ## 自定义daemon参数 93 | 94 | 如果你需要添加一个HTPP Proxy,设置一个不同的目录或者部分来作为Docker运行时文件,或者确保其它自定义,阅读我们的Systemd文章了解怎样[customize your Systemd Docker daemon options](../Articles/systemd.md)。 95 | 96 | ## 下一步 97 | 98 | 继续阅读 [用户指南](../UserGuide/README.md). 99 | 100 | -------------------------------------------------------------------------------- /Installation/frugalware.md: -------------------------------------------------------------------------------- 1 | # FrugalWare 2 | 3 | 在FrugalWare上安装Docker可以通过官方的packages: 4 | - [lxc-docker i686](http://www.frugalware.org/packages/200141) 5 | - [lxc-docker x86_64](http://www.frugalware.org/packages/200130) 6 | 7 | 以上的lxc-docker package将会默认安装最新发布的Docker 8 | 9 | ## 依赖 10 | 核心以来如下: 11 | 12 | - systemd 13 | - lvm2 14 | - sqlite3 15 | - libguestfs 16 | - lxc 17 | - iproute2 18 | - bridge-utils 19 | 20 | ## 安装 21 | 很简单,执行下面的命令就可以全部搞定: 22 | ``` 23 | pacman -S lxc-docker 24 | ``` 25 | 26 | ## 运行Docker 27 | 28 | Docker在运行之前会是一个Systemd形式的服务,启动Docker: 29 | ``` 30 | $ sudo systemctl start lxc-docker 31 | ``` 32 | 33 | 开机自启Docker服务: 34 | ``` 35 | $ sudo systemctl enable lxc-docker 36 | ``` 37 | 38 | ## 守护进程(daemon)的一些设置 39 | 40 | 如果需要一个http的代理,可以在docker运行时指定不同的目录或分区或一些其它的自定义,请查看 [customize your systemd Docker daemon options](https://docs.docker.com/articles/systemd/) 41 | 42 | 原文地址:https://docs.docker.com/v1.5/installation/frugalware/ -------------------------------------------------------------------------------- /Installation/gentoolinux.md: -------------------------------------------------------------------------------- 1 | # Gentoo 2 | 3 | 在Gentoo上安装Docker有两种方法: 4 | - 官方方法 5 | - docker-overlay 方法 6 | 7 | ## 官方提供的方法 8 | 9 | Docker官方推荐使用这种方法,直接使用`app-emulation/docker`这个安装包 10 | 如果有任何问题,如内核配置或依赖包等问题,可以在 [Gentoo Bugzilla](https://bugs.gentoo.org/)和[IRC](http://webchat.freenode.net/?channels=%23gentoo-containers&uio=d4)上发表问题 11 | 12 | ## docker-overlay方法 13 | 14 | ### 安装 15 | 16 | #### 可使用的参数 17 | 18 | | 参数 | 默认 | 说明 | 19 | | ---------- |:-------------:| -----:| 20 | | aufs | |启用‘aufs’相关的依赖,包括一些必要的内核参数 | 21 | | btrfs | |启用‘btrfs’相关的依赖,包括一些必要的内核参数 | 22 | | contrib | Yes |安装额外的贡献脚本和组件 | 23 | |device-mapper | Yes |启用‘device-mapper’相关的依赖,包括一些必要的内核参数| 24 | |doc | | 添加额外文档(API,Javadoc,etc).建议每个包都使用,而不是在全局使用 | 25 | |lxc | | 启用‘lxc’依赖 | 26 | |vim-syntax| | Pull 与vim相关的脚本语法 | 27 | |zsh-completion| |启用zsh的支持 | 28 | 29 | > 关于这些参数的详细配置可以看: [tianon's blog](https://tianon.github.io/post/2014/05/17/docker-on-gentoo.html) 30 | 31 | 安装前必须下载所有的依赖 32 | 33 | ``` 34 | $ sudo emerge -av app-emulation/docker 35 | ``` 36 | 37 | > 说明:有时官方最新的 ***Gentoo tree*** 和 ***docker-overlay*** 可能会有一些差异 38 | 39 | ## 运行Docker 40 | 41 | 在运行Docker前要想确保device-mapper 和 AUFS 或 Btrfs都已经配置正确, 42 | 43 | 1. Docker守护进程必须以root权限运行 44 | 2. 要让会root用户使用Docker,可以执行下面的命令来件用户添加到docker组: 45 | ``` 46 | $ sudo usermod -a -G docker user 47 | ``` 48 | 49 | ### OpenRC 50 | 51 | 运行Docker守护进程 52 | ``` 53 | $ sudo /etc/init.d/docker start 54 | ``` 55 | 56 | 开机自启Docker服务 57 | ``` 58 | $ sudo rc-update add docker default 59 | ``` 60 | 61 | ### systemd 62 | 63 | 运行Docker守护进程 64 | ``` 65 | $ sudo systemctl start docker 66 | ``` 67 | 68 | 开机自启Docker服务 69 | ``` 70 | $ sudo systemctl enable docker 71 | ``` 72 | 73 | 如果需要一个http的代理,可以在docker运行时指定不同的目录或分区或一些其它的自定义,请查看 [customize your systemd Docker daemon options](https://docs.docker.com/articles/systemd/) 74 | 75 | 原文地址:https://docs.docker.com/v1.5/installation/gentoolinux/ -------------------------------------------------------------------------------- /Installation/google.md: -------------------------------------------------------------------------------- 1 | # Google Cloud Platform 2 | 3 | ## 使用Container-optimized Google Compute Engine images快速开始。 4 | 5 | 1. 进入[Google Cloud Console][1] 创建一个新的Cloud Project with 6 | [Compute Engine enabled][2] 7 | 8 | 2. 下载和配置 [Google Cloud SDK][3] 来使用你的项目,通过如下命令: 9 | 10 | $ curl -sSL https://sdk.cloud.google.com | bash 11 | $ gcloud auth login 12 | $ gcloud config set project 13 | 14 | 3. 使用最新的启动新的实例 [Container-optimized image][4]: 15 | (select a zone close to you and the desired instance size) 16 | 17 | $ gcloud compute instances create docker-playground \ 18 | --image container-vm \ 19 | --zone us-central1-a \ 20 | --machine-type f1-micro 21 | 22 | 4. 使用SSH链接到实例: 23 | 24 | $ gcloud compute ssh --zone us-central1-a docker-playground 25 | docker-playground:~$ sudo docker run hello-world 26 | Hello from Docker. 27 | 显示在你的安装界面证明其正常工作。 28 | ... 29 | 30 | 阅读更多请点击[deploying Containers on Google Cloud Platform][5]. 31 | 32 | [1]: https://cloud.google.com/console 33 | [2]: https://developers.google.com/compute/docs/signup 34 | [3]: https://developers.google.com/cloud/sdk 35 | [4]: https://developers.google.com/compute/docs/containers#container-optimized_google_compute_engine_images 36 | [5]: https://developers.google.com/compute/docs/containers 37 | -------------------------------------------------------------------------------- /Installation/joyent.md: -------------------------------------------------------------------------------- 1 | ## 在Joyent Public Cloud上安装Docker 2 | 3 | 1. 登录[Joyent customer portal](https://my.joyent.com/) 4 | 5 | 2. [创建一个Docker host](https://docs.joyent.com/jpc/managing-docker-containers/creating-a-docker-host)。 6 | 7 | ## 启动和管理容器 8 | 9 | 1. [在web UI启动容器](https://docs.joyent.com/jpc/managing-docker-containers/starting-a-container) 10 | 11 | 2. [配置Docker CLI在你的本地](https://docs.joyent.com/jpc/managing-docker-containers/access-your-jpc-docker-hosts-from-the-docker-cli) 以此来链接远端主机,启动和管理容器 12 | 13 | 3. SSH进入Docker host。 14 | 15 | 4. 启动containers通过使用Docker CLI。 16 | 17 | ## 下一步 18 | 19 | 继续阅读 [用户指南](../UserGuide/README.md),阅读 [Joyent's getting started blog post](https://www.joyent.com/blog/first-steps-with-joyents-container-service)和[full documentation](https://docs.joyent.com/jpc/managing-docker-containers)。 -------------------------------------------------------------------------------- /Installation/oracle.md: -------------------------------------------------------------------------------- 1 | # Oracle Linux 6 and 7 2 | 3 | 在Oracle Linux上安装docker不需要你有Oracle Linux Support subscription。 4 | 5 | *对于有support subscription的Oracle linux用户来说:* 6 | 通过[Unbreakable Linux Network 7 | (ULN)](https://linux.oracle.com),无论在 Oracle Linux 6 还是 Oracle Linux 7上,Docker 在`ol6_x86_64_addons` 或者 `ol7_x86_64_addons`渠道都是可用的。 8 | 9 | *对于没有support subscription的Oracle linux用户来说:* 10 | Docker在 [Oracle Public Yum](http://public-yum.oracle.com)源`ol6_addons` or `ol7_addons`仓库已经可用. 11 | 12 | 在Oracle Linux上Docker需要使用Unbreakable Enterprise Kernel Release 3 (3.8.13)或者更高版本。 13 | 在Oracle Linux6和7上,这个版本的内核支持Docker btrfs存储引擎。 14 | 15 | 因为当前Docker技术的限制,Docker只能运行在x86_64体系架构上。 16 | 17 | ## 在Unbreakable Linux Network启动 *addons* channel: 18 | 1. 通过ULN web 接口启用 *ol6\_x86\_64\_addons* 或者 *ol7\_x86\_64\_addons* 渠道。 19 | 更多信息可以在订阅频道查询[Unbreakable Linux Network User's 20 | Guide](http://docs.oracle.com/cd/E52668_01/E39381/html/index.html)。 21 | 22 | ## 通过Oracle公开Yum源启用 *addons* 仓库: 23 | 24 | 最新版本的Oracle Linux 6 和 7在安装过程中会自动配置使用Oracle Public Yum源。不过 25 | *addons* 默认没有启用。按照下面方法启用 *addons* 仓库: 26 | 按照下面方法启用 *addons* 仓库: 27 | 28 | 1. 编辑 `/etc/yum.repos.d/public-yum-ol6.repo` 或者 29 | `/etc/yum.repos.d/public-yum-ol7.repo`配置文件,在 `[ol6_addons]` 或者 the `[ol7_addons]` 这一节,配置 `enabled=1` 。 30 | 31 | ## 安装 32 | 33 | 1. 确保 *addons* 渠道或者仓库已经启用。 34 | 35 | 2. 使用yum安装Docker 软件包: 36 | 37 | $ sudo yum install docker 38 | 39 | ## 启动 Docker 40 | 41 | 1. 现在Docker已经安装成功,启动Docker守护进程: 42 | 43 | 1. 在 Oracle Linux 6上: 44 | 45 | $ sudo service docker start 46 | 47 | 2. 在 Oracle Linux 7上: 48 | 49 | $ sudo systemctl start docker.service 50 | 51 | 2. 如果你想Docker 守护进程开机自启动: 52 | 53 | 1. 在 Oracle Linux 6上: 54 | 55 | $ sudo chkconfig docker on 56 | 57 | 2. 在 Oracle Linux 7上: 58 | 59 | $ sudo systemctl enable docker.service 60 | 61 | **完成!** 62 | 63 | ## 定制守护进程选项 64 | 65 | 如果你需要增加一个HTTP Proxy, 给Docker设置一个不同的目录或分区作为运行时的文件集, 66 | 或者做其他的定制,请阅读我们的系统文章来学习:[customize your systemd Docker daemon options](/articles/systemd/)。 67 | 68 | ## 使用 btrfs 存储引擎 69 | 70 | 在Oracle Linux 6 和 7上,Docker支持使用 btrfs 存储引擎。 71 | 在启用 btrfs支持前,确保 `/var/lib/docker` 是存储在 btrfs-based 文件系统上的。 72 | 73 | 关于如何创建并挂载 btrfs文件系统,参阅 [Chapter 74 | 5](http://docs.oracle.com/cd/E37670_01/E37355/html/ol_btrfs.html) of the [Oracle 75 | Linux Administrator's Solution 76 | Guide](http://docs.oracle.com/cd/E37670_01/E37355/html/index.html) 了解详情。 77 | 78 | 在Oracle Linux启用 btrfs 支持: 79 | 80 | 1. 确保 `/var/lib/docker` 是存储在 btrfs-based 文件系统上的。 81 | 2. 编辑文件 `/etc/sysconfig/docker` 并在 `OTHER_ARGS`处增加`-s btrfs` 。 82 | 3. 重启 Docker 守护进程: 83 | 84 | 现在你可以继续看 [Docker User Guide](/userguide/) 了。 85 | 86 | ## 卸载 87 | 88 | 卸载 Docker 软件包: 89 | 90 | $ sudo yum -y remove docker 91 | 92 | 上面的命令不会删除你机器上的镜像,容器,卷,或者自定义的文件。如果你想要删除所有的镜像,容器 93 | 和卷,执行下面命令: 94 | 95 | $ rm -rf /var/lib/docker 96 | 97 | 你必须手动删除自定义的文件。 98 | 99 | ## 已知问题 100 | 101 | ### Docker 关闭时会卸载 btrfs 文件系统 102 | 如果你正在 btrfs 存储引擎上运行 Docker,当你关闭Docker服务时,在关闭过程中它会自动卸载 btrfs文件系统。 103 | 在你重启 Docker 服务时,你必须确保文件系统已经提前挂载好。 104 | 105 | 在 Oracle Linux 7上,你可以利用 `systemd.mount` 定义并修改 Docker 的 `systemd.service`文件, 106 | 解决在systemd中定义的 btrfs 挂载依赖问题。 107 | 108 | ### Oracle Linux 7上SElinux 支持 109 | 在Oracle Linux 7上,使用 btrfs 存储引擎时,`/etc/sysconfig/selinux`中 110 | SElinux必须设置为`Permissive` 或 `Disabled` 。 111 | 112 | ## 更多问题? 113 | 114 | 如果你有Oracle Linux的 current Basic 或者 Premier支持订阅,那么在[My Oracle Support](http://support.oracle.com)上,你可以提交任何关于Docker安装过程中遇到的问题的服务请求. 115 | 116 | 如果你没有Oracle Linux 支持订阅,你可以使用 [Oracle 117 | Linux 118 | Forum](https://community.oracle.com/community/server_%26_storage_systems/linux/oracle_linux) 获得社区的帮助. 119 | -------------------------------------------------------------------------------- /Installation/rackspace.md: -------------------------------------------------------------------------------- 1 | # Rackspace Cloud 2 | 3 | 通过安装Ubuntu安装Docker,在Rackspace上是相当简单的, 然后继续阅读 [*Ubuntu*](ubuntulinux.md)。 4 | 5 | **当然,这里还是有一个申明:** 6 | 7 | 如果你使用任何Linux不携带有3.8内核,你将需要安装它。这是一个小小困难在Rackspace上。 8 | 9 | Rackspace 启动你的服务通过 grub的 `menu.lst` 10 | 而不像非 `virtual` packages (e.g., Xen compatible) 11 | 内核那样, 尽管他们已经起作用了. 使用 12 | `update-grub`的结果不会有所期待的结果,你需要手动设置内核。 13 | 14 | **不要期望它作为生产环境的机器!** 15 | 16 | # update apt 17 | $ apt-get update 18 | 19 | # install the new kernel 20 | $ apt-get install linux-generic-lts-raring 21 | 22 | 好了,你现在有内核安装在`/boot/`, 接下来你需要创建系统引导。 23 | 24 | # find the exact names 25 | $ find /boot/ -name '*3.8*' 26 | 27 | # this should return some results 28 | 29 | 现在你需要手动编辑 `/boot/grub/menu.lst`, 30 | 你将发现一个底部区域已经存在的选项,复制上边一个然后替代新的内核。 确保新的内核在上边, 双击内核kernel以及initrd 行 指向右边的文件。 31 | 32 | 确保指定双击内核和initrd。 33 | 34 | # now edit /boot/grub/menu.lst 35 | $ vi /boot/grub/menu.lst 36 | 37 | 这将看到如下这样: 38 | 39 | ## ## End Default Options ## 40 | 41 | title Ubuntu 12.04.2 LTS, kernel 3.8.x generic 42 | root (hd0) 43 | kernel /boot/vmlinuz-3.8.0-19-generic root=/dev/xvda1 ro quiet splash console=hvc0 44 | initrd /boot/initrd.img-3.8.0-19-generic 45 | 46 | title Ubuntu 12.04.2 LTS, kernel 3.2.0-38-virtual 47 | root (hd0) 48 | kernel /boot/vmlinuz-3.2.0-38-virtual root=/dev/xvda1 ro quiet splash console=hvc0 49 | initrd /boot/initrd.img-3.2.0-38-virtual 50 | 51 | title Ubuntu 12.04.2 LTS, kernel 3.2.0-38-virtual (recovery mode) 52 | root (hd0) 53 | kernel /boot/vmlinuz-3.2.0-38-virtual root=/dev/xvda1 ro quiet splash single 54 | initrd /boot/initrd.img-3.2.0-38-virtual 55 | 56 | 重启系统 57 | 58 | # reboot 59 | 60 | 指定内核被更新 61 | 62 | $ uname -a 63 | # Linux docker-12-04 3.8.0-19-generic #30~precise1-Ubuntu SMP Wed May 1 22:26:36 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 64 | 65 | # nice! 3.8. 66 | 67 | 然后继续 [*Ubuntu*](ubuntulinux.md)。 68 | -------------------------------------------------------------------------------- /Installation/rhel.md: -------------------------------------------------------------------------------- 1 | # Red Hat Enterprise Linux 2 | 3 | 现在Docker已经支持如下两个版本的RHEL: 4 | 5 | 1. [*Red Hat Enterprise Linux 7 (64-bit)*](http://beta-docs.docker.io/v1.5/installation/rhel/#red-hat-enterprise-linux-7-installation) 6 | 2. [*Red Hat Enterprise Linux 6.5 (64-bit)*](http://beta-docs.docker.io/v1.5/installation/rhel/#red-hat-enterprise-linux-6.5-installation)或以上版本 7 | 8 | ### 关于内核 9 | 10 | 当在分布式的内核上运行时,RHEL将只支持通过额外的channel或EPEL包来运行Docker,如果你不这样使用的话会因内核的变化而导致一些问题出现。 11 | 12 | ## 在Red Hat Enterprise Linux 7上安装Docker 13 | 14 | ***Red Hat Enterprise Linux 7 (64 bit)***已经[附带了Docker](https://access.redhat.com/site/products/red-hat-enterprise-linux/docker-and-containers),你可以在[版本说明](https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.0_Release_Notes/chap-Red_Hat_Enterprise_Linux-7.0_Release_Notes-Linux_Containers_with_Docker_Format.html)上找到概述及一些用户指南。 15 | 16 | Docker位于***extras***channel 17 | 18 | 19 | - 启用***extras***channel 20 | ``` 21 | $ sudo subscription-manager repos --enable=rhel-7-server-eatras-rpms 22 | ``` 23 | - 安装 24 | ``` 25 | $ sudo yum install docker 26 | ``` 27 | 28 | > 另外的安装,配置及用户使用方法包括[如何在Red Hat Enterprise Linux 7上使用容器](https://access.redhat.com/site/articles/881893),都可以在[Red Hat Customer Portal](https://access.redhat.com/)上找到。 29 | 30 | ## 在Red Hat Enterprise Linux 6.5上安装Docker 31 | 32 | 64位RHEL 6.5或以上版本,需要内核在2.6.32-431或更高才能支持Docker。 33 | EPEL源上的**RHEL6.5**可以使用Docker,当然这个包只是[Extra Packages for Enterprise Linux (EPEL)](https://fedoraproject.org/wiki/EPEL)的一部分。 34 | 35 | ### 内核部分 36 | 37 | 当在分布式的内核上运行时,RHEL将只支持通过额外的channel或EPEL包来运行Docker,如果你不这样使用的话会因内核的变化而导致一些问题出现。 38 | 39 | >注意:请执行```yum update```命令来保证你的系统是最新的,这样可以确保关键的安全漏洞和一些致命错误(如那些在 2.6.32 内核中的问题)得到改善。 40 | 41 | ### 安装 42 | 43 | 首先需要安装EPEL包,可以参考:[EPEL安装方法](https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F)。 44 | 因为与系统托盘中的应用和其可执行文件包名称冲突,所以 Docker RPM 叫```docker-io``` 45 | 46 | 要安装```docker-io```,你必须先删除```docker```包 47 | ``` 48 | $ sudo yum -y remove docker 49 | ``` 50 | 51 | 接下来,安装```docker-io``` 52 | ``` 53 | $ sudo yum install docker-io 54 | ``` 55 | 56 | 如下命令可以更新```docker-io``` 57 | ``` 58 | $ sudo yum -y update docker-io 59 | ``` 60 | 61 | ## 启动Docker守护进程 62 | 63 | 安装后,我们可以启动Docker守护进程了: 64 | ``` 65 | $ sudo service docker start 66 | ``` 67 | 68 | 开机自启Docker服务: 69 | ``` 70 | $ sudo chkconfig docker on 71 | ``` 72 | 73 | 检查Docker服务是否在运行: 74 | ``` 75 | $ sudo docker run -i -t fedora /bin/bash 76 | ``` 77 | 78 | > 注意:如果遇到```Cannot start container```这样的错误,是和 SELinux或权限有关,你需要更新SELinux策略,你可以执行```sudo yum upgrade selinux-policy```命令并重启主机 79 | 80 | ## 守护进程(daemon)的一些设置 81 | 82 | 如果需要一个http的代理,可以在docker运行时指定不同的目录或分区或一些其它的自定义,请查看 [customize your systemd Docker daemon options](https://docs.docker.com/articles/systemd/) 83 | 84 | ##有问题? 85 | 86 | 如果你有任何关于Docker的问题,请在[Red Hat Bugzilla for docker-io component](https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora%20EPEL&component=docker-io)上面告诉我们。 -------------------------------------------------------------------------------- /Installation/softlayer.md: -------------------------------------------------------------------------------- 1 | # IBM SoftLayer 2 | 3 | 1. 创建[IBM SoftLayer账号]( 4 | https://www.softlayer.com/cloud-servers/). 5 | 2. 登陆到[SoftLayer Customer Portal]( 6 | https://control.softlayer.com/). 7 | 3. 从*Devices* 目录选择 [*Device List*](https://control.softlayer.com/devices) 8 | 4. 点击*Order Devices*。 9 | 5. 在 *Virtual Server* 下边点击 [*Hourly*](https://manage.softlayer.com/Sales/orderHourlyComputingInstance) 10 | 6. 创建一个新的 *SoftLayer Virtual Server Instance* (VSI),所有表单或者选项默认,选择: 11 | 12 | - The desired location for *Datacenter* 13 | - *Ubuntu Linux 12.04 LTS Precise Pangolin - Minimal Install (64 bit)* 14 | for *Operating System*. 15 | 16 | 7.点击*Continue Your Order*按钮在右边。 17 | 8. 填写VSI *hostname* 和 *domain*. 18 | 9. 插入要求 *User Metadata* 和有顺序放置. 19 | 10. 然后继续 [*Ubuntu*](ubuntulinux.md)。 20 | 21 | ## 下一步 22 | 23 | 继续阅读 [用户指南](../UserGuide/README.md)。 24 | 25 | -------------------------------------------------------------------------------- /Installation/testing-windows-docker-client.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Installation/testing-windows-docker-client.md -------------------------------------------------------------------------------- /Kitematic/faq.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Kitematic/faq.md -------------------------------------------------------------------------------- /Kitematic/install.md: -------------------------------------------------------------------------------- 1 | # 安装Kitematic 2 | 3 | 你安装Kitematic就想安装任何应用在Mac或者Window系统一样,下载一个镜像,然后运行安装。 4 | 5 | ## 下载Kitematic ## 6 | 7 | 下载[kitematic zip文件](https://kitematic.com/download/),解压文件通过双击它,然后双击应用运行它。你可能也想放应用在你的应用文件夹下。 8 | 9 | ## 初始化安装 ## 10 | 11 | 首次打开Kitematic,配置你需要运行Docker容器的某些事情。如果没有安装VirtualBox,Kitematic将会下载安装最近的版本。 12 | 13 | ![](../Images/installing.png) 14 | 15 | 所有完成,短短一分钟你需要准备启动运行你的第一个容器。 16 | 17 | ![](../Images/containers.png) 18 | 19 | ## 技术描述 ## 20 | 21 | Kitematic是一个设备齐全的app,包含两个免责声明: 22 | 23 | * 它将安装VirtualBox,如果它没被安装。 24 | * 为了便利,它复制docker和docker-machine二进制到/usr/local/bin。 25 | 26 | ### 为什么Kitematic需要获得我的root密码? 27 | 28 | Kitematic需要你的密码是有两个原因: 29 | 30 | 1. 安装VirtualBox要求root作为它引用Mac OS X内核的扩展。 31 | 2. 复制Docker和docker-machine到/usr/local/bin要求root权限,如果默认权限对这些路径无法修改时。 32 | 33 | ## 下一步 ## 34 | 35 | 为了了解更多如何使用Kitematic的信息,请阅读[Kitematic用户指南](userguide.md)。 -------------------------------------------------------------------------------- /Kitematic/known-issues.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Kitematic/known-issues.md -------------------------------------------------------------------------------- /Kitematic/minecraft-server.md: -------------------------------------------------------------------------------- 1 | # Kitematic 教程:安装一个Minecraft服务 2 | 3 | 这是一个快速的Demo,解释怎样安装一个本地Minecraft服务,使用Kitematic和Docker。 4 | 5 | ## 创建Minecraft服务容器 6 | 7 | 首先,如果你没有安装或者启动Kitematic,你需要[安装](install.md)。一旦你安装并运行,app张如下这样: 8 | 9 | 创建一个容器从推荐的Minecraft镜像中,点击**创建**按钮。 10 | 11 | ![](../Images/minecraft-create.png) 12 | 13 | 随后,镜像结束下载,你将看到Minecraft容器的主界面。你的Minecraft服务现在已经启动并运行了一个Docker容器。注意,我们标记了IP和端口,你可以使用来链接你的Minecraft服务,在标记红色的部分。 14 | 15 | ![](../Images/minecraft-port.png) 16 | 17 | ## 链接到Minecraft服务 18 | 19 | 打开你的Minecraft客户端,登录你的Minecraft账号,点击**更多玩家**按钮。 20 | 21 | ![](../Images/minecraft-login.png) 22 | 23 | 点击,添加服务按钮来添加Minecraft服务你需要链接到的。 24 | 25 | ![](../Images/minecraft-login.png) 26 | 27 | 填写**服务地址**输入框,写入IP和端口。 28 | 29 | ![](../Images/minecraft-server-address.png) 30 | 31 | 点击播放按钮来链接到你的Minecraft服务然后尽情享受吧! 32 | 33 | ## 修改映射的Docker数据卷 34 | 35 | 打开”Data“文件夹在Kitematic上。我们使用Docker数据卷来映射Minecraft Docker容器到你的电脑上。 36 | 37 | ![](../Images/minecraft-data-volume.png) 38 | 39 | 文件夹打开过后,允许你替换当前的地图。 40 | 41 | ![](../Images/minecraft-map.png) 42 | 43 | 重启你的容器通过点击**重启**按钮。 44 | 45 | ![](../Images/minecraft-restart.png) 46 | 47 | 会退到你的Minecraft客户端然后尽情享受你的服务吧!新的地图将会被加载。 48 | 49 | ## 下一步 50 | 51 | 这里有关怎样运行Nginx的内容,你可以阅读[这里](nginx-web-server.md)。 -------------------------------------------------------------------------------- /Kitematic/nginx-web-server.md: -------------------------------------------------------------------------------- 1 | # 使用Nginx搭建一个静态网站 2 | 3 | 在本文,你将了解到: 4 | 5 | * 下载和运行一个web server容器。 6 | * 浏览容器的website数据。 7 | * 使用数据卷挂载website修改的数据。 8 | 9 | 本次,website示例,我们将服务一个2048游戏,正如下所示。让我们开始吧! 10 | 11 | ![nginx-2048.png](../Images/nginx-2048.png) 12 | 13 | ## 运行Nginx web server容器 14 | 15 | 首先,你如果你没有下载安装过,请点击[下载Kitematic并启动](Kitematic/install.md)。一旦打开,app应该长这个样子: 16 | 17 | ![](../Images/rethink-create.png) 18 | 19 | 点击hello-world-nginx的*创建*按钮列表列举如下。Kitematic将下载并运行轻量级的Nginx web server在Docker容器里,允许它服务website和数据。 20 | 21 | ![](../Images/nginx-hello-world.png) 22 | 23 | 一旦,王完成下载,你需要看到一个示例website的快速预览,那我们赶紧进行下边的操作吧!点击*预览*,查看在你浏览器上的结果。 24 | 25 | 刚才发生什么了?Kitematic下载了kitematic/hello-world-nginx镜像从Docker Hub,然后创建和运行了Docker Nginx容器。 26 | 27 | ## 使用Finder查看Website数据 28 | 29 | 这个容器暴露website 数据通过一个Docker数据卷。Kitematic轻松创建并管理Docker数据卷,你可以编辑数据在Finder里或者使用你喜欢的文本编辑器。默认情况下,Kitematic放置数据卷在~/Kitematic下但是你可以吸怪这些个容器设置。为了操作文件通过finder,点击应用里的folder图标和*Enable all volumes to edit via Finder*。 30 | 31 | ![nginx-data-volume.png](../Images/nginx-data-volume.png) 32 | 33 | Finder 窗体显示打开容器的index.html文件。 34 | 35 | ![](../Images/nginx-data-folder.png) 36 | 37 | ## 服务你自己的website数据 38 | 39 | 现在让我们尝试服务更多有趣的网站。现在和解压[2048游戏](https://github.com/gabrielecirulli/2048/archive/master.zip),一个非常受喜爱的基于web的游戏,提取zip文件。 40 | 41 | ![](../Images/nginx-2048-files.png) 42 | 43 | 回到Kitematic重启容器通过点击*重启*按钮。你的Nginx容器应该就是为2048应用服务了。 44 | 45 | ![](../Images/nginx-serving-2048.png) -------------------------------------------------------------------------------- /Kitematic/rethinkdb-dev-database.md: -------------------------------------------------------------------------------- 1 | # 创建一个本地RethinkDB 数据库 2 | 3 | 在本文,你将了解到: 4 | 5 | * 创建一个开发环境的RethinkDB容器。 6 | * 克隆一个小的Node.js应用并写数据到RethinkDB。 7 | 8 | ## 在Kitematic上安装RethinkDB 9 | 10 | 首先,你如果你没有下载安装过,请点击[下载Kitematic并启动](Kitematic/install.md)。一旦打开,app应该长这个样子: 11 | 12 | ![](../Images/rethink-create.png) 13 | 14 | 点击 *创建* 按钮列列举推荐的列表。这将下载和运行RethinkDB在几分钟内。一旦完成,你将有一个本地的RethinkDB运行在本地。 15 | 16 | ![](../Images/rethink-container.png) 17 | 18 | 让我们开始使用它开发一个Node.js应用。现在,让我们了解RethinkDB监听的IP地址和端口。为了找到,点击*设置*页签,然后再点击*端口*。 19 | 20 | ![](../Images/rethink-ports.png) 21 | 22 | 你可以看到RethinkDB监听28015,容器在主机上映射IP 192.168.99.100和端口49154。这意味着你现在可以访问RethinkDB通过客户端驱动到192.168.99.100:49154即可。再次说明,IP地址可能对你来说是不同的。 23 | 24 | ## 保存Node.js应用的数据到RethinkDB上 25 | 26 | 现在,你将创建RethinkDB实例聊天应用运行在你本地OS X系统上,以便来测试你新的容器化数据库的驱动。 27 | 28 | 首先,你如果没有下载并安装Node.js,请点击[这里](http://nodejs.org/)。 29 | 30 | > 说明:本示例需要安装Xcode。我们将使用某些依赖包来替换它。 31 | 32 | 在你的终端,键入: 33 | 34 | $ export RDB_HOST=192.168.99.100 # replace with IP from above step 35 | $ export RDB_PORT=49154 # replace with Port from above step 36 | $ git clone https://github.com/rethinkdb/rethinkdb-example-nodejs-chat 37 | $ cd rethinkdb-example-nodejs-chat 38 | $ npm install 39 | $ npm start 40 | 41 | 现在,点击你的浏览器访问http://localhost:8000。恭喜你,你成功在Kitematic上使用RethinkDB容器创建一个实时聊天应用了。愉快的编程! 42 | 43 | ![](../Images/rethinkdb-preview.png) -------------------------------------------------------------------------------- /Kitematic/userguide.md: -------------------------------------------------------------------------------- 1 | #Kitematic 用户指南 2 | ##概述 3 | kitematic是一个开放源码项目建成以简化和精简使用在MAC或Windows(即将推出)。kitematic自动化docker守护安装和设置过程,并提供了一个直观的图形用户界面(GUI)运行Docker容器。kitematic结合docker提供一个VirtualBox虚拟机安装在您的本地机器docker容器。 4 | 一旦安装,kitematic GUI的发射和主屏幕,你将与策划的图像,可以立即运行。你可以通过从kitematic在搜索栏中输入搜索任何公共图像在docker上。您可以使用图形用户界面来创建、运行和管理您的容器,只需按按钮kitematic允许你在docker的CLI和GUI之间来回切换。kitematic并自动配置卷如管理端口和先进的功能。你可以使用kitematic改变环境变量,流日志,并单击终端进入你的Docker容器从GUI。 5 | 首先,如果你还没有这样做,下载并开始kitematic。 6 | ##容器列表 7 | kitematic列出所有运行和停止容器的左侧,在“新容器”链接。 8 | 容器列表包括所有容器,甚至那些kitematic没有开始,给你一个快速的docker守护。 9 | 你可以点击任何容器来查看其日志(主容器过程的输出),启动,停止或exec SH在容器。看到更多细节的容器的工作。 10 | ##创建一个新的容器 11 | “新的容器”页允许您搜索和在泊坞枢纽图像选择。当你找到你想要运行的图像时,你可以点击“创建”来拉、创建和运行容器。 12 | 13 | 图片browse-images.png 14 | 15 | ##使用容器 16 | 如果选择一个非运行容器,或者停止,或者暂停,您将能够“重新启动”或“停止”容器使用图标。您还可以查看整个主容器进程的输出日志,并且在设置部分中,如果您“重新启动”这个容器,您可以更改将使用的更改。 17 | 通过从左边的列表中选择一个运行容器,你可以看到一些状态信息为您的容器-一个预览的HTML输出一个容器,一个Web服务器,主容器过程日志,和任何容器体积已配置。 18 | 19 | 图片cli-redis-container.png 20 | 21 | 根据图像元数据,摘要页面将显示不同的事情。如果一个已知的“网络”端口(见下文)暴露,然后kitematic承担其网页,并会显示预览/网站。如果其他港口都暴露出来,然后它会显示一个列表的端口,和码头工人守护它们映射到IP和端口。如果有任何卷,那么这些将显示。至少,概要屏幕将显示主容器进程的日志输出。 22 | 目前检测到的“网络”端口,80,8000,8080,3000,5000,2368,9200,和8983。 23 | ###查看容器日志 24 | 你可以查看整个集装箱主进程通过cicking在“日志”预览图像输出日志,或通过点击“日志”选项卡。 25 | 你可以从当前运行的容器中滚动日志。请注意,如果您对容器设置进行更改,那么容器将重新启动,所以将重置此日志视图。 26 | ###在容器中启动终端 27 | “终端”在容器顶部的图标将Docker总结执行SH <容器>。这将允许您快速更改,或调试一个问题。 28 | 注意:你的exec'ed SH过程不会有相同的环境设置为主要的容器的方法和它的孩子。 29 | ###管理卷 30 | 您可以选择将所有的容器的卷映射到您的苹果的目录上,通过点击文件夹中的“编辑文件”部分的容器概要屏幕。 31 | 这允许你通过查找器来管理文件。kitematic展示容器的容积数据~ / kitematic / <名> /下容器。快速访问这个文件夹(或目录)是可通过应用程序: 32 | 33 | 图片volumes-dir.png 34 | 35 | 注意:当你使所有卷在Finder”编辑文件,码头工人容器将被停止,删除和重新创建新卷旗。 36 | ###更改卷目录 37 | 让我们说你有一个nginx服务器通过运行kitematic(使用kitematic /你好世界nginx的形象对dockerhub)。然而,你不想使用的website_files卷创建的默认目录。相反,你已经有了HTML,JavaScript,和~ /工作区/网站为你的网站CSS。 38 | 导航到该容器的“设置”选项卡,然后在“卷”。这个屏幕可以单独设置单独的映射。 39 | 40 | 图片change-folder.png 41 | 42 | 注意:当你改变文件夹”,docker容器将被停止,删除和重新创建新卷旗。 43 | ###设置容器名称 44 | 默认情况下,kitematic集容器名称作为图像的名称相同(或一个<号码>如果有一个以上的。为了简化管理,或者在使用容器链接或卷时,您可以将它重命名为。 45 | 注意:当您将其重命名为容器时,将被停止、删除和重新创建新的名称(由于默认的卷映射)。 46 | ###添加环境变量 47 | 许多镜像使用环境变量让你自定义。“一般”“设置”选项卡允许您添加和修改用于启动容器的环境变量。 48 | 环境变量的列表会显示所有已设置的镜像元数据-例如,在dockerfile使用env指令。 49 | 文中“保存”更改的环境变量,容器将被停止删除并重新创建。 50 | ###删除容器 51 | 在“一般”“设置”选项卡中,可以删除容器。如果有必要,单击“删除容器”也将停止容器。 52 | 您还可以删除容器列表中的“*”图标。 53 | kitematic将提示您确认要删除。 54 | 列出暴露的端口和如何访问它们 55 | 要查看完整列表的暴露端口,去“设置”,然后“端口”。此页列出了所有的容器端口,以及可访问用于访问该操作系统的容器的端口的地址和主机的网络端口。 56 | ##Docker命令行访问 57 | 你可以在kitematic现有的容器或创建新的容器通过Docker命令行接口(CLI)。你的命令所做的任何更改都直接体现在kitematic。 58 | 打开一个终端通过kitematic,只要按下鲸鱼按钮在左下方,如下图所示: 59 | CLI访问按钮 60 | 例如:创建一个新的Redis的容器 61 | 先点击鲸鱼按钮如上打开泊坞窗CLI准备终端。一旦终端打开,进入码头运行D P redis。这将拉动和运行一个新的Redis通过Docker容器CLI。 62 | 63 | 图片cli-terminal.png 64 | 65 | 注意:如果您从命令行创建容器,使用泊坞窗运行以便kitematic可以重新创建容器时的设置是通过kitematic用户界面改变。容器开始没有-将无法重新启动。 66 | 现在,回到kitematic。使用容器现在应该是可见的。 67 | 68 | 图片cli-redis-container.png 69 | 70 | ##下一步 71 | 例如使用kitematic运行Minecraft服务器,以在mincraft服务器网页一看。 72 | -------------------------------------------------------------------------------- /Project/README.md: -------------------------------------------------------------------------------- 1 | # 安装 2 | 3 | 本章节主要讲述一个对Docker了解并熟悉github等工具的开发者怎样贡献自己的代码。 4 | 5 | ## 章节列表 6 | 7 | * [首先了解README](who-written-for.md)`翻译:王辉 未校译` 8 | * [在Linux或者OS X上获取必要软件](software-required.md)`翻译:王辉 未校译` 9 | * [在Windows上获取必要软件](software-required-win.md) 10 | * [配置Git](set-up-git.md)`翻译:王辉 未校译` 11 | * [了解开发环境](set-up-dev-env.md) 12 | * [了解测试和测试文档](test-and-docs.md) 13 | * [了解贡献流程](make-a-contribution.md) 14 | * [发现bug](find-an-issue.md) 15 | * [解决bug](work-issue.md) 16 | * [创建pull request](create-pr.md) 17 | * [参与公关审查](review-pr.md) 18 | * [高级贡献](advanced-contributing.md) 19 | * [寻求帮助](get-help.md) 20 | * [编程风格指南](coding-style.md) 21 | * [文档风格指南](doc-style.md) 22 | 23 | -------------------------------------------------------------------------------- /Project/advanced-contributing.md: -------------------------------------------------------------------------------- 1 | # 学习高级贡献 # 2 | 3 | 本节中,你将学到更多Docker的高级贡献,他们之所以高级是因为他们有更复杂的工作流程或者需要更多的编程经验。不要担心有多难,这是一个挑战你自己的好地方。 4 | 5 | 文中只是简单的叙述了如何高级贡献,你会看到大致的工作流程当我们并没有做过多的解释,你的目标应是了解整个的过程。 6 | 7 | ## 重构或清理建议 ## 8 | 9 | 重构或清理的建议意味着在不修改外部行为的情况下,改变Docker内部的结构,步骤如下: 10 | 11 | 1. fork `docker/docker` 12 | 13 | 2. 在特性分支中进行修改 14 | 15 | 3. 使用 master 同步并重写你的分支 16 | 17 | 4. 执行全部的测试套件 18 | 19 | 5. 通过一个pull请求(PR)来提交你的代码 20 | 21 | 请求的标题必须有如下的格式: 22 | 23 | Cleanup:简介的标题 24 | 25 | 如果你的修改涉及到逻辑的变化,你必须在请求中作出说明 26 | 27 | 6. 参与到docker 的审查中知道被合并(merge)到master中 28 | 29 | ## 设计方案 ## 30 | 31 | 设计方案可以解决docker的某个问题或向docker添加某个功能,提交一个设计方案需要两个pull请求(PR),一个用来设计,一个用来实现。 32 | 33 | ![proposal.png](../Images/proposal.png) 34 | 35 | 值得注意的是:设计的pull请求和实现的pull请求都必须通过审核,换句话说,你有相当长的时间来实现你的方案,因为你可能要和其他人一起来完成你的设计。下面将提供详细的步骤: 36 | 37 | 1. 需要一个想法 38 | 39 | 想法通常来自于用户感受到产品工作的限制,所以,花点时间认真使用docker,而且是在不同的平台上使用,探索在不同的web应用上docker是如何工作的,去一些docker的社区,并了解一下其他用户产生的问题。 40 | 41 | 2. 审查现有的问题和建议,以确保没有其他用户提出了类似的想法。 42 | 43 | 设计方案都会在我们的[GitHub上的pull请求页面上](https://github.com/docker/docker/pulls?q=is%3Aopen+is%3Apr+label%3AProposal) 44 | 45 | 3. 向docker社区分享你的一些想法 46 | 47 | 我们有很多docker的[社区论坛](https://docs.docker.com/project/get-help/),你可以在上面发表你的想法,并看看其他人的想法 48 | 49 | 4. fork docker/docker 并将仓库克隆到你的主机 50 | 51 | 5. 在你要修改的地方创建一个markdown文件 52 | 53 | 比如:你想要重新设计守护进程,你就要在 daemon/ 文件夹中创建一个 markdown文件 54 | 55 | 6. 描述性地命名该文件,如 redesign-daemon-proposal.md 56 | 57 | 7. 写一份你更改建议的文件 58 | 59 | 这是一个markdown文件,它描述了你的idea,这个文件中应有如下的信息: 60 | 61 | 你为什么要修改这个或用了什么例子? 62 | 63 | 你的这个修改应满足怎样的要求? 64 | 65 | 使用了哪些方法来设计/实现了这个功能? 66 | 67 | 哪一个设计/实现方法你认为是最好的,为什么? 68 | 69 | 你的这个方案有哪些风险/限制? 70 | 71 | 有了以上信息你才有足够的理由来说服别人同意你的想法 72 | 73 | 8. 通过向 docker/docker 提出pull 请求来提交你的方案 74 | 75 | 标题必须是如下的格式: 76 | 77 | Proposal:简洁明了的标题 78 | 79 | 请求的内容中应对你的修改做一个简明的总结,然后再写上“阅读这篇文章来查看详细的说明”。 80 | 81 | 9. 通过审查来优化你的方案 82 | 83 | 维护人员和社区回审查你的方案,你需要回答一些问题,有时候你还要向他们解释或捍卫你的提案,这对每个人来说都是一个互相学习的好机会 84 | 85 | 10. pull请求被接受了! 86 | 87 | 你的请求也许会被拒绝,不是每一个idea都适合docker,我们假设一下你的方案被接受了。 88 | 89 | 11. 实现你的idea 90 | 91 | 实现的方法应该使用标准的方法: 92 | 93 | fork docker/docker 94 | 95 | 创建特性分支 96 | 97 | 经常和master同步 98 | 99 | 你做的每一步都要测试,在你pull请求前做一个整体的测试 100 | 101 | 一旦你遇到了问题,你可以向论坛社区寻求帮助 102 | 103 | 12. 当你有了完整的实现步骤后,你就可以向 docker/docker 发出pull请求了 104 | 105 | 13. 审查遍历你的代码 106 | 107 | 如果你修改了很多地方,你可以期待更加严格的审查 108 | 109 | 14. 接受你的修改并合并到master中 -------------------------------------------------------------------------------- /Project/coding-style.md: -------------------------------------------------------------------------------- 1 | # 关于编码的风格 # 2 | 3 | ## 编码风格的清单 ## 4 | 5 | 这个清单会根据你对[代码的贡献](https://docs.docker.com/project/make-a-contribution)和[其他高级的贡献](https://docs.docker.com/project/advanced-contributing)来做一个总结,该清单适用于程序的代码,或文档的代码。 6 | 7 | ## 修改,提交代码 ## 8 | 9 | - fork `docker/docker` 仓库 10 | - 在你fork的仓库中创建一个特性分支,并修改,最后如下命名:`XXXX-something` 其中 XXXX 代表你的问题编号 11 | - 在你提交更改之前执行 `gofmt -s -w file.go` 命令,大多数编辑器都会带有这种自动化的插件 12 | - 更新文档 13 | - 如果是修改一个提交或关闭一个问题,你应该加入以下的信息:`Closes #XXXX` 或 `Fixes #XXXX`,当问题因合并关闭时应有一些提示 14 | - 每次提交后,都要执行测试套件,确保它能通过 15 | - 保持和 docker master 的同步 16 | - 设置你的git签名,确保每次提交时都有签名 17 | - 不要将你自己加到 AUTHORS 文件中,此文件是 Git 的历史自动生成的 18 | 19 | ## 测试 ## 20 | 21 | - 修改完代码后提交你的单元测试 22 | - 利用内置的go测试框架构建 23 | - 从现有的docker测试文件(name_test.go)寻找灵感 24 | - 在提交pull请求时运行[整个的测试套件](https://docs.docker.com/project/test-and-docs) 25 | - 执行 make docs 命令来构建docker文档,然后再本地验证一下 26 | - 使用[在线的语法检查工具](http://www.hemingwayapp.com/)测试你的文档是否清晰,正确和简洁 27 | 28 | ## PULL请求 ## 29 | 30 | 31 | 32 | - pull请求时先将本地代码和docker master 的代码同步并重构,但不要混入多个分支 33 | - pull请求前,运行 `git rebase -i` 和 `git push -f` 命令来执行‘squash ’操作 34 | - 在提交中包含所有的修改过的文档修改,以便以后的恢复和修改操作 35 | - 在你的pull请求中列出每个关联到的问题(#xxx) 36 | 37 | ## 回复PULL请求的审查 ## 38 | 39 | - 如果Docker 的维护者在你的PULL请求中评论:LGTM(looks-good-to-me)表明你的请求已经被接受了 40 | - 代码审查时的一些评论会加入到你的pull请求中。这期间你要和docker的维护者讨论你的pull请求的价值,然后你再根据建议进行修改,再提交 41 | - 将你修改的代码合并到你自己的特性分支,然后推送到你fork的仓库中,这会自动更新到你的正处于开放状态的pull请求 42 | - push之后在最底下添加一条评论,来提醒维护者你的pull请求已经修改了,因为push操作不会自动发送通知 43 | - 你的修改必须要得到维护这个组件的绝大多数人员的同意才能通过。例如:如果你修改了 docs/ 和 registry 的代码,就需要维护 docs/ 和registry/ 这两个组件的绝大多数人员的同意才能通过 44 | 45 | ## PULL请求通过后,会合并到docker master中 ## 46 | 47 | - 合并后,你可以立即从 a master build 中获取 48 | - 如果你只是对文档做了修改, [docs.master.dockerproject.com](http://docs.master.dockerproject.com/) 这个上面可以看到 -------------------------------------------------------------------------------- /Project/create-pr.md: -------------------------------------------------------------------------------- 1 | # 创建一个 Pull 请求(PR) # 2 | 3 | Pull 请求(PR)会提交你的修改,来让docker 的维护者审查。当你在 GitHub上创建一个Pull起来后,这个请求会将你fork的代码库中修改的地方提交到 docker/docker 代码库。 4 | 5 | 你可以在 GitHub上[查看所有pull请求的列表](https://github.com/docker/docker/pulls) 6 | 7 | ## Pull之前的检查 ## 8 | 9 | 1. 在终端中,进入 docker-fork 的根目录 10 | 11 | $ cd ~/repos/docker-fork 12 | 13 | 2. 检查(checkout)你的特性分支 14 | 15 | $ git checkout 11038-fix-rhel-link 16 | 17 | Already on '11038-fix-rhel-link' 18 | 19 | 3. 在你的分支中运行整个测试套件 20 | 21 | $ make test 22 | 23 | 这个测试中,所有的测试都必须通过 24 | 25 | 4. 如果你修改了文档,你也可以重新构建文档,但这不是必须的 26 | 27 | $ make docs 28 | 29 | 5.当你检查完之后,你就可以提交了 30 | 31 | ## 重写(Rebase)分支 ## 32 | 33 | 在你提交之前你还必须要重写你的代码 34 | 35 | 1. 先于docker/docker同步 36 | 37 | $ git fetch upstream master 38 | 39 | From github.com:docker/docker 40 | 41 | * branch master -> FETCH_HEAD 42 | 43 | 2. 启动一个交互式的rebase操作 44 | 45 | $ git rebase -i upstream/master 46 | 47 | 3. rebase操作会显示如下的提交列表 48 | 49 | pick 1a79f55Tweak some of the other text for grammar 50 | 51 | pick 53e4983Fix a link 52 | 53 | pick 3ce07bbAdd a new line about RHEL 54 | 一旦你哪个地方改错了,你可以使用 git --rebase abort 命令撤销所有的修改 55 | 56 | 4. 将除第一个 pick 关键字之外的其他 pick 关键字替换成 squash 57 | 58 | pick 1a79f55Tweak some of the other text for grammar 59 | 60 | squash 53e4983Fix a link 61 | 62 | squash 3ce07bbAdd a new line about RHEL 63 | 64 | 当关闭文件后,git 会重新打开编辑器并编辑提交信息 65 | 66 | 5. 编辑并保存你要提交的信息 67 | 68 | `git commit -s` 69 | 70 | Make sure your message includes master 143 | 144 | 9. 创建一个有关你的问题的新的分支 145 | 146 | 这个分支的命名应该有如下规则:XXXX-descriptive 其中 XXXX 代表上面提到的问题编号,比如: 147 | 148 | $ git checkout -b 11038-fix-rhel-link 149 | 150 | Switched to a new branch '11038-fix-rhel-link' 151 | 152 | 你的分支应该和 upstream/master 保持最新,因为你的分支是从 master分支上分出来的。 153 | 154 | 10. 再从 upstream/master 上重写(rebase)刚才新建的分支 155 | 156 | $ git rebase upstream/master 157 | 158 | Current branch 11038-fix-rhel-link is up to date. 159 | 160 | ok,现在你的本地分支,远程代码库,和docker 代码库都已经同步完成,且都是最新的。 161 | 162 | ## 下一节 ## 163 | 164 | [如何完成你的修改](work-issue.md) 165 | 166 | -------------------------------------------------------------------------------- /Project/get-help.md: -------------------------------------------------------------------------------- 1 | # 在哪可以讨论或寻求帮助? # 2 | 3 | Docker有许多交流的频道,供你和docker用户及开发者一起讨论 4 | 5 | ## Internet Relay Chat (IRC) ## 6 | 7 | IRC频道是直接通向docker用户的,在irc.freenode.net.上面有#docker及#docker-dev群。IRC是在1988年创建的,它是一个丰富的聊天协议,但是可以覆盖掉新用户,你可以搜索我们的聊天存档。 8 | 9 | 你可以在下面看到我们的IRC快速指南 10 | 11 | ## Google Groups ## 12 | 13 | 这里面会有两个群,一个是Docker-user,专为docker使用者创建的,另一个是docker-dev专为docker的贡献者和开发人员创建的 14 | 15 | ## Twitter ## 16 | 17 | 你可以关注Docker在Twitter上的账号来了解docker,你也可以向我们提一些关于docker的问题或分享有关docker的博客 18 | 19 | ## Stack Overflow ## 20 | 21 | Stack Overflow 已经有7000K多关于docker的提问,我们会定期的查看这些问题并解决这些问题 22 | 23 | ## IRC快速指南 ## 24 | 25 | 如何以最简单的方式使用IRC 26 | 27 | 1. 在浏览器中打开 [http://webchat.freenode.net](http://webchat.freenode.net/) 28 | 29 | ![Images](../Images/irc_connect.png) 30 | 31 | 2. 填写下面的表单 32 | 33 | NickName:IRC上你的账户名称 34 | 35 | Channels:#docker 36 | 37 | reCAPTCHA(验证码):填写你看到的验证码 38 | 39 | 3. 点击“Connect”按钮 40 | 41 | 进去之后你会看到一大推的文字,底部会有一个命令行,在命令行的上面系统会提示你注册 42 | 43 | 44 | ![](../Images/irc_after_login.png) 45 | 46 | 47 | 4. 在命令行中注册 48 | 49 | /msg NickServ REGISTER password youremail@example.com 50 | 51 | ![](../Images/register_nic.png) 52 | 53 | IRC系统会向你刚才输入的地址发一封邮件,邮件会让你完成更详细的注册 54 | 55 | 5. 打开你的邮箱查看邮件 56 | 57 | 58 | ![](../Images/register_email.png) 59 | 60 | 61 | 6. 回到浏览器,根据邮件的提示完成注册 62 | 63 | /msg NickServ VERIFY REGISTER moxiegirl_ acljtppywjnr 64 | 65 | 7. 使用如下命令加入到 #docker 群 66 | 67 | /j #docker 68 | 69 | 你也可以加入 #docker 群 70 | 71 | /j #docker-dev 72 | 73 | 8. 通过命令行向频道发一些问题 74 | 75 | ![](../Images/irc_chat.png) 76 | 77 | 9. 关闭浏览器,退出 78 | 79 | ## Tips和了解更多关于IRC的知识 ## 80 | 81 | 下次,你再登陆IRC时,你需要在命令行使用如下的命令再次输入你的密码 82 | 83 | /msg NickServ identify 84 | 85 | 如果你忘记了密码,请查看:[the FAQ on freenode.net](https://freenode.net/faq.shtml#sendpass) 86 | 87 | 这篇快速指南仅简单讲了如何使用IRC,如果你觉得IRC对你有用的话,你可以更深入的学习。另一个开源项目 Drupal已经写了一篇关于[IRC更详细的文档](https://www.drupal.org/irc/setting-up)。(非常感谢Drupal) -------------------------------------------------------------------------------- /Project/make-a-contribution.md: -------------------------------------------------------------------------------- 1 | # 了解docker贡献的流程 2 | 3 | ## 了解如何做出贡献 4 | 5 | 贡献是一个过程,你可以和 Docker 的维护者们一起工作并改善 docker 社区,这些维护者都是非常有经验的,他们在审查贡献时发挥了很大的作用,你们可以互相学习。 6 | 7 | ## 基本的贡献流程 8 | 9 | 本篇指南中,将会通过在 docker/docker 代码库中,解决一个初学者的问题,来了解 docker 基本的贡献流程。解决这个问题的流程如下所示: 10 | 11 | ![Images/existing_issue.png](Images/existing_issue.png) 12 | 13 | 在代码库中都会有所有的代码和文档,大多数的贡献流程和这个类似。比如:你可以查找并修改文档或代码的问题,你也可以向提交一个新的功能或教程。 14 | 15 | 有些工作流程阶段在代码和文档贡献的方面上会略有不同,当你遇到时我们会详细跟你说。 16 | 17 | ## 下一节 18 | 19 | [找出一个问题,并修改提交](find-an-issue.md)。 -------------------------------------------------------------------------------- /Project/review-pr.md: -------------------------------------------------------------------------------- 1 | # 加入到PULL请求(PR)的审查中 # 2 | 3 | 当创建完一个PULL请求后,你离成功贡献已经不远了。现在,你提交的代码会被持续集成系统(continuous integration 简称 CI)和维护人员测试。 4 | 5 | CI是一个自动的系统,你必须了解机器和人工是如何审查你的代码的。 6 | 7 | ## 如何审查你的代码 ## 8 | 9 | 首先审查的是Gordon,他会审查你的代码是否有普通的错误比如:缺少标点符号之类的。一旦Gordon 发现错误,他会发邮件到你注册GitHub时用到的邮箱。 10 | 11 | ![](../Images/gordon.jpeg) 12 | 13 | 构建系统会构建你的代码,同时Gordon会发送相关的邮件给你。 14 | 15 | 构建系统会通过使用Docker的master代码编译你的代码,以此来多次检查你的代码。构建过程会包括执行你在本地运行的测试样例。如果你忘记运行测试用例或修改漏洞,自动构建程序会检查出来。 16 | 17 | 当Gordon和持续集成系统检查完毕后,我们的维护人员会审查你的代码,维护人员会查看的pull请求并在上面发表评论,你也许会看到 LGTM 这样的评论,它的意思是 looks-good-to-me, 如果你收到 LGTM 这样的评论,就表示你通过了审查。 18 | 19 | 对于一些复杂的代码,维护人员可能会问你一些问题或让你修改你提交的代码。任何维护人员发表的评论都会发送到与你GitHub关联的email上,并且任何参与到你的pull请求的GitHub用户都会收到,参与意味着你创建了一个pull请求或评论了一个pull请求。 20 | 21 | 我们的维护人员是由经验丰富的docker 用户和开源贡献者组成的,因此,他们会很注重你的时间,并尝试和你一起有效的工作通过他们具体、简明的评论。如果他们让你修改你的代码,改完之后,你必须更新的代码。 22 | 23 | ## 更新一个现有的PULL请求 ## 24 | 25 | 1. 在你本机的docker-fork仓库中修改文件 26 | 27 | 2. 使用 git commit --amend 这个命令提交 28 | 29 | $ git commit --amend 30 | 31 | Git会打开你上次提交的信息 32 | 33 | 3. 调成最后的评论信息来说明你这次修改的内容 34 | 35 | Added a new sentence per Anaud's suggestion 36 | 37 | Signed-off-by: Mary Anthony 38 | 39 | # Please enter the commit message for your changes. Lines starting 40 | 41 | # with '#' will be ignored, and an empty message aborts the commit. 42 | 43 | # On branch 11038-fix-rhel-link 44 | 45 | # Your branch is up-to-date with 'origin/11038-fix-rhel-link'. 46 | 47 | # 48 | 49 | # Changes to be committed: 50 | 51 | # modified: docs/sources/installation/mac.md 52 | 53 | # modified: docs/sources/installation/rhel.md 54 | 55 | 4. push 到你的origin 56 | 57 | $ git push origin 58 | 59 | 5. 进入 GitHub官网,查看你的pull请求 60 | 61 | 此时你的代码已经是最新的了 62 | 63 | 6. 对你的pull请求添加一条评论 64 | 65 | 当你评论后,GitHub只会提醒参与到pull请求的人。比如:你可以提到你更新了你的pull请求,你的评论会提醒维护人员你已经更新了。 66 | 67 | 你修改的代码要获得维护那个组件的绝大多数人员的LGTMs 评论,例如:你修改了 docs/ 和 registry/ 的代码,那么 docs/ 和 registry/ 的绝大多数维护人员必须通过你提交的修改,一旦你获得通过,你的代码就会合并到Docker master 分支中去。 68 | 69 | ## 合并之后 ## 70 | 71 | 如果你要在Docker 的官方查看被合并的代码,可能要过一段时间,尽管构建master分支是立即的。当master分支每一次合并之后,Docker都会重新构建并更新它的二进制文件。 72 | 73 | 1. 访问 [https://master.dockerproject.com/](https://master.dockerproject.com/) 74 | 75 | 2. 查找适合你的系统的二进制文件 76 | 77 | 3. 下载并运行 78 | 79 | 你可以在容器中运行这个二进制文件,这会使你的宿主机的环境更干净 80 | 81 | 4. 你可以访问 [docs.master.dockerproject.com](http://docs.master.dockerproject.com/) 来查看最新的文档 82 | 83 | 一旦你的Pull 请求验证通过,你就可以从你fork的仓库中删除你的特性分支了。如果比了解,请看这篇文章:[see the GitHub help on deleting branches](https://help.github.com/articles/deleting-unused-branches/) 84 | 85 | ## 下一节 ## 86 | 87 | [学习高级贡献](advanced-contributing.md) -------------------------------------------------------------------------------- /Project/software-required-win.md: -------------------------------------------------------------------------------- 1 | # 在Windows上获取必要软件 # 2 | 3 | 本文直白讲诉使用Window Server 2012 或者windows 8的电脑需要怎样获取Docker开发的软件。在此之前,你必须具备如下条件: 4 | 5 | * GitHub账号 6 | * Git for Windows (msysGit) 7 | * TDM-GCC, a compiler suite for Windows 8 | * MinGW (tar and xz) 9 | * Go language 10 | 11 | > 说明:安装程序会安装到C盘,如果你的系统的主活动磁盘在D盘,你将需要在特定时候选择替换为D盘。 12 | 13 | ## 获得Github账号 ## 14 | 15 | 为了能贡献Docker项目,你需要有[Github账号](https://github.com/)。当然账号是免费的(:。所有Docker项目的库都是公有的,对任何人可见。 16 | 17 | 你需要有使用Github应用和在命令行上使用git的经验。 18 | 19 | ## Windows上安装git ## 20 | 21 | Git for Windows包含几个工具,msysGit(构建环境). 环境中包含你需要用于开发的工具:Gi和Git Bash shell。 22 | 23 | 1. 访问[Git for Windows](https://msysgit.github.io/)下载页面. 24 | 1. 点击**下载**,浏览器会提示你保存文件到你的系统中. 25 | 1. 运行保存的文件,此时系统会显示**Git安装向导**。 26 | 1. 点击**下一步**,所有向导页都选择默认值。 27 | 1. 点击**完成**。 28 | 29 | ## 安装TDM-GCC ## 30 | 31 | TDM-GCC是Windows平台编译套件。 你将使用它编译Docker Go代码。 32 | 33 | - 浏览器访问[tdm-gcc download page](http://tdm-gcc.tdragon.net/download)。 34 | - 点击下载最新的64位软件包,浏览器会提示你保存文件到你系统中。 35 | - 运行保存的文件,此时系统会显示**TDM-GCC安装向导**。 36 | - 点击**创建**。 37 | - 点击**下一步**,所有向导页都选择默认值。 38 | - 点击**完成**。 39 | 40 | 41 | ## 安装MinGW (tar and xz) ## 42 | MinGW是一个简化版GNU Compiler Collection (GCC)。 当然,你需要首次下载和安装**MinGW安装助手**。然后使用助手安装tar 和xz工具。 43 | 44 | 1. 浏览器访问 [MinGW SourceForge](http://sourceforge.net/projects/mingw/)。 45 | 46 | 2. 点击下载,浏览器会提示你保存文件到你系统中。 47 | 48 | 3. 运行下载的文件。 49 | 50 | 系统会打开**MinGW安装助手**。 51 | 52 | 1. 选择**安装**MinGW安装助手。 53 | 54 | 2. 点击**继续**,系统会打开**MinGW安装助手**。 55 | 56 | 3. 点击**继续**,在打开**MinGW安装助手**安装完成后。 57 | 58 | 4. 选择 **All Packages > MSYS Base System** 从左边的菜单中,系统会显示所有有效的软件包。 59 | 60 | 5. 点击**msys-tar bin**,选择**Mark for Installation**。 61 | 62 | 6. 点击**msys-xz bin** 选择**Mark for Installation**。 63 | 64 | 7. 选择**Installation > Apply Changes**,安装选中的包。 65 | 66 | 系统会显示**Schedule of Pending Actions Dialog**。 67 | 68 | ![windows-mingw](../Images/windows-mingw.png) 69 | 70 | 8. 点击**应用**,MingGW为你安装所有包。 71 | 72 | 9. 关闭**对话框**和**MinGW安装助手**。 73 | 74 | ## 安装Go并交叉编译它 ## 75 | 76 | 安装Go语言并编译源码,以此让它可以交叉编译linux/amd64 架构的东西。 77 | 78 | 1. 浏览器打开[Go语言下载](http://golang.org/dl/)。 79 | 80 | 2. 找到并下载最新的.msi安装软件,浏览器会提示你保存文件到你系统中。 81 | 82 | 3. Run安装软件,系统会打开**Go编程语言安装向导**。 83 | 84 | 4. 选择默认设置安装。 85 | 86 | 5. 点击关闭安装向导。 87 | 88 | 6. 打开命令行。 89 | 90 | 7. 切换到Go的src路径下: 91 | 92 | cd c:\Go\src 93 | 8. 设置如下Go环境变量。 94 | 95 | c:\Go\src> set GOOS=linux 96 | c:\Go\src> set GOARCH=amd64 97 | 9. 编译源码。 98 | 99 | c:\Go\src> make.bat 100 | 101 | 编译源码的过程也会往系统加入一些环境变量。 102 | 103 | ## 获得Docker代码库 ## 104 | 105 | 启动Git bash终端获得Docker源码,从Github上。 106 | 107 | 1. 查找Git Bash程序并启动它。 108 | 109 | ![](../Images/git_bash.png) 110 | 111 | 2. 切换到root路径下。 112 | 113 | $ cd /c/ 114 | 3. 创建gopath目录。 115 | 116 | $ mkdir gopath 117 | 4. Go获得docker/docker代码库。 118 | 119 | $ go.exe get github.com/docker/docker package github.com/docker/docker 120 | imports github.com/docker/docker 121 | imports github.com/docker/docker: no buildable Go source files in C:\gopath\src\github.com\docker\docker 122 | 接下来,你为你的Go路径创建环境变量。 123 | 124 | 5. 打开**控制面板**。 125 | 126 | 6. 选择**系统与安全**> **系统**. 127 | 128 | ![](../Images/20150612230144.jpg) 129 | 130 | ![](../Images/20150612230246.jpg) 131 | 132 | 7. 点击**高级系统设置**。 133 | 134 | ![](../Images/20150612230343.jpg) 135 | 136 | 系统会打开**系统属性对话框**。 137 | 138 | 8. 选择**高级**页签,点击环境变量。 139 | 140 | ![](../Images/20150612230445.png) 141 | 142 | 9. 系统会打开**环境变量对话框**。 143 | 144 | 10. 找到**系统变量(S)**,滚动滚动体找到**Path**变量。 145 | 146 | 11. 点击**新建**,现在你会创建某些新的环境变量。 147 | 148 | 12. 键入**GOPATH**作为**变量名**。 149 | 键入如下值,作为**变量值**: 150 | C:\gopath;C:\gopath\src\github.com\docker\docker\vendor 151 | 13. 点击**确定**,关闭对话框。系统就添加了GOPATH到系统环境变量中。 152 | 153 | 14. 点击**确定**,关闭剩余的对话框。 154 | 155 | ## 下一步 ## 156 | 157 | [配置Git](set-up-git.md) -------------------------------------------------------------------------------- /Project/software-required.md: -------------------------------------------------------------------------------- 1 | # Linux与OS X环境下获取必要的软件 2 | 3 | 在你提交你的贡献之前,你必须符合以下几个条件: 4 | 5 | * 一个GitHub账号 6 | 7 | * 安装git 8 | 9 | * 会使用make 10 | 11 | * 熟悉docker 12 | 13 | 你会发现虽然docker使用`Go`语言开发,但Go语言并不是必须的,因为你没有必要安装它,docker的开发环境会给你提供,之后你会学到更多关于docker开发环境方面的东西。 14 | 15 | ## 获得一个GitHub账号 16 | 17 | 你必须有一个[GitHub账号](https://github.com/),才能给docker项目提交你的贡献。一个免费的GitHub账号就可以了,docker项目所有的代码库都是公共的,并且每个人都能看的到。 18 | 19 | 你应该熟悉使用 git 命令在GitHub上托管你的应用。 20 | 21 | ## 安装git 22 | 23 | 在你的主机上安装git,你可以用如下的命令来查看你的主机是否已经安装了git: 24 | 25 | $ git --version 26 | 27 | 这篇文档使用git版本是2.2.2 28 | 29 | ## Install make 30 | 31 | 用如下的命令你可以查看你的电脑上有没有安装make: 32 | 33 | $ make -v 34 | 35 | 本文使用的是GNU Make 3.81 36 | 37 | ## 安装或升级docker 38 | 39 | 如果你还没有安装docker,请查看这篇文章: [当前系统环境下安装Docker](../Installation/README.md),如果你已经安装了,你可以检查一下它的版本让它保持是最新的版本。 40 | 41 | 检查Linux上是否成功安装docker: 42 | 43 | $ docker --version 44 | 45 | Docker version 1.5.0, build a8a31ef 46 | 47 | 在Mac OS X 或 Windows上,你可以安装Boot2Docker,然后你要检查一下Boot2Docker和Docker,在OS X中你可以用如下的命令: 48 | 49 | $ boot2docker version 50 | 51 | Boot2Docker-cli version: v1.5.0 52 | 53 | Git commit: ccd9032 54 | 55 | 56 | 57 | $ docker --version 58 | 59 | Docker version 1.5.0, build a8a31ef 60 | 61 | ## Linux users和sudo命令 62 | 63 | 本文中假设你已经将你主机上的用户添加到了docker group中,列出group的内容: 64 | 65 | $ getent group docker 66 | 67 | docker:x:999:ubuntu 68 | 69 | 70 | 如果命令返回不匹配,你有两种做法:你可以在你的docker命令前加上sudo命令,另外,你可以将用户通过以下命令添加到docker group: 71 | 72 | $ sudo usermod -aG docker ubuntu 73 | 74 | 你必须注销并重新登陆使这个修改生效。 75 | 76 | ## 下一步 77 | 78 | [配置Git](set-up-git.md) -------------------------------------------------------------------------------- /Project/who-written-for.md: -------------------------------------------------------------------------------- 1 | # README first 2 | 3 | 本章节主要介绍了如何对docker的代码和文档做出自己的贡献。最为一个开源社区,我们会分享一些互动的规则,不过在贡献之前你必须要熟悉[docker社区参考](https://github.com/docker/docker/blob/master/CONTRIBUTING.md#docker-community-guidelines)。 4 | 5 | ## 参与贡献 6 | 7 | Docker这个项目是由Github上的多个代码仓库组成的,出了docker/docker这个仓库之外,还有docker/libcontainer、docker/machine等一些其他的仓库。 8 | 9 | 不是所有的docker代码仓库都是用Go语言写的,每个代码库都有特定的领域。因此,如果你是一位有经验的贡献者,你在贡献的时候可以选择你擅长的领域和用你熟悉的语言。 10 | 11 | 如果你是刚接触开源社区,或者docker还是正是的编程,你应该开始对docker/docker仓库做出一些贡献。为什么呢?因为这个指南是专门为这个仓库而写的。 12 | 13 | 最后,代码或是文档并不是贡献的唯一方式。你也可以在docker的社区频道提交一个问题,加入到一个讨论中,写一篇blog,或是做一个可用性的测试。你甚至可以提出自己的类型的贡献,现在我们对于这方面并没有写太多,如果你感兴趣可以发送邮件至 [feedback@docker.com](mailto:feedback@docker.com) 。 14 | 15 | ## 这里涉及一个乌龟 16 | 17 | [](../Images/gordon.jpeg) 18 | 19 | 好了,已经说的够多了。 20 | 21 | How to use this guide 22 | 23 | 这篇指南只是写给那些容易分心,劳累和马虎且有一点对 git 知识了解但又对 GitHub GUI 不太了解的读者的,本文将尽可能准确,可操作的讲解如何使用docker环境。 24 | 25 | docker初学者可以尝试着建立自己的docker环境,然后可以对代码做一些简单的改变,之后,你也许会发现在docker上能找到一些工作或提出新的问题。 26 | 27 | 如果你是编程天才,你也会发现这篇文档非常有用,当你困惑时可以随时查看以前的文章。 28 | 29 | ## 怎样开始 30 | 31 | 首先,获取必要的软件,其平台可以是:[Linux or OS X](software-required.md) 或者 [Windows](software-required-win.md)。 -------------------------------------------------------------------------------- /Project/work-issue.md: -------------------------------------------------------------------------------- 1 | #解决你关注的问题# 2 | 3 | 本节将会带你一步一步的了解工作流程,同时还会给你一些命令实例。 4 | 5 | 不过这只是一个大概的流程,也许和你关注的问题会略有不同,当然你花费在上面的时间也会不同。 6 | 7 | ## 如何完成你的本地分支 ## 8 | 9 | 步骤如下: 10 | 11 | 1. 查看合适的样式指南 12 | 13 | 如果你修改了代码,请查看[编码规范](coding-style.md),如果修改的是文档,请查看[文档格式规范](doc-style.md) 14 | 15 | 2. 对你的特性分支进行修改 16 | 17 | 这个特性分支是在上一节中创建的,在这里你是用的是开发容器。如果你对代码进行了修改,你可以将代码挂载到开发容器中使用。如果只是修改了文档,你可以在本机访问。 18 | 19 | 你不能修改 vendor 目录及其子目录里的内容,它们包含了第三方的依赖代码,如果你忘记的话,请查看这篇文章:[使用一个开发容器](set-up-dev-env.md) 20 | 21 | 3. 测试你修改的部分 22 | 23 | 24 | 如果你是按照这篇指南做的话,你就会知道 make test 目标运行了整个测试套件并且make docs 构建了这个文档。如果你忘记了其它的测试目标,请查看这篇文章:[运行测试程序并测试文档](test-and-docs.md) 25 | 26 | 4. 如果修改了代码,必要的发可以添加单元测试 27 | 28 | 如果你添加了一个新的功能或是修改了现有的功能,你就要添加一个单元测试。你可以从现有的测试文件中找到一些灵感,如果你不确定是否要测试,你可跳过这个步骤,如果以后必要的话你可以加进去。 29 | 30 | 5. 格式化你的源文件 31 | 32 | ![](Images/2406048100940639758.png) 33 | 34 | 6. 列出你修改的地方 35 | 36 | $ git status 37 | 38 | On branch 11038-fix-rhel-link 39 | 40 | Changesnot staged for commit: 41 | 42 | (use"git add ..." to update what will be committed) 43 | 44 | (use"git checkout -- ..." to discard changes in working directory) 45 | 46 | 47 | 48 | modified: docs/sources/installation/mac.md 49 | 50 | modified: docs/sources/installation/rhel.md 51 | 52 | status 命令会显示你修改过的所有文件 53 | 54 | 7. 将你修改过的文件添加到 Git 55 | 56 | $ git add docs/sources/installation/mac.md 57 | 58 | $ git add docs/sources/installation/rhel.md 59 | 60 | 8. 提交你的修改并用 -s 指出你修改的内容 61 | 62 | $ git push origin 63 | 64 | Usernamefor'https://github.com': moxiegirl 65 | 66 | Passwordfor'https://moxiegirl@github.com': 67 | 68 | Counting objects:60,done. 69 | 70 | Compressing objects:100%(7/7),done. 71 | 72 | Writing objects:100%(7/7),582 bytes |0 bytes/s,done. 73 | 74 | Total7(delta 6), reused 0(delta 0) 75 | 76 | To https://github.com/moxiegirl/docker.git 77 | 78 | *[new branch]11038-fix-rhel-link ->11038-fix-rhel-link 79 | 80 | Branch11038-fix-rhel-link set up to track remote branch 11038-fix-rhel-link from origin. 81 | 82 | 你第一次提交的时候,必须指明是哪个分支,下回你只需使用下面的命令就可以了: 83 | 84 | $ git push origin 85 | 86 | ## 在GitHub上查看你的分支 ## 87 | 88 | 当你提交了一个新的分支后,你可以在[GitHub](https://github.com/)上查看 89 | 90 | 1. 登陆 GitHub 91 | 92 | 2. 转到 Docker fork 93 | 94 | 3. 选择你的分支 95 | 96 | ![Images/locate_branch.png](Images/locate_branch.png) 97 | 98 | 4. 点击 “Compare”按钮,将你的分支和 master 分支进行对比 99 | 100 | 如果你一直使用的是你的分支,那么你的分支的版本可能会落后于上游的docker 版本库 101 | 102 | 5. 审查提交 103 | 104 | 确保你的分支只显示你修改的地方 105 | 106 | ## 频繁的pull和rebase ## 107 | 108 | 当你在使用的时候你应该频繁的pull 和 rebase 109 | 110 | 1. 进入终端 111 | 112 | 2. 检查是否处于本地的分钟中 113 | 114 | $ git branch 11038-fix-rhel-link 115 | 116 | 3. 从 upstream/master 分支获取更新 117 | 118 | $ git fetch upstream/master 119 | 120 | 4. 将 Docker upstream/master 分支重写(rebase)到你的主机 121 | 122 | $ git rebase -i upstream/master 123 | 124 | 这条命令会将 Docker 的 upstream/master 分支上的代码合并到你的分支,如果你不熟悉 rebase 操作的话,可以查看这篇文章: [learn more about rebasing](http://nathanleclaire.com/blog/2014/09/14/dont-be-scared-of-git-rebase) 125 | 126 | 5. Rebase 操作会打开编辑器并显示提交的列表 127 | 128 | pick 1a79f55Tweak some of the other text for grammar 129 | 130 | pick 53e4983Fix a link 131 | 132 | pick 3ce07bbAdd a new line about RHEL 133 | 134 | 如果遇到错误,git --rebase abort 命令会撤销所有的修改 135 | 136 | 6. 将编辑器中除了第一个以外的所有 pick 关键字替换成 squash 137 | 138 | pick 1a79f55Tweak some of the other text for grammar 139 | 140 | squash 53e4983Fix a link 141 | 142 | squash 3ce07bbAdd a new line about RHEL 143 | 144 | 7. 编辑完成之后保存提交的信息 145 | 146 | 确保已经包括了你的签名 147 | 148 | 8. push 到你的代码库 149 | 150 | $ git push origin 11038-fix-rhel-link 151 | 152 | ## 下一节 ## 153 | 154 | [学习如何创建一个pull 请求](create-pr.md) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dockerdocs 2 | 3 | docker官方文档中文翻译---当前翻译文档版本号v1.6,官方地址点击[这里](http://beta-docs.docker.io/v1.6/) 4 | 5 | ## 目的 6 | 7 | 为了能更好的为大家的提供持续更新的docker官方文档的中文版本,特此开辟此GitBook项目,希望大家踊跃贡献你的翻译! 8 | 9 | ## 联系我们 10 | 11 | QQ群号 181774264 Docker学习交流群
12 | 13 | 微信公众号 Dockerlover 14 | 15 | 百度贴吧 [docker](http://tieba.baidu.com/f?kw=docker) 16 | 17 | 博客地址 [Docker Lover](http://dockerlover.lofter.com) 18 | 19 | 乐程软件工作室 [社团连接](https://github.com/LeChengSoftStudio) 20 | 21 | ## 开始阅读 22 | 23 | 点击[这里](SUMMARY.md) 24 | 25 | ## 建议阅读顺序 26 | 27 | 如果你是对docker一无所知的朋友,我们强烈建议你对本GitBook项目的阅读顺序如下: 28 | 29 | [关于Docker](About/docker.md) 30 | 31 | [安装Docker](Installation/ubuntulinux.md) 32 | 33 | [Docker基本操作](Articles/basics.md) 34 | 35 | [Docker用户指南](UserGuide/README.md) 36 | 37 | [Docker使用示例](Examples/README.md) 38 | 39 | [深入Docker原理](Articles/README.md) 40 | 41 | [了解Docker Compose](Compose/dockercompose.md) 42 | 43 | [了解Docker Machine](UserGuide/dockermachine.md) 44 | 45 | [了解Docker Swarm](UserGuide/dockerswarm.md) 46 | 47 | [了解Docker Hub](DockerHub/README.md) 48 | 49 | [了解企业版 Docker Hub](DockerHubEnterprise/README.md) 50 | 51 | [有用的参考工具](Reference/README.md) 52 | 53 | [贡献你的代码](Project/README.md) 54 | 55 | ## 部署本Gitbook项目到本地 56 | 57 | 如果你是对docker和gitbook已经很熟悉的朋友,希望能本地阅读我们的翻译文档,点击阅读社区文章:[本地部署社区Gitbook项目](https://github.com/liuhong1happy/dockerdocs/wiki/%E6%9C%AC%E5%9C%B0%E9%83%A8%E7%BD%B2%E7%A4%BE%E5%8C%BAGitbook%E9%A1%B9%E7%9B%AE) 58 | 59 | ## 意见与建议 60 | 61 | 如果你对我们参与的开源翻译项目有什么意见或者建议,请加入我们的QQ讨论群181774264,或者[Email:liuhong1.happy@163.com](mailto:liuhong1.happy@163.com),我们将持续改进翻译水平,给大家带来别致的阅读享受。 62 | 63 | ## 社区后续工作 64 | 65 | 目前社区人力有限,搁浅如下社区后续工作,希望广大社区爱好者参与,万分感谢。 66 | 67 | 1. 社区网站建设 68 | 2. 分享docker最新实践方案 69 | 3. 持续跟踪docker相关项目:[Kubernetes](https://github.com/GoogleCloudPlatform/kubernetes) 70 | 4. Docker与OpenStack整合方案:[magnum](https://github.com/openstack/magnum) 71 | 72 | 73 | ## 翻译倒计时 74 | 75 | **用户指南**章节1篇未翻译 76 | 77 | **DockerHub**章节3篇未翻译 78 | 79 | **实例**章节3篇未翻译 80 | 81 | **文章**章节3篇未翻译 82 | 83 | **参考**章节19篇未翻译 84 | 85 | 86 | -------------------------------------------------------------------------------- /Reference/README.md: -------------------------------------------------------------------------------- 1 | # 引言 2 | 3 | 本章节主要对docker的相关的参考说明文档进行了详细的介绍,如果你对docker那个细致的地方是不很熟悉,可以查找相应的参考文档进行阅读。 4 | 5 | ## 章节列表 6 | * [Docker命令行](commandline/cli.md) 7 | * [Dockerfile](commandline/cli.md) 8 | * [问与答-FAQ](commandline/cli.md) 9 | * [Run命令参考](commandline/cli.md) 10 | * [Compose命令行](commandline/cli.md) 11 | * [Compose yml](commandline/cli.md) 12 | * [Compose ENV变量](commandline/cli.md) 13 | * [Compose命令行实现](commandline/cli.md) 14 | * [Swarm发现服务](commandline/cli.md) 15 | * [Swarm策略](commandline/cli.md) 16 | * [Swarm filters](commandline/cli.md) 17 | * [Swarm API](commandline/cli.md) 18 | * [Docker Registry 2.0](commandline/cli.md) 19 | * [部署一个私有镜像库](commandline/cli.md) 20 | * [配置私有镜像库](commandline/cli.md) 21 | * [存储驱动模块](commandline/cli.md) 22 | * [了解notifications](commandline/cli.md) 23 | * [Registry Service API v2](commandline/cli.md) 24 | * [JSON格式](commandline/cli.md) 25 | * [中心服务验证](Reference/commandline/cli.md) 26 | * [Docker Hub and Registry 1.0](Reference/commandline/cli.md) 27 | * [Docker Registry API v1](Reference/commandline/cli.md) 28 | * [Docker Registry 1.0 API Client Libraries](Reference/commandline/cli.md) 29 | * [Docker Hub API](Reference/commandline/cli.md) 30 | * [Docker Remote API](Reference/commandline/cli.md) 31 | * [Docker Remote API v1.18](Reference/commandline/cli.md) 32 | * [Docker Remote API v1.17](Reference/commandline/cli.md) 33 | * [Docker Remote API v1.16](Reference/commandline/cli.md) 34 | * [Docker Remote API Client Libraries](Reference/commandline/cli.md) 35 | * [Docker Hub Accounts API](Reference/commandline/cli.md) 36 | -------------------------------------------------------------------------------- /Reference/api/docker-io_api.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/docker-io_api.md -------------------------------------------------------------------------------- /Reference/api/docker_remote_api.md: -------------------------------------------------------------------------------- 1 | # Docker Remote API 2 | 3 | * 默认情况下,Docker daemon监听unix:///var/run/docker.sock,客户端必须有权限和这个daemon进行交互。 4 | 5 | * 如果在Boot2Docker 1.3.0上docker deamon 被设置为使用加密的TCP socket链接(--tls或者--tlsverify),那么你需要添加额外的参数给curl或者wget,测试API要求: 6 | 7 | curl --insecure --cert ~/.docker/cert.pem --key ~/.docker/key.pem https://boot2docker:2376/images/json or wget --no-check-certificate --certificate=$DOCKER_CERT_PATH/cert.pem --private-key=$DOCKER_CERT_PATH/key.pem https://boot2docker:2376/images/json -O - -q 8 | 9 | * 如果名为docker的group存在你的系统里,docker将应用socket的所有权来链接这个group。 10 | 11 | * API扩展为REST,但是某些复杂的指令,例如attach,pull;HTTP链接是被抹去了的,不能执行STDOUT,STDIN和STDERR。 12 | 13 | * 自从API 1.2,权限配置是可以在客户端管控的,因此客户端不得不发送authConfig作为POST对象到/images/(name)/push里。 14 | 15 | * authConfig,设置了X-Registry-Auth头,当前是一个Base64编码的JSON字符串,使用如下的结构: 16 | 17 | {"username": "string", "password": "string", "email": "string", "serveraddress" : "string", "auth": ""} 18 | 19 | 注意auth左边的值不能为空,serveraddress一个不带协议的domain/ip,这两个引用是被要求的。 20 | 21 | * Remote API使用一个开源的 schema model,在这个model,不知道属性会被忽略。客户端应用需要把这个考虑进账户,确保他们不能被挡,在新的Docker daemon通话的时候。 22 | 23 | 当前API的版本是1.18 24 | 25 | 调用`/info`等同于调用`/v1.18/info` 26 | 27 | 你可以一直调用一个老版本的API,使用`/v1.17/info`。 28 | 29 | 如果想了解最新API,请导航到: 30 | 31 | [Docker Remote API 1.18](docker_remote_api_v1.18.md) 32 | 33 | 或者你想导航到较老的API: 34 | 35 | [Docker Remote API 1.17](docker_remote_api_v1.17.md) 36 | 37 | [Docker Remote API 1.16](docker_remote_api_v1.16.md) -------------------------------------------------------------------------------- /Reference/api/docker_remote_api_v1.16.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/docker_remote_api_v1.16.md -------------------------------------------------------------------------------- /Reference/api/docker_remote_api_v1.17.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/docker_remote_api_v1.17.md -------------------------------------------------------------------------------- /Reference/api/docker_remote_api_v1.18.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/docker_remote_api_v1.18.md -------------------------------------------------------------------------------- /Reference/api/hub_registry_spec.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/hub_registry_spec.md -------------------------------------------------------------------------------- /Reference/api/registry_api.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/registry_api.md -------------------------------------------------------------------------------- /Reference/api/registry_api_client_libraries.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/registry_api_client_libraries.md -------------------------------------------------------------------------------- /Reference/api/remote_api_client_libraries.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/api/remote_api_client_libraries.md -------------------------------------------------------------------------------- /Reference/builder.md: -------------------------------------------------------------------------------- 1 | #Dockerfile参考 2 | 3 | **Docker可以自动化构建镜像**是通过读入Dockerfile指令来实现的。一个Dockerfile是一个文本格式的文件,包含所有你将要自动化构建镜像时执行的命令。通过调用`docker build`终端命令成功执行这些指令,你就可以一步一步地构建镜像。 4 | 5 | 本文讨论这些指定指令的细节。为了帮助你写一个清晰、可读性高、易维护的Dockerfile,我们也写了一篇[Dockefile书写最佳指南](../Articles/dockerfile_best-practices.md)。最后,你可以测试你的Dockerfile知识,点击[Dockerfile教程](http://beta-docs.docker.io/userguide/level1/)。 6 | 7 | ## 用法 ## 8 | 9 | 为了从源代码库构建一个镜像,创建一个叫做Dockefile的文件在代码库的根目录下。这个文件将描述装配镜像的步骤。 10 | 11 | 然后调用docker build命令,指定当前目录最为参数(.): 12 | 13 | $ sudo docker build . 14 | 15 | 路径下的源代码定义了可被发现的构建上下文。这个构建将通过Docker Daemon而不是通过CLI,因此整个上下文必须传送到daemon。当上下文传送完毕过后,Docker CLI打印 "Sending build context to Docker daemon"。 16 | 17 | 警告:避免你使用root目录(/)作为源代码仓库的路径。docker build命令将使用是否包含Dockerfile的目录作为构建上下文。构建上下文将传送到Docker daemon(在构建镜像之前),也就意味着如果你一旦使用root目录,你硬盘内的所有内容都建传送到daemon。你可能不想那样做。 18 | 19 | 在大多数情况下,最好放置Dockerfile到一个空目录中,然后添加你需要构建镜像所需的文件。为了进一步加速构建,你可以排除掉不相干的文件或者目录,通过添加一个.dockerignore文件到相同目录下。 20 | 21 | 你可以指定一个私有仓库和tag,以保存构建成功后的镜像。 22 | 23 | $ sudo docker build -t shykes/myapp . 24 | 25 | Docker daemon将一步步执行你的指令,如果成功提交结果到新的镜像中去,最后输出你新的镜像的ID。Docker daemon将自动化清楚掉你传送的上下文。 26 | 27 | 注意每条指令单独执行,最后一个新的镜像被创建。因此,RUN cd /tmp将不会影响接下来的指令。 28 | 29 | 当然,Docker尽可能的重用镜像,加速docker build的速度(通过 Using cache指明,详情请看 [Dockefile书写最佳指南](../Articles/dockerfile_best-practices.md)): 30 | 31 | $ sudo docker build -t SvenDowideit/ambassador . 32 | Uploading context 10.24 kB 33 | Uploading context 34 | Step 1 : FROM docker-ut 35 | ---> cbba202fe96b 36 | Step 2 : MAINTAINER SvenDowideit@home.org.au 37 | ---> Using cache 38 | ---> 51182097be13 39 | Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' | sh && top 40 | ---> Using cache 41 | ---> 1a5ffc17324d 42 | Successfully built 1a5ffc17324d 43 | 44 | 当你完成,你可以阅读[push镜像到你的私有仓库](../Userguide/dockerrepos.md)。 45 | 46 | ## 语法 ## 47 | 48 | Dockerfile的语法类似如下: 49 | 50 | # Comment 51 | INSTRUCTION arguments 52 | 53 | 指令不区分大小写,约定俗成为大写,以便更容易和参数区分。 54 | 55 | Docker 按顺序执行Dockerfile中的指令。第一条指令必须是FROM,为了指定[基础镜像](http://beta-docs.docker.io/terms/image/#base-image)。 56 | 57 | Docker将使用#号注释,一个#可以在任何地方标记甚至是在参数的后边: 58 | 59 | # Comment 60 | RUN echo 'we are running some # of cool things' 61 | 62 | ## 环境替换 ## 63 | 64 | > 说明:在1.3版本以前,Dockerfile环境变量是被类似操作的,他们可以按照如下方式替换。但是,没有正式指令定义环境变量替换。1.3版本过后,这中行为保留并升华。 65 | 66 | 环境变量(使用ENV语句声明)可以被使用在某次指令集中,作为变量被Dockerfile解析。 -------------------------------------------------------------------------------- /Reference/commandline/cli-5.md: -------------------------------------------------------------------------------- 1 | ## save 2 | 3 | Usage: docker save [OPTIONS] IMAGE [IMAGE...] 4 | 5 | Save an image(s) to a tar archive (streamed to STDOUT bydefault) 6 | 7 | -o,--output=""Write to a file, instead of STDOUT 8 | 9 | 10 | 11 | Produces a tarred repository to the standard output stream. Contains all parent layers, and all tags + versions, or specified repo:tag, for each argument provided. 12 | 13 | It is used to create a backup that can then be used with docker load 14 | 15 | 16 | 17 | $ sudo docker save busybox > busybox.tar 18 | 19 | $ ls -sh busybox.tar 20 | 21 | 2.7M busybox.tar 22 | 23 | $ sudo docker save --output busybox.tar busybox 24 | 25 | $ ls -sh busybox.tar2.7M 26 | 27 | busybox.tar 28 | 29 | $ sudo docker save -o fedora-all.tar fedora 30 | 31 | $ sudo docker save -o fedora-latest.tar fedora:latest 32 | 33 | It is even useful to cherry-pick particular tags of an image repository 34 | 35 | $ sudo docker save -o ubuntu.tar ubuntu:lucid ubuntu:saucy 36 | 37 | 38 | 39 | ## search 40 | 41 | 搜索 Docker Hub 中的镜像。 42 | 43 | Usage: docker search [OPTIONS] TERM 44 | 45 | Search the DockerHubfor images 46 | 47 | --automated=false Only show automated builds 48 | 49 | --no-trunc=false Don't truncate output 50 | 51 | -s, --stars=0 Only displays with at least x stars 52 | 53 | 查看 Find Public Images on Docker Hub 了解更多信息关于共享镜像的方法。 54 | 55 | > 说明:搜索结果仅仅返回头25个结果。 56 | 57 | ## start 58 | 59 | Usage: docker start [OPTIONS] CONTAINER [CONTAINER...] 60 | 61 | Restart a stopped container 62 | 63 | -a,--attach=false Attach container's STDOUT and STDERR and forward all signals to the process 64 | 65 | -i, --interactive=false Attach container's STDIN 66 | 67 | 当运行在一个容器,这个容器已经被启动了,没有采取任何措施和成功无条件。 68 | 69 | ## stop 70 | 71 | Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] 72 | 73 | Stop a running container by sending SIGTERM andthen SIGKILL after a grace period 74 | 75 | -t,--time=10 Number of seconds to wait for the container to stop before killing it.Defaultis10 seconds. 76 | 77 | 容器中的主进程接受SIGTERM,在宽限期后,接受SIGKILL。 78 | 79 | ## tag 80 | 81 | Usage: docker tag [OPTIONS] IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME[:TAG] 82 | 83 | Tag an image into a repository 84 | 85 | -f,--force=falseForce 86 | 87 | 你可以管理你的镜像,使用名称和标志,然后上传他们到 Share Images via Repositories。 88 | 89 | ## top 90 | 91 | Usage: docker top CONTAINER [ps OPTIONS] 92 | 93 | Display the running processes of a container 94 | 95 | ## unpause 96 | 97 | Usage: docker unpause CONTAINER 98 | 99 | Unpause all processes within a container 100 | 101 | The docker unpause command uses the cgroups freezer to un-suspend all processes in a container. 102 | 103 | See the cgroups freezer documentation for further details. 104 | 105 | ## version 106 | 107 | Usage: docker version 108 | 109 | Show the Docker version information. 110 | 111 | 显示 Docker version, API version, Git commit, 和 Go version ( Docker client 和daemon两者的Go version). 112 | 113 | 114 | $ sudo docker version 115 | Client version: 1.5.0 116 | Client API version: 1.17 117 | Go version (client): go1.4.1 118 | Git commit (client): a8a31ef 119 | OS/Arch (client): darwin/amd64 120 | Server version: 1.5.0 121 | Server API version: 1.17 122 | Go version (server): go1.4.1 123 | Git commit (server): a8a31ef 124 | OS/Arch (server): linux/amd64 125 | 126 | 127 | ## wait 128 | 129 | Usage: docker wait CONTAINER [CONTAINER...] 130 | 131 | Blockuntil a container stops,thenprint its exit code. -------------------------------------------------------------------------------- /Reference/faq.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Reference/faq.md -------------------------------------------------------------------------------- /Reference/registry/README.md: -------------------------------------------------------------------------------- 1 | # Docker Registry 2.0 2 | 3 | Docker Registry集中存储和分发镜像,你可以push镜像或者从中pull镜像,Docker Registry可以让团队尽可能的共享镜像,以便在测试、分阶段开发或者生成阶段快速部署环境。 4 | 5 | Docker提供了可供存储镜像的私有镜像库来作为Docker Hub的一部分。Docker Hub是一个提供给你安全管理镜像的云服务。它包含团队组织,自动构建,等功能或者未来更多的功能。 6 | 7 | Docker Registry是Docker Hub背后的核心技术。如果你也想自己存储镜像,可以自己部署私有镜像库实例。Docker Registry特点如下: 8 | 9 | 1. 可选存储驱动:镜像可以存储在Amazon S3, Microsoft Azure或者本地存储系统中。 10 | 2. Webhook通告:当有镜像push到你的私有镜像库时,webhooks可以触发CI构建并发送通知到IRC。 11 | 12 | 为了能快速开始Docker Registry,你可以先阅读[部署一个私有镜像库](deploying.md)。 13 | -------------------------------------------------------------------------------- /Registry/README.md: -------------------------------------------------------------------------------- 1 | # Docker Registry 2.0 2 | 3 | Docker Registry集中存储和分发镜像,你可以push镜像或者从中pull镜像,Docker Registry可以让团队尽可能的共享镜像,以便在测试、分阶段开发或者生成阶段快速部署环境。 4 | 5 | Docker提供了可供存储镜像的私有镜像库来作为Docker Hub的一部分。Docker Hub是一个提供给你安全管理镜像的云服务。它包含团队组织,自动构建,等功能或者未来更多的功能。 6 | 7 | Docker Registry是Docker Hub背后的核心技术。如果你也想自己存储镜像,可以自己部署私有镜像库实例。Docker Registry特点如下: 8 | 9 | 1. 可选存储驱动:镜像可以存储在Amazon S3, Microsoft Azure或者本地存储系统中。 10 | 2. Webhook通告:当有镜像push到你的私有镜像库时,webhooks可以触发CI构建并发送通知到IRC。 11 | 12 | 为了能快速开始Docker Registry,你可以先阅读[部署一个私有镜像库](deploying.md)。 13 | -------------------------------------------------------------------------------- /Registry/configuration.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/configuration.md -------------------------------------------------------------------------------- /Registry/notifications.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/notifications.md -------------------------------------------------------------------------------- /Registry/registry.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/registry.md -------------------------------------------------------------------------------- /Registry/spec/api.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/spec/api.md -------------------------------------------------------------------------------- /Registry/spec/auth/token.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/spec/auth/token.md -------------------------------------------------------------------------------- /Registry/spec/json.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/spec/json.md -------------------------------------------------------------------------------- /Registry/storagedrivers.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/Registry/storagedrivers.md -------------------------------------------------------------------------------- /Swarm/API.md: -------------------------------------------------------------------------------- 1 | # Docker Swarm API 2 | 3 | Docker Swarm API是最兼容 Docker Remote API的。这篇文档是两者间的差别概述。 4 | 5 | ## 缺失的端点(Missing endpoints) 6 | 7 | 一些端点还没实现会返回 404 错误. 8 | 9 | GET "/images/get" 10 | 11 | GET "/containers/{name:.*}/attach/ws" 12 | 13 | POST "/build" 14 | 15 | POST "/images/load" 16 | 17 | ## 行为不同的端点(Endpoints which behave differently) 18 | 19 | 20 | 21 | - GET "/containers/{name:.*}/json": 多出了Node字段: 22 | 23 | "Node": { 24 | "Id": "ODAI:IC6Q:MSBL:TPB5:HIEE:6IKC:VCAM:QRNH:PRGX:ERZT:OK46:PMFX", 25 | "Ip": "0.0.0.0", 26 | "Addr": "http://0.0.0.0:4243", 27 | "Name": "vagrant-ubuntu-saucy-64", 28 | }, 29 | 30 | 31 | 32 | - GET "/containers/{name:.*}/json": 如果 HostIP 是0.0.0.0,HostIP 被真正的节点IP代替。 33 | 34 | 35 | 36 | - GET "/containers/json": 节点名字充当容器名字 37 | 38 | 39 | 40 | - GET "/containers/json": 如果 HostIP 是0.0.0.0,HostIP 被真正的节点IP代替。 41 | 42 | 43 | 44 | - GET "/containers/json" : Containers started from the swarm official image are hidden by default, use all=1 to display them. 45 | 46 | 47 | 48 | - GET "/images/json" : 使用 '--filter node=\'展现特殊节点的镜像 -------------------------------------------------------------------------------- /Swarm/scheduler/strategy.md: -------------------------------------------------------------------------------- 1 | ## Swarm策略 2 | 3 | Docker Swarm 调度使用多种策略排列节点。所选的策略决定了Swarm 如何计算排列。当启动一个新的容器,Swarm 选择将节点放在你所选择的策略计算出的排位最高的节点之上。传递 --strategy标志及值给Swarm 管理命令,就可以选择策略,目前支持一下值: 4 | 5 | - spread 6 | - binpack 7 | - random 8 | 9 | spread 和 binpack 策略根据节点可用的CPU,RAM,和运行的容器数计算排位。 random 不使用计算,随机选择节点,主要用于调试。 10 | 11 | 选择策略的目的是根据公司需求最优化集群。Your goal in choosing a strategy is to best optimize your swarm according to your company's needs. 12 | 13 | 在 spread 策略下,Swarm优先选择运行容器最少的节点。Binpack优先选择运行容器最多的节点。 14 | 15 | Random就如名字一样,随机选择 不关心 CPU 或者 RAM. 16 | 17 | 使用spread 策略导致容器在很多机器中分散传播。其优点是如果一个机器down了,只会失去少数的容器。 18 | 19 | Binpack 策略避免碎片化,因为其在未使用的机器中为大容器留下空间。binpack 优点是可以使用很少的机器,因为Swarm会尽力给节点负载容器。不使用--strategy 时默认自动使用spread 策略。. 20 | 21 | ## Spread 策略的例子 22 | 23 | 这个例子中,swarm使用让每个节点会拥有最少容器的spread策略。此swarm中node-1 和 node-2 均拥有2G RAM, 2个 CPU,且没有任何运行的容器。这种策略下两节点会有相同排位。当启用一个新的容器时,系统随机从这两相同排位的节点中选择了node-1 24 | 25 | $ docker run -d -P -m 1G --name db mysqlf8b693db9cd6 26 | 27 | $ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NODE NAMES 28 | 29 | f8b693db9cd6 mysql:latest "mysqld" Less than a second ago running 192.168.0.42:49178->3306/tcp node-1 db 30 | 31 | 现在开启另外一个容器,请求1g RAm 。 32 | 33 | $ docker run -d -P -m 1G --name frontend nginx963841b138d8 34 | 35 | $ docker ps 36 | 37 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NODE NAMES 38 | 39 | 963841b138d8 nginx:latest "nginx" Less than a second ago running 192.168.0.42:49177->80/tcp node-2 frontendf8b693db9cd6 mysql:latest "mysqld" Up About a minute running 192.168.0.42:49178->3306/tcp node-1 db 40 | 41 | 容器 frontend 在node-2 启动,这是负载最少的节点。如果两节点有相同的RAM 和CPU,spread 策略选择容器负载数量最少的。 42 | 43 | ## BinPack策略的例子 44 | 45 | 这个例子中,假设node-1 和 node-2 均拥有2G RAM, 2个 CPU,且都有一个运行的容器。同样,两节点是对等的。当启用一个新的容器时,系统随机从这两相同排位的节点中选择了node-1 46 | 47 | 48 | 49 | $ docker run -d -P -m 1G --name db mysqlf8b693db9cd6 50 | 51 | $ docker ps 52 | 53 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NODE NAMES 54 | 55 | f8b693db9cd6 mysql:latest "mysqld" Less than a second ago running 192.168.0.42:49178->3306/tcp node-1 db 56 | 57 | 现在开启另外一个容器,请求1g RAm 。 58 | 59 | $ docker run -d -P -m 1G --name frontend nginx963841b138d8 60 | 61 | $ docker ps 62 | 63 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NODE NAMES 64 | 65 | 963841b138d8 nginx:latest "nginx" Less than a second ago running 192.168.0.42:49177->80/tcp node-1 frontendf8b693db9cd6 mysql:latest "mysqld" Up About a minute running 192.168.0.42:49178->3306/tcp node-1 db 66 | 67 | 容器 frontend 在node-1 启动,这是负载最多的节点。如果两节点有相同的RAM 和CPU,spread 策略选择容器负载数量最多的。 -------------------------------------------------------------------------------- /UserGuide/README.md: -------------------------------------------------------------------------------- 1 | # 用户指南 2 | 3 | 本章主要介绍Docker相关的基础知识,包括docker hub、容器、镜像、容器链接、数据卷、compose、machine、swarm等内容。 4 | 5 | ## 章节列表 6 | 7 | * [欢迎阅读Docker用户指南](userguide.md) 8 | * [初识Docker Hub](dockerhub.md) 9 | * [Docker化应用](dockerizing.md) 10 | * [了解Docker容器](dockercontainers.md) 11 | * [了解Docker镜像](dockerimages.md) 12 | * [了解Docker容器链接](dockerlinks.md) 13 | * [管理容器中数据](dockervolumes.md) 14 | * [了解Docker Hub](dockerrepos.md) 15 | * [Docker Compose用户指南](dockercompose.md) 16 | * [Docker Machine用户指南](dockermachine.md) 17 | * [Docker Swarm用户指南](dockerswarm.md) 18 | 19 | -------------------------------------------------------------------------------- /UserGuide/dockerhub.md: -------------------------------------------------------------------------------- 1 | # 初始Docker Hub 2 | 3 | 这一节,提供一个快速的引言来了解`Docker Hub`,包括怎样创建一个账户(Account)。 4 | 5 | `Docker Hub`是管理Docker和它的组件的一个资源管理中。`Docker Hub`帮助你和同事协作,得到更多关于Docker的运行情况。为了做到这一点,提供如下的服务: 6 | 7 | 1. Docker镜像容器。 8 | 9 | 2. 用户权限。 10 | 11 | 3. 自动化镜像构建器,工作流工具(例如创建触发器或者web钩子)。 12 | 13 | 4. GitHub和BitBuchet一体化。 14 | 15 | 为了使用Docker Hub,你将首次需要注册和创建一个账户。不要担心,创建一个账户是简单而且免费的。 16 | 17 | ## 创建一个Docker Hub账户 18 | 19 | 有两种途径来注册和创建一个账户: 20 | 21 | 1、通过网络 22 | 23 | 2、通过命令行 24 | 25 | ##通过网络注册 26 | 27 | 填写sign-up form的表单,通过选择你自己的用户名和密码,键入一个有效的email地址。你可以通过Dokcer每周邮件列表去了解更多关于Docker的知识世界。 28 | 29 | ## 通过命令行创建 30 | 31 | 你可以创建Docker Hub帐号,通过命令行键入docker login命令。 32 | 33 | $ sudo docker login 34 | 35 | ## 激活你的email 36 | 37 | 一旦你填写了form后,请务必检查是否收到了询问确认激活帐号的欢迎信息。 38 | 39 | ## 登录 40 | 41 | 在你完成激活过程后,你可以使用web控制台登陆。 42 | 43 | 或者通过命令行键入docker login命令。 44 | 45 | $ sudo docker login 46 | 47 | 你的Docker Hub帐号现在就激活并能使用了。 48 | 49 | ## 下一节 50 | 51 | 接下来,让我们从Hello world开始了解怎样Docker化APP。 52 | -------------------------------------------------------------------------------- /UserGuide/dockerizing.md: -------------------------------------------------------------------------------- 1 | # Docker化应用 2 | 3 | 这样的Docker事物思考了些什么事情? 4 | 5 | Docker允许你运行APP在container中。运行一个APP在一个container中,只须一个简单的命令:docker run。 6 | 7 | ## Hello world 8 | 9 | 让我们现在尝试一下, 10 | 11 | $ sudo docker run ubuntu:14.04/bin/echo 'Hello world'Hello world 12 | 13 | 这会运行你的第一个container。 14 | 15 | 刚才发生了什么?让我们接下来了解docker run命令做了什么事情。 16 | 17 | 首先,我们详述docker二进制和我们要执行的命令run。docker run结合runs containers。 18 | 19 | 接下来我们详述镜像:ubuntu:14.04.这是一个container源我们将要运行的。Docker调用这个镜像。在这个示例,我们使用了一个Ubuntu14.04操作系统的镜像。 20 | 21 | 当我们像素镜像时,Docker查看镜像是否在你的Docker宿主上。如果它不在,它然后会下载这个镜像从公有镜像库:Docker Hub。 22 | 23 | 接下来,我们告诉Docker什么样的命令将会运行在这个新创建的container中: 24 | 25 | /bin/echo 'Hello world' 26 | 27 | 当我们的container运行了创建有新的Ubuntu14.04环境的Docker ,指向了命令/bin/echo在环境中时,我们在命令行中看到了命令的结果: 28 | 29 | Hello world 30 | 31 | 然后我们的container又发生了什么事情?是否Docker container仅仅运行你详述的命令是激活的。这里,一旦输出Hello world就会结束container。 32 | 33 | ## 一个交互式的container 34 | 35 | 然我们再次尝试docker run命令,这次详述一个新的命令来运行我们自己的container。 36 | 37 | $ sudo docker run -t -i ubuntu:14.04/bin/bash root@af8bae53bdd3:/# 38 | 39 | 这里我们再次详述这个docker run命令和运行的ubuntu:14.04镜像。但是,我们也通过了两个标志位-t和-i。-t标志表示终端在我们的新的容器中,-i允许我们使用一个交互式的链接,通过获取container标准输入stdin。 40 | 41 | 我们也详述这个新的命令如何运行/bin/bash。这会转载一个Bash shell在我们的container中。 42 | 43 | 一次,我们现在的container将会转载我们刚才看到的命令提示在里边。 44 | 45 | root@af8bae53bdd3:/# 46 | 47 | 然我们尝试运行一些命令在我们的container中。 48 | 49 | root@af8bae53bdd3:/# pwd/root@af8bae53bdd3:/# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 50 | 51 | 你可以看到我们运行pwd来显示我们当前目录,我们将会看到在/根目录下的文件。我们也看到了一个根目录列表后,显示那个符合Linux文件系统类型的文件。 52 | 53 | 你可以在container中玩耍,当你做了这些事情后。通过使用exit命令或者键入Contrl-D来完成。 54 | 55 | root@af8bae53bdd3:/# exit 56 | 57 | 针对这前面的container,同样的,一旦Bash shell程序运行结束,container也将会结束。 58 | 59 | ## 永远运行的Hello world 60 | 61 | 现在一个continer运行一个命令后就结合了,是否可以有一些方式,让它更加有用。然我们创建一个container永远运行。就像许多APP一样在docker一起运行。 62 | 63 | 再次,我们同样做一个docker run的命令: 64 | 65 | $ sudo docker run -d ubuntu:14.04/bin/sh -c "while true; do echo hello world; sleep 1; done"1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147 66 | 67 | 等待什么?我们的”Hello world“在哪里?然我们查看我们运行到这里究竟做了什么事情。这看起来似乎很熟悉。我们运行docker run后,但是这次我们详述标志-d。-d标志告诉Docker运行container,并把它放到后台执行,并循环执行。 68 | 69 | 我们也详述过:ubuntu14.04。 70 | 71 | 最后,我们详述一个命令: 72 | 73 | /bin/sh -c "while true; do echo hello world; sleep 1; done" 74 | 75 | 这个hello world是一个没头脑的僵尸,该shell脚本一直输出hello world。 76 | 77 | 我们为什么没有看到任何”hello world“呢?相反,docker一直放回一个长长的字符串: 78 | 79 | 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147 80 | 81 | 这长字符串被叫做container ID。它唯一表示一个container,因此我们可以与此一直运行。 82 | 83 | 说明:container ID是有一点长,不便利的。日后,我们将缩短ID,通过某些方式命名我们的container以便让它更容易的表现。 84 | 85 | 我们可以使用这些container ID来看hello world进程执行发生了什么事情。 86 | 87 | 首先,然我们确保container一直运行。我们可以通过执行docker ps命令。 88 | 89 | docker ps命令查询Docker 守护进程获取一些关于所有container的信息。 90 | 91 | $ sudo docker ps 92 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93 | 1e5535038e28 ubuntu:14.04/bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage 94 | 95 | 这里,我们可以看到所有的守护container。docker ps返回了守护container一些有用的信息,以一个简短的变量continer ID开始:1e5535038e28。 96 | 97 | 我们也看到镜像曾经使用过它:ubuntu14.04。这个是否正在执行,什么状态,一个自动分配的名称insane_babbage。 98 | 99 | 说明:Docker自动命名所有你开启的container,稍后我们将看到,你可以怎样命名你自己的名字。 100 | 101 | 好了,我们现在知道这是怎样运行的。但是它要求我们将要做什么?为了看到我们将查看container里的信息,通过docker logs命令。然我们使用这个Docker分配的container名称。 102 | 103 | $ sudo docker logs insane_babbagehello worldhello worldhello world... 104 | 105 | docker logs命令看到了在container返回的标准输出,在这个示例中看到输出了hello world。 106 | 107 | 哇塞!我们的守护进程是在工作的,我们刚才创建了我们的第一个Docker话的APP。 108 | 109 | 现在,我们可以创建我们自己的container,那让我们整顿一下,停止我们的守护container。为了做到这一点,我们使用docker stop命令。 110 | 111 | $ sudo docker stop insane_babbageinsane_babbage 112 | 113 | docker stop命令告诉Docker委婉地停止正在运行的container。如果成功,它将返回container的名称。 114 | 115 | 然我们检查一下是否成功,通过命令docker ps。 116 | 117 | $ sudo docker ps 118 | 119 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 120 | 121 | 棒!我们的container已经被停止了。 122 | 123 | ## 下一步 124 | 125 | 我们已经看到怎样简单的开始Docker,现在然我们知道怎样做一些高级的任务。了解详情请导航到,了解Container。 126 | -------------------------------------------------------------------------------- /UserGuide/dockerrepos.md: -------------------------------------------------------------------------------- 1 | 目前我们学习了怎样使用命令行来运行在你主机上的Docker。你也学习了怎样pull down images,并根据已有的镜像创建contaienr,你也学习了着那样创建你自己的镜像。 2 | 3 | 接下来,你将继续了解怎样使用Docker Hub来简化和加强你的docker 工作流。 4 | 5 | Docker Hub是一个公有库,由Docker Inc维护。它包含超过15000个可以下载并用来创建container的镜像。它也提供权限,工作组结构,工作流工具,和私有工具。 6 | 7 | ## Docker命令行和docker hub 8 | 9 | docker自身提供操作docker hub服务的的命令,包括docker search,pull,login和push命令。这次将介绍怎样使用这些命令。 10 | 11 | ### 帐号创建并登陆 12 | 13 | 典型地,你开始会想通过创建一个Dcoker Hub帐号并登陆。这里,你可以创建你的帐号直接在docker hub上,通过运行命令: 14 | 15 | $ sudo docker login 16 | 17 | 你可以立刻使用用户名称。如果你的用户名是有效的,docker将允许你输入密码和邮箱地址。它将自动登陆。你可以commit和push你自己的镜像到你的Docker Hub私有库。 18 | 19 | > 说明:你的权限认证将被记录在`.dockercfg`权限文件中在你的home目录下。 20 | 21 | ## 查找images 22 | 23 | 你可以搜索Docker Hub库,通过search页面或者使用命令行接口。搜索可发现镜像的名称,用户名,描述,星级等。 24 | 25 | $ sudo docker search centos 26 | 27 | NAME DESCRIPTION STARS OFFICIAL TRUSTED 28 | 29 | centos OfficialCentOS6Imageas of 12April201488 30 | 31 | tianon/centos CentOS5and6, created using rinse instea...21 32 | 33 | ... 34 | 35 | 这里,你可以看到两个示例的输出,`centos`和`tianon/centos`。这第二个显示了来自公共库下用户名为tianon。第一个结果centos没有列举用户名称,则意味着它是来自托管的最高级命名空间。/字母分割一个用户的库。 36 | 37 | 一旦你发现了一个镜像,你可以下载它通过`docker pull `: 38 | 39 | $ sudo docker pull centos 40 | 41 | Pulling repository centos 42 | 43 | 0b443ba03958:Download complete 44 | 45 | 539c0211cd76:Download complete 46 | 47 | 511136ea3c5a:Download complete 48 | 49 | 7064731afe90:Download complete 50 | 51 | Status:Downloaded newer image for centos 52 | 53 | 你现在可以有一个镜像来运行container了。 54 | 55 | ## 贡献到docker hub 56 | 57 | 任何人都可以pull公共镜像,但是如果你打算分享你自己的镜像,这时你必须要注册先,详情请看“Docker用户指南的第一节”。 58 | 59 | ## push一个库到Docker Hub 60 | 61 | 为了push一个库到自己的库,你需要有命名了的镜像,或者提交你的container的镜像,详情请看“这里”。 62 | 63 | $ sudo docker push yourname/newimage 64 | 65 | 镜像将会被上传,供你的团队成员或者社区使用。 66 | 67 | ## Docker Hub的特点 68 | 69 | Automated Build说的是自动创建并直接更新来自GitHub或者BitBucket的镜像在Docker Hub上。这将添加commit hook到你选择的Github或者BitBucket库,并当你push一个commit时触发一个构建和更新。 70 | 71 | 为了启动Automated Build。 72 | 73 | 1、创建一个Docker Hub账户并登陆 74 | 75 | 链接你的GitHub或者BitBucket目录,通过“Link Account”目录。 76 | 77 | 3、配置自动构建 78 | 79 | 4、选择一个GitHub或者BitBucket目录,编写你先构建的Dockerfile。 80 | 81 | 5、选择你先构建的分值,默认情况下是master分支。 82 | 83 | 6、提供Automated Build的一个名称。 84 | 85 | 7、签署一个docker 标签。 86 | 87 | 8、指定dockerfile在哪里,默认是/。 88 | 89 | 90 | 一旦 Automated Build 被配置,它将自动触发并在数分钟内构建,你需要在你的Docker Hub库中查看你新Automated Build。它将保持和你的GitHub和BitBucket库同步,知道你解除Automated Build。 91 | 92 | 如果你想看到你 Automated Builds的状态,你可以去你在Docker Hub上的Automated Builds page查看,它将显示你构建的状态和它们的构建历史。 93 | 94 | 一旦你创建了一个Automated Build ,你可以解除或者删除它。然而,你不可以通过docker的push命令来push到一个Automated Build。你仅仅可以管理它,通过commit编码到你的GitHub或者BitBucket库。 95 | 96 | 97 | 你可以创建多个Automated Builds,并配置他们从指定Dockerfile的Git分值。 98 | 99 | ### 构建触发器 100 | 101 | Automated Builds 也可以通过URL被触发。这允许你重构Automated build镜像通过请求。 102 | ### Webhooks 103 | 104 | Webhooks被附加到你的库中,运行你触发一个事件,当镜像或者更新的镜像被push到镜像。伴随这webhook,你可以指定一个目标URL和一个JSON装载,当你的镜像被push时。 105 | 106 | 看Docker Hub文档了解更多关于Webhooks的信息。 -------------------------------------------------------------------------------- /UserGuide/dockerswarm.md: -------------------------------------------------------------------------------- 1 | # Docker Swarm用户指南 2 | 3 | Docker Swarm是一个本地docker集群。它将一个Docker host池放进一个单个虚拟host中管理。 4 | 5 | Swarm服务(API标准Docker API),正如某系工具(已经和Docker Deamon可以联系的)可以使用Swarm透明扩展到多个主机:dokku,Compose,Krane,Flynn,Deis,dockerui,shipyard,Drone,Jenkins…并且,当然,DOCKER client本身。 6 | 7 | 像其他Docker项目,Swarm遵循“batteries included but removable”的原则。用一个简单的调度后端出箱的船舶,以及最初的发展奠定了一个API,将使可插拔的后台。我们的目标是提供一个平滑中的经验简单的用例,并允许交换更强大的后台,像Mesos,针对大规模生产部署。 8 | 9 | ## 安装 10 | 11 | > 说明:对 Swarm nodes 唯一的要求是他们都运行相同版本(版本1.4.0或者以上)的Docker deamon,配置监听一个TCP端口,Swarm管理员可以有权限部署。 12 | 13 | 最容易的方式开始Swarm是使用official Docker image. 14 | 15 | docker pull swarm 16 | 17 | ## Nodes安装配置 18 | 19 | 每一个Swarm node将运行一个swarm node代理,这个代理将注册一个Docker daemon引用,同时也将管理它,更新发现后端的状态。 20 | 21 | 下边的例子,使用docker hub,基于token发现服务。 22 | 23 | # create a cluster 24 | 25 | $ docker run --rm swarm create 26 | 27 | 6856663cdefdec325839a4b7e1de38e8# <- this is your unique 28 | 29 | 30 | 31 | # on each of your nodes, start the swarm agent 32 | 33 | # doesn't have to be public (eg. 192.168.0.X), 34 | 35 | # as long as the swarm manager can access it. 36 | 37 | $ docker run -d swarm join --addr= token:// 38 | 39 | 40 | 41 | # start the manager on any machine or your laptop 42 | 43 | $ docker run -d -p :2375 swarm manage token:// 44 | 45 | # use the regular docker cli 46 | 47 | $ docker -H tcp:// info 48 | 49 | $ docker -H tcp:// run ... 50 | 51 | $ docker -H tcp:// ps 52 | 53 | $ docker -H tcp:// logs ...... 54 | 55 | # list nodes in your cluster 56 | 57 | 58 | 59 | $ docker run --rm swarm list token:// 60 | 61 | 62 | 63 | > 说明:为了Swarm manager能联系node代理,他们必须监听相同的网络接口。这可能是通过-H 标志实现,例如`-H tcp://0.0.0.0:2375`。 64 | 65 | ## TLS 66 | 67 | Swarm支持TLS验证,鉴于CLI和Swarm之间,也鉴于Swarm和Docker node之间。 68 | 69 | 为了使client和server都TLS有效,相同的命令行参数可能被指定。 70 | 71 | `swarm manage --tlsverify --tlscacert= --tlscert= --tlskey= [...]` 72 | 73 | 请参考Docker documentation 了解更多有关怎样配置TLS验证在docker上,并生成证书。 74 | 75 | > 说明:Swarm证书必须通过extendedKeyUsage = clientAuth,serverAuth生产。 76 | 77 | ## 发现服务(Discovery services) 78 | 79 | 查看Discovery service 文档,了解更多信息。 80 | 81 | ## 高级调度 82 | 83 | 查看 filters 和strategies 学习更多关于高级调度的信息。 84 | 85 | ## Swarm API 86 | 87 | Docker Swarm API 兼容Docker remote API,扩展它的一些新的端点。 88 | 89 | -------------------------------------------------------------------------------- /UserGuide/dockervolumes.md: -------------------------------------------------------------------------------- 1 | 2 | # 管理容器中数据 3 | 4 | 到目前为止,我们已经了解Docker的基本概念,了解Docker images,也学会到了container与container之间的网路和链接。在这一节,我们将讨论怎样管理在你的Docker container里或者多个Docker container中的数据。 5 | 6 | 有两种方式来管理docker里的数据。 7 | 8 | 1、数据卷 9 | 10 | 2、数据卷contaienr 11 | 12 | ## 数据卷 13 | 14 | 一个数据卷是特别设定的目录,在一个或多个container里。绕开`UFS`(Uninion File System)来提供数个有用的持久化或分享数据: 15 | 16 | 1、数据卷可以鉴于多个container之间被共享和再生。 17 | 18 | 2、数据卷可以直接修改。 19 | 20 | 3、当你更新一个镜像时,数据卷不能被包含。 21 | 22 | 4、数据卷直到container不使用它们的时候仍继续保留。 23 | 24 | ### 添加一个数据卷 25 | 26 | 你可以添加一个数据卷到contaienr,使用docker run 命令的-v标志。你可以使用-v多次,以便能通过单个docker run命令创建多个数据卷。让我们挂载一个数据卷在我们的web应用container中。 27 | 28 | $ sudo docker run -d -P --name web -v /webapp training/webapp python app.py 29 | 30 | 这将创建与i个新的数据卷在container的/webapp目录。 31 | 32 | 说明:你可以使用volume描述在dockerfile,让所有这样的镜像生成的container添加一个或多个新的数据卷。 33 | 34 | ### 挂载主机的目录作为数据卷 35 | 36 | 除了创建一个数据卷使用-v标志外,你可以使用挂载来自你主机的目录,在container里。 37 | 38 | $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 39 | 40 | 这将挂载主机目录`/src/webapp`在container的`/opt/webapp`目录下。 41 | 42 | > 说明:如果路径`/opt/webapp` 已经存在在container的镜像里,它的内容将会被替换成`/src/webapp`里的内容,以此来保持挂载的预期效果。 43 | 44 | 这是非常有用的尝试,例如我们可以挂载我们的源代码在contaienr里。当我们修改源代码时,查看我们工作的应用。主机的目录必须被指定作为一个固定的目录,如果目录不存在,Docker将会自动为你创建它。 45 | 46 | > 说明:鉴于Dockerfile其轻便和分享的目的,这样做不是有效的。当主机目录是一个由Dockerfile指定的目录,可能不会工作在所有的主机中。 47 | 48 | Docker默认情况下可以读写数据卷,但是我们可以限制只能读。 49 | 50 | $ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py 51 | 52 | 这里,我们同样挂载相同/src/webapp目录,但是我们添加ro 项来指定挂载的目录只能读。 53 | 54 | ### 挂载主机文件作为数据卷 55 | 56 | -v标志也可以被使用来挂载单个主机文件,替代主机目录。 57 | 58 | $ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash 59 | 60 | 这将带你的一个bash shell文件进入container里,你将有来自主机的bash历史信息。当你退出container时,主机将有在contaienr里运行的命令的类型的历史。 61 | 62 | 说明:许多工具被使用来编辑文件,包括vi和sed --in-place,也有可能在一个inode改变下结果。自从Docker1.1.0后,这将产生一个错误,例如:`sed: cannot rename ./sedKdJ9Dy: Device or resource busy`。这样,无论你想编辑挂载的文件,它常常是容易于挂载主目录下的。 63 | 64 | ## 创建和挂载数据卷container 65 | 66 | 如果你有些持久化的数据,你想在彼此container间共享,或者想使用来自不持久化contaienr。最好是创建一个命名的数据卷container,然后挂载数据。 67 | 68 | 让我们创建一个命名的container带有分享的数据卷。 69 | 70 | $ sudo docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres 71 | 72 | 你可以然后使用--volumnes-from标志来挂载/dbdata数据卷在其它container中。 73 | 74 | $ sudo docker run -d --volumes-from dbdata --name db1 training/postgres 75 | 76 | 接着下一个 77 | 78 | $ sudo docker run -d --volumes-from dbdata --name db2 training/postgres 79 | 80 | 你可以使用多个`--volumes-from`参数挂载来自多个container的多个数据卷。 81 | 82 | 你也可以扩展链,通过挂载数据卷来自dbdatacontainer在其他container通过db1或者db2 container。 83 | 84 | $ sudo docker run -d --name db3 --volumes-from db1 training/postgres 85 | 86 | 如果你移除了container挂载的数据卷(包含有初始化dbdatacontaienr或者随后初始化db1或db2),数据卷将不能被删除。要想删除从磁盘数据卷,你必须调用docker rm -v命令。允许你更新或者转移数据卷在多个container中。 87 | 88 | ## 备份,还原和转移数据卷 89 | 90 | 你可以执行另外有用的功能,使用该功能备份,还原和转移数据卷。我们这样做可以通过使用--volumes-from标志来创建一个新的container并挂载数据卷,就像这样: 91 | 92 | $ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 93 | 94 | 这里,我们启动一个新的container并挂载了一个dbdata container的数据卷。我们然后挂载一个本地主机目录作为/backup。最后,我们通过一个命令,使用tar 来备份dbdata数据卷的数据到在/backup目录下的backup.tar文件。当命令执行完成,container 停止,我们将分离我们的dbdata数据卷。 95 | 96 | 你可以然后还原它到相同的container中,或者其他。创建一个新的container: 97 | 98 | $ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash 99 | 100 | 然后解压backup文件在新的container数据卷。 101 | 102 | $ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar 103 | 104 | 你可以使用以上手段来自动备份,还原和存储,通过使用你自己的建议工具。 105 | 106 | ## 下一节 107 | 108 | 下载,我们学习到了更多关于怎样使用docker的信息,我们将了解怎样合并docker作为服务在Docker Hub里,包括自动创建和私有化仓库。 109 | 110 | 欲知详情,请导航到[了解Docker Hub](dockerrepos.md)。 -------------------------------------------------------------------------------- /UserGuide/labels-custom-metadata.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liuhong1happy/dockerdocs/4afc27b7cb999b681aa9ece12d0aee5afc095aa5/UserGuide/labels-custom-metadata.md -------------------------------------------------------------------------------- /UserGuide/userguide.md: -------------------------------------------------------------------------------- 1 | # 欢迎阅读Docker用户指南 2 | 3 | 在“[引言](../About)”中,你已经体会到什么是docker,它是这样工作的。那么,在用户指南章节,我们将会带你去体验到使用Docker的基本规则,把Docker融合到你的开发环境中。 4 | 5 | 接下来,我们将教你怎样使用Docker: 6 | 7 | 1、Docker化你的应用。 8 | 9 | 2、运行你自己的容器。 10 | 11 | 3、创建Docker镜像。 12 | 13 | 4、分享你的Docker镜像给别人。 14 | 15 | 5、其它,在未来会多得多。 16 | 17 | 我们将带入这次指南之旅,先让你体验Docker的生命周期。 18 | 19 | ## 从Docker Hub开始了解 20 | 21 | Docker Hub怎样运作的? 22 | 23 | Docker Hub是一个管理Docker的中心库,它管理着公有的Docker镜像,提供帮助你构建和管理你的Docker环境的服务。了解更多,请导航到“使用Docker Hub”。 24 | 25 | ## Docker化的APP:a一个“Hello world”程序。 26 | 27 | 怎样在container中运行APP呢? 28 | 29 | Docker提供一个基于container的虚拟化平台来开启你的app,为了了解怎样Docker化APP,并运行它们,请导航到“Docker化APP”。 30 | 31 | ## 管理Docker容器 32 | 33 | 怎样管理我自己的container? 34 | 35 | 一旦你开启了在众多Docker container运行你自己的APP的时候,我们已经开始给你展示了怎样管理这些container。了解详情,请导航到“管理Container”。 36 | 37 | ## 管理Docker镜像 38 | 39 | 我怎样才能管理,分享和创建自己的镜像呢? 40 | 41 | 一旦我们了解了怎样使用Docker,这个时候,我们会在接下来了解通过Docker怎样创建你自己的APP镜像。了解详情请导航到”管理Docker镜像“。 42 | 43 | ## 把众多Container链接在一起 44 | 45 | 我们了解怎样创建单个APP在Docker container中后,现在我们应该了解怎样在Docker中创建全部的APP栈来将Docker Container链接在一起。了解详情请导航到”把众多Container链接在一起“。 46 | 47 | ## 在Container中管理数据 48 | 49 | 想在我们知道怎样”把众多Container链接在一起“,那么接下来我们要知道怎样管理数据,卷和挂载在你的Docker container中。 50 | 51 | ## 管理Docker Hub 52 | 53 | 我们了解一些更多关于怎样使用Docker的教程,我们将了解怎样结合Docker了解Docker Hub包括的有用的服务”信任的创建“、”私有仓库“。了解更多请导航到”管理Docker Hub“。 54 | 55 | ## 获取帮助 56 | 57 | 如果本用户指南不能帮助你,你可以去如下网址去了解更多。 58 | 59 | [Docker homepage](http://www.docker.com) 60 | 61 | [Docker Hub](http://hub.docker.com) 62 | 63 | [Docker blog](http://blog.docker.com) 64 | 65 | [Docker documentation](http://docs.docker.com) 66 | 67 | [Docker Getting Started Guide](http://www.docker.com/gettingstarted/) 68 | 69 | [Docker code on GitHub](https://github.com/docker/docker) 70 | 71 | [Docker mailing list](https://groups.google.com/forum/#!forum/docker-user) 72 | 73 | Docker on IRC: irc.freenode.net and channel #docker 74 | 75 | [Docker on Twitter](http://twitter.com/docker) 76 | 77 | Get [Docker help](http://stackoverflow.com/search?q=docker) on StackOverflow 78 | 79 | [Docker.com](http://www.docker.com/) 80 | --------------------------------------------------------------------------------