讲师:孟繁超 | 记录:粤川 | 编辑:蒙蒙
错过了【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-slim
WORKDIR /app
COPY . /app
RUN pip install flask -i https://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
EXPOSE 80
ENV NAME World
CMD ["python", "app.py"]
app.py
from flask import Flask
import os
import 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 worker1
eval $(docker-machine env worker1)
docker swarm join --token SWMTKN-1-59qol34ustn06wtqs6bnsgar4j170k5aj24weu5yegq8qp66cb-26aroyxll4zh9pl8cdwuo7vm4 192.168.99.101:2377
同理worker2
节点
进入manager
节点执行
由此,我们就得到了一个最小化的集群。
命令说明
疑难解答
•在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