docker-compose对单主机Docker容器集群快速编排,时下热门的k8s用于管理整个集群Docker容器。
docker启动的是单独的container,一个应用可能依赖多个服务,compose是用于运行和管理多个容器化的工具。
下面演示如何快速搭建flask网站,显示站点访问人数,通过redis存储访客计数。

 

一. 安装

linux上的docker-compose需单独安装,docker-compose依赖python3环境。

yum install -y python3
pip install docker-compose

二. 创建工程

$ mkdir mytest
$ cd mytest
$ tree .
$ ll
total 16
-rw-r--r-- 1 root root 298 Jan  1 12:13 app.py
-rw-r--r-- 1 root root 125 Jan  1 12:07 docker-compose.yml                                                                               
-rw-r--r-- 1 root root 415 Jan  1 12:08 Dockerfile                                                                                       

Dockerfile 构建镜像:

FROM python:3.7-alpine
ADD . /code
WORKDIR /code

RUN pip install -r flask redis
CMD ["python", "app.py"]

在python3.4 镜像下构建应用,会报错:Fatal Python error: getentropy() failed。解决方法:指定v3.7

 

docker-compose.yml 定义服务:

version: '2'
services:
 web:
  build: . 
  ports:
   - "5000:5000"
  volumes:
   - .:/code
 redis:
  image: "redis:alpine"

配置定义了redis 和 web这两个服务,挂载当前的源码文件(app.py)至容器 /code 目录下。

 

三. 启动容器

$ docker-compose up

-d  后台启动

 

控制台显示网络出错:

ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

该错误显示ipv4地址重叠冲突了,无法分配有效的ip。网上给的解决方案是Docker 默认支持 30 个不同的自定义 bridge 网络,如果超过这个限制,就会提示上面的错误。需通过以下命令清除无用的网络。

docker network ls
docker network prune

问题仍然没有解决。我的网络只有4个,看来不是这个问题引起的。

$ route
192.168.0.0     9.134.112.1     255.255.0.0     UG    0      0        0 eth1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0

查看路由表,这两个地址的确重叠了,删除192.168.0.0 路由,问题解决。

route del -net 192.168.0.0 netmask 255.255.0.0

 

 

四. 演示wordpress

手动搭建wordpress 环境比较繁琐,需要安装mysql,apache,php,wordpress安装包等。用compose 几秒钟就搞定了,简直是测试人员的福音。

docker-compose.yml 

version: '3'
services:
 db:
  image: mysql:5.7
  volumes:
   - db_data:/var/lib/mysql
  restart: always
  environment:
   MYSQL_ROOT_PASSWORD: root
   MYSQL_DATABASE: wordpress
   MYSQL_USER: wordpress
   MYSQL_PASSWORD: wordpress
 wordpress:
  depends_on: 
   - db
  image: wordpress:latest
  ports:
   - "5000:80"
  restart: always
  environment:
   WORDPRESS_DB_HOST: db:3306
   WORDPRESS_DB_USER: wordpress
   WORDPRESS_DB_PASSWORD: wordpress
volumes:
 db_data: 

运行容器,就是这么顺滑 。。。

 

 

 

 

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐