【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
docker-compose
单机版多容器管理
安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
版本
https://github.com/docker/compose/releases
命令
https://docs.docker.com/compose/reference/envvars/
示例
application.py
mport time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
requirements.txt:
flask
redis
Dockerfile:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP application.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- /web
networks:
- compose-net
redis:
image: "redis:alpine"
volumes:
- /redis
networks:
- compose-net
volumes:
web:
redis:
networks:
compose-net
network
如果不指定网络,docker-compose会生成一个默认的网络
docker swarm
集群版多容器管理。 因为docker内置了swarm所以不需要额外的安装操作,可以直接使用。
示例(1个manager,2个work)
manager:
docker swarm init --advertise-addr= ip
日志输出:
Swarm initialized: current node (k2bfj4ipf63u) is now a manager.
work:
root@192
$ docker swarm join --token SWMTKN-1-k2bfj4ipf63u192.0.0.1:2377
日志输出:
This node joined a swarm as a worker.
查看集群信息
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
k2bfj4ipf63u * node1 Ready Active Leader 19.03.4
lf9i7sj17u5b node2 Ready Active 19.03.4
69tfr9cq6j61 node3 Ready Active 19.03.4
节点升/降级
docker node promote node2
docker node demote node2
创建一个Tomcat
$ docker service create --name tomcat -p 8080:8080 tomcat
查看swarm的services
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
qy870rkl tomcat replicated 1/1 tomcat:latest *:8080->8080/tcp
查看service的启动日志
docker service logs tomcat
查看在哪个node中运行
docker service ps tomcat
扩展service
docker service scale tomcat=3
自动恢复
# 删除其中一个容器
docker rm -f bfaxc6smw
docker service ls
$ docker service ps tomcat
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
50000saiypxh tomcat.1 tomcat:latest node2 Running Running 30 minutes ago
3x4bfaxc6smw tomcat.2 tomcat:latest node3 Running Running 19 minutes ago
vicrsu2aebud \_ tomcat.2 tomcat:latest node3 Shutdown Failed 19 minutes ago "task: non-zero exit (137)"
ot50dhj0b1at tomcat.3 tomcat:latest node1 Running Running 23 minutes ago
删除service
docker service rm tomcat
来源:oschina
链接:https://my.oschina.net/u/2486137/blog/3146182