Docker容器管理

对着背影说爱祢 提交于 2019-12-23 14:17:55

【推荐】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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!