目录
Docker Compose环境的安装
通过docker compose完成python程序的运行
Docker Compose环境的安装
##### 方法一:直接下载编译好的二进制文件
注意:只有linux平台上在安装docker时没有安装docker-compose,windows、macos安装docker时自动安装docker-compose
在 Linux 上的安装十分简单:
从 [官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可。
```
ini #在线安装
[root@localhost wordpress]# curl -L -k https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:06 --:--:-- 0
100 15.4M 100 15.4M 0 0 418k 0 0:00:37 0:00:37 --:--:-- 276k
##或者直接拖动到连接器上
[root@docker1 ~]# mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
mv:是否覆盖"/usr/local/bin/docker-compose"? y
[root@docker1 ~]# cd /usr/local/bin/
[root@docker1 bin]# ls
docker-compose
###继续
[root@localhost wordpress]# chmod +x /usr/local/bin/docker-compose
[root@localhost wordpress]# ll /usr/local/bin/docker-compose
-rwxr-xr-x 1 root root 16168192 Feb 17 11:26 /usr/local/bin/docker-compose
[root@localhost wordpress]# docker-compose --version
docker-compose version 1.24.1, build 4667896b
通过docker compose完成python程序的运行
######
(1)创建项目目录
```shell
[root@docker1 ~]# mkdir composetest
[root@docker1 ~]# cd composetest/
```
###### (2)web应用定义 app.py 文件
在项目路径下创建 app.py 文件,并将以下内容写入文件
```python
[root@docker1 composetest]# vi app.py
[root@docker1 composetest]# cat 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)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
[root@docker1 composetest]# ls
app.py
```
在这个例子中,Redis 就是应用网络中 Redis 容器的主机名。端口使用的 Redis 默认端 口 6379。
###### (3)定义 requirements.txt 文件
在项目路径下创建 requirements.txt 文件,并将以下内容写入文件。
```ini
[root@docker1 composetest]# vi requirements.txt
[root@docker1 composetest] cat requirements.txt
flask
redis
[root@docker1 composetest]# ls
app.py requirements.txt
```
###### (4)定义 Dockerfile
在这一步中,需要编写一个 Dockerfile 来构建一个 Docker 镜像。这个镜像包含 Python
应用的所有依赖,也包含 Python 其本身。
在项目路径下创建一个 Dockerfile 文件,并将以下内容写入文件。
```shell
[root@docker1 composetest]# vi Dockerfile
[root@docker1 composetest]# cat Dockerfile
FROM python:3.7-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
```
本 Dockerfile 主要完成以下工作:
①构建一个基于 Python 3.7 的镜像。
②把当前目录添加到镜像中的/code 路径下。
③把工作路径设置成/code。
④设置容器的默认命令为 python app.py。
###### (5)定义服务 docker-compose.yml文件
在工作路径下创建一个 docker-compose.yml 文件并写入以下内容。
```ini
[root@docker1 composetest]# vi docker-compose.yml
[root@docker1 composetest]# cat docker-compose.yml
#根据Docker Engine release版本确定Compose file format,参照https://docs.docker.com/compose/compose-file/compose-file-v3/
version: '3'
#管理一组服务
services:
#服务名称
web:
#基于Dockerfile来构建一个镜像
build: .
#构建的镜像
image: "composetest_web:latest"
#和宿主机映射的端口
ports:
- "5000:5000"
#服务名称
redis:
#镜像名称
image: "redis:alpine"
```
这个 Compose 文件中定义了两个服务 Web 与 Redis。
Web 服务使用当前目录 Dockerfile 构建出来的镜像,并且将容器上暴露的 5000 端口转
发到主机的 5000 端口,使用 Flask Web 服务器的默认端口 5000。
Redis 服务使用从 Docker Hub 注册表中拉取的公有镜像。
###### (6)运行服务 在项目路径下通过 docker-compose up 命令启动应用。
```shell
[root@docker1 composetest]# docker-compose up
###### (7)通过浏览器访问
此时访问本地 `5000` 端口,每次刷新页面,计数就会加 1。在浏览器中输入http://192.168.200.83:5000/访问
[root@docker1 composetest]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------
composetest_redis_1 docker-entrypoint.sh redis ... Exit 0
composetest_web_1 python app.py Exit 0
###想要让他后台运行的话
[root@docker1 composetest]# docker-compose up -d
Starting composetest_web_1 ... done
Starting composetest_redis_1 ... done
##### 7、通过docker-compose完成wordpress服务部署