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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangjun0210/article/details/86081482

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)

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

FROM python:2.7
LABEL maintaner="Peng Xiao [email protected]"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

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   

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

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

-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.

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

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

若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

宿主机访问:

[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.

其他机器也可以访问:

扫描二维码关注公众号,回复: 5031853 查看本文章
[root@eshop-cache04 ~]# curl 172.28.65.126:5000
Hello Container World! I have been seen 4 times and my hostname is 9e714e5b56a6.

猜你喜欢

转载自blog.csdn.net/huangjun0210/article/details/86081482