标签:node 容器 compose -- app redis 编排 Docker docker
一、传统方式容器编排实例(Docker官网实例)
(1)容器整体的框架
如果按照传统的方式
(2)创建app.py文件,写业务内容
import 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)
(3)通过DockerFIle创建镜像
ls
mkdir -p /tmp/composetest
cd /tmp/composetest
vi app.py
vi requirements.txt
vi Dockerfile
docker build -t python-app-image .
补充文件:
Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.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"]
requirements.txt文件
flask
redis
(4)获取Redis的image
- 获取Redis的image
docker pull redis:alpine
- 创建两个container
创建网络
docker network ls
docker network create --subnet=172.20.0.0/24 app-net
创建python程序的container,并指定网段和端口
docker run -d --name web -p 5000:5000 --network app-net python-app-image
创建redis的container,并指定网段
docker run -d --name redis --network app-net redis:alpine
访问测试
ip[centos]:5000
二、通过Docker-compose来实现(Docker官网实例)
(1)首先第一步需要安装Docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
(2) 编辑docker-compose.yaml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
networks:
- app-net
redis:
image: "redis:alpine"
networks:
- app-net
networks:
app-net:
driver: bridge
docker-compose up -d
总结:一二节是实例 约等于官网的实例
详解docker-compose.yml文件
(1)version: ‘3’
表示docker-compose的版本
(2)services
一个service表示一个container
(3)networks
相当于docker network create app-net
(4)volumes
相当于-v v1:/var/lib/mysql
(5)image
表示使用哪个镜像,本地build则用build,远端则用image
(6)ports
相当于-p 8080:8080
(7)environment
相当于-e
docker-compose常见操作(1)查看版本
docker-compose version
(2)根据yml创建service
docker-compose up
指定yaml:docker-compose up -f xxx.yaml
后台运行:docker-compose up
(3)查看启动成功的service
docker-compose ps
也可以使用docker ps
(4)查看images
docker-compose images
(5)停止/启动service
docker-compose stop/start
(6)删除service[同时会删除掉network和volume]
docker-compose down
(7)进入到某个service
docker-compose exec redis sh
scale扩缩容
(1)修改docker-compose.yaml文件,主要是把web的ports去掉,不然会报错
version: '3'
services:
web:
build: .
networks:
- app-net
redis:
image: "redis:alpine"
networks:
- app-net
networks:
app-net:
driver: bridge
(2)创建service
docker-compose up -d
(3)若要对python容器进行扩缩容
docker-compose up --scale web=5 -d
docker-compose ps
docker-compose logs web
从之前的操作单机向操作集群转变
三、Docker Swarm
环境准备
(1)根据Vagrantfile创建3台centos机器
新建swarm-docker-centos7文件夹,创建Vagrantfile
boxes = [
{
:name => "manager-node",
:eth1 => "192.168.0.11",
:mem => "1024",
:cpu => "1"
},
{
:name => "worker01-node",
:eth1 => "192.168.0.12",
:mem => "1024",
:cpu => "1"
},
{
:name => "worker02-node",
:eth1 => "192.168.0.13",
:mem => "1024",
:cpu => "1"
}
]
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
boxes.each do |opts|
config.vm.define opts[:name] do |config|
config.vm.hostname = opts[:name]
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = opts[:mem]
v.vmx["numvcpus"] = opts[:cpu]
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
v.customize ["modifyvm", :id, "--name", opts[:name]]
end
config.vm.network :public_network, ip: opts[:eth1]
end
end
end
(2)进入到对应的centos里面,使得root账户能够登陆,从而使用XShell登陆
vagrant ssh manager-node/worker01-node/worker02-node
sudo -i
vi /etc/ssh/sshd_config
修改PasswordAuthentication yes
passwd 修改密码
systemctl restart sshd
(3)在win上ping一下各个主机,看是否能ping通
ping 192.168.0.11/12/13
(4)在每台机器上安装Docker engine
四、搭建Swarm集群
(1)进入manager
提示
:manager node也可以作为worker node提供服务
docker swarm init --advertise-addr=192.168.0.11
注意观察日志,拿到worker node加入manager node的信息
docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.0.11:2377
(2)进入两个worker
docker swarm join --token SWMTKN-1-0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3 192.168.0.11:2377
日志打印
This node joined a swarm as a worker.
(3)进入到manager node查看集群状态
docker node ls
(4)node类型的转换
可以将worker提升成manager,从而保证manager的高可用
docker node promote worker01-node
docker node promote worker02-node
#降级可以用demote
docker node demote worker01-node
在线的Docker网址(4小时的会话有效期)
http://labs.play-with-docker.com
创建三个机器
标签:node,容器,compose,--,app,redis,编排,Docker,docker 来源: https://blog.csdn.net/qq_43170213/article/details/118875935
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。