当前位置:   article > 正文

06-Docker单机多容器应用部署_单机两个容器

单机两个容器

1. 实验描述

python操作redis简单Demo,创建两个Docker容器:

  • redis:部署redis
  • flask-redis:部署python开发的简单Demo,Demo需要操作redis

flask-redis中的程序代码app.py如下:

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

创建flask-redis容器的Dockerfile如下:

FROM python:2.7
LABEL maintaner="Peng Xiao xiaoquwl@gmail.com"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 创建redis容器

[root@eshop-cache05 flask-redis]# docker run -d --name redis redis
35bb18f15b00c65df7996368c28da64ec1f5021d5ea1b732d6754c3ff9a653bd

[root@eshop-cache05 flask-redis]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
35bb18f15b00        redis               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        6379/tcp   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.创建flask-redis容器

3.1 创建flask-redis镜像

根据Dockerfile创建flask-redis镜像:

// 创建flask-redis目录
[root@eshop-cache05 opt]# mkdir flask-redis

// 进入flask-redis目录
[root@eshop-cache05 opt]# cd flask-redis/

//将app.py 和 Dockerfile拷贝至该目录
[root@eshop-cache05 flask-redis]# ls
app.py  Dockerfile

//创建flask-redis镜像
[root@eshop-cache05 flask-redis]# docker build -t happyaged/flask-redis .

[root@eshop-cache05 flask-redis]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
happyaged/flask-redis            latest              608961b91535        5 minutes ago       916MB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.2 创建flask-redis容器

[root@eshop-cache05 flask-redis]# docker run -d --link redis --name flask-redis -e REDIS_HOST=redis happyaged/flask-redis 
e00022f018f376ffc75d65b6adda1b3990adc5d38af89a3a97b2b64b9fbc1e16
  • 1
  • 2

-d:后台执行
-link:redis,创建的容器可直接通过redis这个名字访问之前创建的redis容器
-name:flask-redis,创建的容器的名称
-e:REDIS_HOST=redis,设置容器的环境变量REDIS_HOST值为redis

4. 实验

//进入flask-redis容器:
[root@eshop-cache05 flask-redis]# docker exec -it flask-redis /bin/bash

//调用py程序
root@e00022f018f3:/app# curl 127.0.0.1:5000
Hello Container World! I have been seen 1 times and my hostname is e00022f018f3.
root@e00022f018f3:/app# curl 127.0.0.1:5000
Hello Container World! I have been seen 2 times and my hostname is e00022f018f3.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

但是,退出容器,在宿主机上却不能访问:

root@e00022f018f3:/app# exit
exit
[root@eshop-cache05 flask-redis]# curl 127.0.0.1:5000
curl: (7) Failed connect to 127.0.0.1:5000; Connection refused
  • 1
  • 2
  • 3
  • 4

若flask-redis容器之外也能访问,需要将5000端口暴露出来
先删除原flask-redis容器,重新创建flask-redis容器,暴露5000端口,如下:

[root@eshop-cache05 flask-redis]# docker run -d -p 5000:5000 --link redis --name flask-redis -e REDIS_HOST=redis happyaged/flask-redis 
9e714e5b56a694649a823c132204c68a49996026f0e2fd2420be06d602b58676
  • 1
  • 2

宿主机访问:

[root@eshop-cache05 flask-redis]# curl 127.0.0.1:5000
Hello Container World! I have been seen 3 times and my hostname is 9e714e5b56a6.
  • 1
  • 2

其他机器也可以访问:

[root@eshop-cache04 ~]# curl 172.28.65.126:5000
Hello Container World! I have been seen 4 times and my hostname is 9e714e5b56a6.
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/74065
推荐阅读
相关标签
  

闽ICP备14008679号