标签:管理 help lis ioi started ide hue agent his
这个《Docker入门系列》文档,是根据Docker官网(https://docs.docker.com)的帮助文档大致翻译而成。主要是作为个人学习记录。有错误的地方,Robin欢迎大家指正。分为如下几个部分:
1 Docker入门:简介
2 Docker入门:安装运行
3 Docker入门:容器(Containers)
4 Docker入门:服务(Services)
5 Docker入门:Swarms
6 Docker入门:Stacks
7 Docker入门:部署app
8 Docker入门:稍高级的话题
前面我们对Compose文件进行了反复修改。可喜的是,这个文件在产品部署中同样能够正常工作,就像在你的机器上运行一样。下面根据不同的选项组合来运行你的Dockerized app。
首先进行版本选择,我们以Docker CE(Cloud provider)为例。其他版本自己参考Docker官网文档。
选择Docer CE版本后,我们可以使用Docker Cloud来帮忙管理我们的app,这些app运行在主流的服务提供商上面。主流的云服务提供商包括Amazon Web Service(AWS)、DigitalOcean、Microsoft Azure等。
安装部署主要包括以下几个步骤:
可以使用两种模式来运行Docker Cloud:standard mode和swarm mode。
下面我们选择swarm mode。如果使用standard mode,请参考Docker帮助文档。
使用swarm mode时,推荐选择AWS和Azure。由于本人没有给这两家送钱,现在只能选择第三种方式:在Docer Cloud UI上创建节点。
如果想在AWS或Azure上创建swarm,请参考其他Docer文档。下面我们在Docker Cloud UI上创建节点。
创建swarm,总体需要四个步骤。首先在Docker Cloud UI中创建节点;通过SSH连接到Docker Cloud-manager node,然后运行命令docker swarm init和docker swarm join;使能swarm mode;注册swarm。下面对这四个步骤分别介绍。
在本节,将会在Docker Cloud上创建一个节点(该节点在node cluster中)。
首先需要链接(link)到你的基础设施(infrastructure)。
为了部署你的Docker cloud节点,你需要保证Docker Cloud能够访问你的infrastructure。也就是说,能够访问一个cloud service provider,比如:
拥有访问权限后,就可以直接从Docer Cloud中提供节点。使用的方式有WEB UI/CLI/API。
具体如何链接(link)到一个cloud service provider,或链接到你自己的主机,参考Docker Cloud文档(https://docs.docker.com/docker-cloud/getting-started/connect-infra/)。
具体如何在Docker Cloud上创建一个节点,参考文档(https://docs.docker.com/docker-cloud/getting-started/your_first_node/)。
首先通过SSH连接到Docker Cloud-manager node,然后运行命令docker swarm init和docker swarm join。
采用SSH方式连接,需要将pulic SSH key添加到每个节点的authorized_keys文件中,这样你才有权限访问Docker Cloud提供的节点。还有一种处理方式,这里不谈了。
下面分为三个步骤完成。
(1)创建keypair
如果你没有一个keypair,那就需要使用ssh-keygen –t rsa命令来产生一个。有的话,就跳过这步了。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/borjaburgos/.ssh/id_rsa): dockercloud
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in dockercloud.
Your public key has been saved in dockercloud.pub.
The key fingerprint is:
ac:76:05:19:51:fa:3e:f0:c8:80:73:0d:9f:6b:b7:8f borjaburgos@MacBookPro
The key‘s randomart image is:
+--[ RSA 2048]----+
| oo. |
| + |
| . + |
| . = + |
| o o S o |
| o + B |
| o * = |
| . o . + |
| E.. |
+-----------------+
然后将public key的值拷贝到粘贴板上:
$ more dockercloud.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4PHh4WJqUgiWedmkIJS+L1IwxfXHkfYC0N9NZ28quXyL4zQq2CDeCQrS0RDESklnuZVCe9p5fjgEHcy+FsiTUaBbjzCndeO++gqAM6pKy4ziEY1JNpIBpbuyVIK6AJIqTWzcqprhw4G8PZetLoHug3BWiiwsIW7WHhNNsrEVEsTCnCc5vG97IHZ0A6TlP6HGvVSfCFPZiAxP48hsoEsEGjcCvY9tgJa4k60XWtHbPWtjOi90RFt9OKcbUsZa+vq/3lBG50XbMoQm3NS6A+UQQ7SKvzmwJSIYCqo5lu9UzQbVKy9o00NqXa5jkmZ9Yd0BJBjFmb3WwUR8sJWZVTPFL
(2)在Docer Cloud上创建一个stack
接下来,需要运行authorizedkeys service。
可以在Docker Cloud上创建一个新的stack,并在输入如下内容来手动创建service:
authorizedkeys: image: dockercloud/authorizedkeys deployment_strategy: every_node autodestroy: always environment: - AUTHORIZED_KEYS=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4PHh4WJqUgiWedmkIJS+L1IwxfXHkfYC0N9NZ28quXyL4zQq2CDeCQrS0RDESklnuZVCe9p5fjgEHcy+FsiTUaBbjzCndeO++gqAM6pKy4ziEY1JNpIBpbuyVIK6AJIqTWzcqprhw4G8PZetLoHaiTh343wsIW7WHhNNsrEVEsTCnCc5vG97IHZ0A6TlP6HGvVSfCFPZiAxP48hsoEsEGjcCvY9tgJa4k60XWtHbPWtjOi90RFt9OKcbUsZa+vq/3lBG50XbMoQm3NS6A+UQQ7SKvzmwJSIYCqo5lu9UzQbVKy9o00NqXa5jkmZ9Yd0BJBjFmb3WwUR8sJWZVTPFL volumes: - /root:/user:rw
你也可以点击下面的按钮,从而在Docker Cloud上自动创建一个新的stack及authorizedkeys service,并且这个service基本上配置好了。
无论采用以上哪种方式,你都需要添加你的public key。
然后,使用使用之前步骤中拷贝的public key来修改AUTHORIZED_KEYS的值。
在stack页面,点击”Create and deploy”。
运行该service;拷贝你的public key到你的所有节点;然后关闭容器,并自动销毁这些容器。
◆ 注意:这个service的默认配置,会拷贝public key到你所有的节点上。
(3)SSH到Docker Cloud节点上
接下来,从Docker Cloud中获取节点的IP地址(在Node details页面里)。
使用这个IP,你就可以以root身份SSH到这个节点上:
$ ssh -i ~/dockercloud root@104.236.69.138
The authenticity of host ‘104.236.69.138 (104.236.69.138)‘ can‘t be established.
RSA key fingerprint is 4b:22:71:39:53:4a:88:51:4b:a7:2e:ed:03:dd:a3:7f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘104.236.69.138‘ (RSA) to the list of known hosts.
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-40-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Mon Feb 2 23:29:53 EST 2015
System load: 0.2 Users logged in: 0
Usage of /: 16.0% of 19.56GB IP address for eth0: 104.236.69.138
Memory usage: 52% IP address for eth1: 10.132.224.214
Swap usage: 0% IP address for docker0: 172.17.42.1
Processes: 111
Graph this data and manage this system at:
https://landscape.canonical.com/
Last login: Mon Feb 2 23:29:54 2015 from pool-108-30-19-181.nycmny.fios.verizon.net
root@13e9d739-admin:~#
在页面的最上方,点击切换键就可以切换到swarm mode。
具体细节参考(https://docs.docker.com/docker-cloud/cloud-swarm/using-swarm-mode/)。
注册你刚刚创建的swarm。
使用Beta swarm mode,就可以在Docker Cloud上注册已经创建的swarms,无论这些swarms在哪里运行,都可以进行方便的管理。
注册之前需要如下几点:
具体注册步骤参考文档(https://docs.docker.com/docker-cloud/cloud-swarm/ register-swarms/#register-a-swarm)。
具体分为如下两个步骤。
平台不同,连接方式还不同。
在Docker Cloud网页页面(处于swarm mode下),在页面的上方有swarms列表,点击你想连接的swarm,拷贝命令并粘贴到命令行终端:
对于Mac/Windows平台上的Docker,直接在菜单上连接即可:
无论采用如上哪种连接方式,都会打开一个终端(terminal),该终端的上下文是你的本地机器,但这些Docker命令将会路由到你的swarm上,该swarm运行在你的cloud service provider上。你可以同时访问你的本地文件系统和你的远程swarm,并直接使用docker命令。
通过运行命令docker stack deploy -c docker-compose.yml getstartedlab,将你的app部署到宿主在云上的swarm。
docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web
Creating service getstartedlab_visualizer
Creating service getstartedlab_redis
OK,你的app现在运行在你的cloud provider上了。
运行一些swarm命令,来检验下刚才的部署情况。
像之前那样使用swarm命令行,来浏览和管理swarm。下面是一些示例。
使用命令docker node ls来列出节点:
[getstartedlab] ~ $ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
9442yi1zie2l34lj01frj3lsn ip-172-31-5-208.us-west-1.compute.internal Ready Active
jr02vg153pfx6jr0j66624e8a ip-172-31-6-237.us-west-1.compute.internal Ready Active
thpgwmoz3qefdvfzp7d9wzfvi ip-172-31-18-121.us-west-1.compute.internal Ready Active
n2bsny0r2b8fey6013kwnom3m * ip-172-31-20-217.us-west-1.compute.internal Ready Active Leader
使用命令docker service ls来列出services:
[getstartedlab] ~/sandbox/getstart $ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
x3jyx6uukog9 dockercloud-server-proxy global 1/1 dockercloud/server-proxy *:2376->2376/tcp
ioipby1vcxzm getstartedlab_redis replicated 0/1 redis:latest *:6379->6379/tcp
u5cxv7ppv5o0 getstartedlab_visualizer replicated 0/1 dockersamples/visualizer:stable *:8080->8080/tcp
vy7n2piyqrtr getstartedlab_web replicated 5/5 sam/getstarted:part6 *:80->80/tcp
使用命令docker service ps <service>来查看一个service的所有任务(tasks):
[getstartedlab] ~/sandbox/getstart $ docker service ps vy7n2piyqrtr
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
qrcd4a9lvjel getstartedlab_web.1 sam/getstarted:part6 ip-172-31-5-208.us-west-1.compute.internal Running Running 20 seconds ago
sknya8t4m51u getstartedlab_web.2 sam/getstarted:part6 ip-172-31-6-237.us-west-1.compute.internal Running Running 17 seconds ago
ia730lfnrslg getstartedlab_web.3 sam/getstarted:part6 ip-172-31-20-217.us-west-1.compute.internal Running Running 21 seconds ago
1edaa97h9u4k getstartedlab_web.4 sam/getstarted:part6 ip-172-31-18-121.us-west-1.compute.internal Running Running 21 seconds ago
uh64ez6ahuew getstartedlab_web.5 sam/getstarted:part6 ip-172-31-18-121.us-west-1.compute.internal Running Running 22 seconds ago
到目前为止,你的app已经作为一个swarm部署在你的cloud provider服务器上。但是,在你的云服务器上,还需要打开一些端口:
下面是每个服务需要暴露的端口:
Service |
Type |
Protocol |
Port |
web |
HTTP |
TCP |
80 |
visualizer |
HTTP |
TCP |
8080 |
redis |
TCP |
TCP |
6379 |
云服务提供商不同,打开端口的方式也不一样,Docker官网以AWS为例进行了阐述(具体参考:https://docs.docker.com/get-started/part6/#iteration-and-cleanup)。
到目前为止,你可以根据之前章节学习的内容来做任何事情了:
之前我们在本地Docker虚拟机上运行swarm,而切换到云服务器上后,情况会有些不同。无论你是否关闭你的本地机器,运行在云服务器上的swarm和app都会继续运行。
恭喜,你已经在Docker平台上经历了全栈的、从开发到部署的学习历程。你已经掌握了containers, images, services, swarms, stacks, scaling, load-balancing, volumes, and placement constraints这些基本概念,但这还不够。想更深入的学习,下面是推荐的资源:
标签:管理 help lis ioi started ide hue agent his
原文地址:http://www.cnblogs.com/robinex/p/7764341.html