Docker 高级特性
source link: https://yuechuanx.top/DevOps/docker-advanced-feature/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本次分享给大家介绍Docker 的高级特性与相应的工具。 它们就是Docker 三剑客,Compose、Machine和Swarm
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 = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {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 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来构建镜像。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK