Py学习  »  docker

讲座实录 | 拥抱容器:Docker 集群入门与实战(上)

GDG • 4 年前 • 400 次点击  

讲师:孟繁超 | 记录:粤川 | 编辑:蒙蒙


错过了【8月18日】拥抱容器:Docker 实战第二讲没关系!我们已经把实录给你带来了👇

   

这篇文章将侧重介绍 Docker 三剑客( Compose、Machine 和 Swarm )的相关知识,因篇幅限制,有关集群方面的部署将会在下篇推送中重点介绍哦!小伙伴们千万别忘关注本公众号,精彩内容不错过!


话不多说,接下来就让我们认识下 Docker 三剑客吧~


Compose


介绍


Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。 


Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」


其前身是开源项目 Fig。其代码目前在 https://github.com/docker/compose 上开源。


安装


pip install -U docker-compose



sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

使用

Dockerfile


FROM python:3.7-slimWORKDIR /appCOPY . /appRUN pip install flask -i https://mirrors.aliyun.com/pypi/simple  --trusted-host mirrors.aliyun.comEXPOSE 80ENV NAME WorldCMD ["python", "app.py"]


app.py


from flask import Flaskimport osimport socket
app = Flask(__name__)
@app.route("/")def hello(): html = "

Hello {name}!

"
\
"Hostname: {hostname}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname())
if __name__ == "__main__": app.run(host='0.0.0.0', port=80)


docker-compose.yml


version: "3"services:  myapp:    # build: .    image: friendlyhello:v2    container_name: myapp    ports:      - "5000:80"    environment:      NAME: World
redis: image: redis container_name: web


执行 docker-compose build 可生成镜像;执行 docker-compose up 启动容器运行。



命令说明



Machine

介绍

Docker Machine Docker 官方编排( Orchestration )项目之一,负责在多种平台上快速安装Docker环境。



使用


使用 virtualbox 类型的驱动,创建一台Docker 主机,命名为 manager


docker-machine create -d virtualbox manager


可以在创建时加上如下参数,来配置主机或者主机上的Docker


--engine-opt dns=114.114.114.114 配置Docker 的默认DNS


    
--engine-registry-mirror https://registry.docker-cn.com 配置Docker 的仓库镜像--virtualbox-memory 2048 配置主机内存--virtualbox-cpu-count 2 配置主机CPU


更多参数请使用 docker-machine create —help 命令查看。



docker-machine ls 查看主机。



docker-machine env manager 查看环境变量。



切换 docker 主机 manager 为操作对象。


eval $(docker-machine env manager)


或者可以 ssh 登录到 docker 主机。


docker-machine ssh manager



命令说明



Swarm


Swarm 是使用SwarmKit 构建的Docker 引擎内置(原生)的集群管理和编排工具。


使用

初始化集群:在上节介绍 docker-machine 的时候,我们创建了manager节点,而初始化集群需要在管理节点内执行

docker swarm init --advertise-addr=IP_ADDR



现在来创建两个工作节点worker1 worker2并加入集群。


docker-machine create -d virtualbox worker1eval $(docker-machine env worker1)docker swarm join --token SWMTKN-1-59qol34ustn06wtqs6bnsgar4j170k5aj24weu5yegq8qp66cb-26aroyxll4zh9pl8cdwuo7vm4 192.168.99.101:2377



worker2 节点


进入manager 节点执行


docker node ls



由此,我们就得到了一个最小化的集群。


命令说明



疑难解答


•在docker stack deploy –c docker-compose.yml 后,在docker ps 中无法看到端口映射?



关于 docker swarm mode 部署后端口的问题,可以使用docker service ls来查看端口是否正确暴露,因为此时是通过 service 来暴露的,并不是直接在 container 上暴露,所以此时用docker ps是看不到的,但暴露的端口依旧可以访问,这样实现和 k8s 里的 service 实现是有些相似的。 


执行


docker-compose -f docker-compose.yml up -d


返回


Pulling myapp (friendlyhello:v2)...ERROR: Get https://registry-1.docker.i... net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)


compose 文件中如果已经 build 过,就用 image 直接指定这个 image ,注释掉 build 的指令。如果没有 build 过,就放开build指令,执行 docker-compose 的 build 它,当然也可以使用docker build来构建它。因为这一块在上一章节已经提到过,所以对于部分这次直接切入的同学可能会有疑惑。而到了docker stack时,已经不支持docker stack来  build 它了,需要统一使用 docker build 来构建镜像。

 

ps: 有关集群方面的部署,以及本次活动的实战环节将会在下期推送中给大家介绍哦,千万不要错过了~


关于我们

Google Developer Groups 谷歌开发者社区,是谷歌开发者部门发起的全球项目,面向对 Google 和开源技术感兴趣的人群而存在的公益性开发者社区。GDG Shanghai 创立于 2009 年,是全球 GDG 社区中最活跃和知名的技术社区之一,每年举办 30 – 50 场大大小小的科技活动,每年影响十几万以上海为中心辐射长三角地带的开发者及科技从业人员。


社区中的各位组织者均是来自各个行业有着本职工作的互联网从业者,我们需要更多新鲜血液的加入!如果你对谷歌技术感兴趣,业余时间可调配,认同社区的价值观,愿意为社区做出贡献,欢迎加入我们成为社区志愿者!


志愿者加入方式:关注上海 GDG 公众号:GDG_Shanghai,回复:志愿者。


社区成员加入方式:请发邮件至以下邮箱

  gdg-shanghai+subscribe@googlegroups.com

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38447
 
400 次点击