欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker-compose使用

程序员文章站 2022-06-03 21:25:14
...

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

 

docker-compose使用

 

四. 演示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: 

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

docker-compose使用