docker compose安装与使用
简介
之前使用docker时,写完一个项目之后需要定义一个docker file,再通过docker build生成一个镜像,并通过docker run执行;都是通过手动操作,用于单个容器,非常麻烦,现在想要的效果是:有100个微服务,存在依赖关系,通过docker compose来轻松高效的管理容器!定义和运行多个容器。
安装docker compose
linux的安装docker-compose需要从GitHub上面进行下载,GitHub的docker-compose下载地址:https://github.com/docker/compose/releases
1、下载docker-compose
wget https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose #移动到执行目录
chmod 777 /usr/local/bin/docker-compose #授权
2、运行docker-compose命令
docker-compose
3、docker安装
指定安装Docker-ce 19.03版本
不指定默认安装最新版本
# docker yum源
[root@k8s-master01 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker-ce 19.03
[root@k8s-master01 ~]# yum install docker-ce-19.03.* -y
配置镜像国内源
[root@k8s-master01 ~]# mkdir /etc/docker
[root@k8s-master01 ~]# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts":["native.cgroupdriver=systemd"]
}
EOF
启动Docker
[root@k8s-master01 ~]# systemctl daemon-reload && systemctl enable --now docker
[root@k8s-master01 ~]# systemctl status docker #查看启动状态
4、docker-compose常用命令
1、查看配置命令:
docker-compose config
2、后台启动:
docker-compose up -d
3、构建镜像:
docker-compose bulid
4、下载镜像:
docker-compose pull
5、查看运行的镜像:
docker-compose ps
6、查看进程:
docker-compose top
7、启动已存在的容器命令:
docker-compose start
8、停止正在运行的容器命令:
docker-compose stop
9、查看服务日志输出:
docker-compose logs
实践步骤
通过Docker Compose上构建一个简单的python web应用程序,该应用程序使用Flask框架并在redis中维护一个计数器,用来记录该web应用被访问的次数。
官方步骤地址:https://docs.docker.com/compose/gettingstarted/
1,准备工作
yum -y install python-pip # pip是python包管理工具
yum -y install epel-release # 报错的话执行
2,为项目创建目录
mkdir composetest
cd composetest
3,在项目目录中创建一个名为app.py的文件,内容如下:
vim 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)
在此示例中,redis是应用程序网络上 redis 容器的主机名。我们使用 Redis 的默认端口6379
4,在项目目录中创建另一个名为requirements.txt的文件,内容如下:
vim requirements.txt
写入:
flask
redis
5,在项目目录中,创建名为 Dockerfile的文件:
vim Dockerfile
写入:
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["python", "app.py"]
这告诉 Docker:
从 Python 3.7 映像开始构建映像。
将工作目录设置为 。/code
设置命令使用的环境变量。flask
安装 gcc 和其他依赖项
复制并安装 Python 依赖项。requirements.txt
将元数据添加到映像,以描述容器正在侦听端口 5000
将项目中的当前目录复制到映像中的工作目录。..
将容器的默认命令设置为 。flask run
6,在项目目录中创建一个名为docker-compose.yml的文件:
vim docker-compose.yml
写入:
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
此撰写文件定义了两个服务:web和redis
7,从项目目录中,通过运行 启动应用程序
docker-compose up
Compose 会拉取 Redis 映像,为代码构建映像,然后启动定义的服务。在这种情况下,代码在生成时静态复制到映像中
8,在浏览器中输入 http://localhost:8000/ 以查看正在运行的应用程序
curl local:8000
多次curl或者刷新页面会增加次数
Hello World!I have been seen 2 times.
如果你在 Linux、Docker Desktop for Mac 或 Docker Desktop for Windows 上本机使用 Docker,那么 Web 应用现在应该在 Docker 守护程序主机上的端口 8000 上侦听。
将 Web 浏览器指向 http://localhost:8000 以查找邮件。如果无法解决此问题,您也可以尝试 http://127.0.0.1:8000。Hello World
docker-compose
以前都是单个docker run启动容器
docker-compose 通过docker-compose编写yaml配置文件,可以通过compose一键启动所有服务或停止。
Top
docker小结
1,Docker镜像 run => 容器
2,DockerFile构建镜像(服务打包)
3,Docker-compose启动项目(编排,多个微服务/环境)
4,Docker网络
Top
Compose配置编写规则
yaml规则
可查看官网示例: https://docs.docker.com/compose/compose-file/#specifying-durations
# 三层
# 1
version: '' #版本
# 2
services: #服务
服务1: web
# 服务配置
images
build
network
......
服务2: redis
......
服务3: redis
......
# 3
#其他配置 网络/卷,全局规则
volumes:
networks:
config: