首页 > 其他分享 >Docker Compose

Docker Compose

时间:2022-09-03 10:22:08浏览次数:84  
标签:容器 compose redis Compose Docker docker

简介

  • 之前使用docker时,写完一个项目之后需要定义一个docker file,再通过docker build生成一个镜像,并通过docker run执行;都是通过手动操作,用于单个容器,非常麻烦,现在想要的效果是:有100个微服务,存在依赖关系,通过docker compose来轻松高效的管理容器!定义和运行多个容器。

官方介绍
Compose is a tool for defining and running multi-container Docker applications.
With Compose, you use a YAML file to configure your application’s services.
Then, with a single command, you create and start all the services from your configuration.
To learn more about all the features of Compose, see the list of features.

所有的环境都可以使用 Compose。
Compose works in all environments: production, staging, development, testing,
as well as CI workflows. You can learn more about each case in Common Use Cases.
介绍总结:
定义、运行多个容器。
YAML file 配置文件。
single command。 命令有哪些?

  • 三步骤:
    Using Compose is basically a three-step process:

1.Define your app’s environment with a dockerfile so it can be reproduced anywhere.
Dockerfile 保证我们的项目在任何地方可以运行。

2.Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
services 什么是服务。
docker-compose.yml 这个文件怎么写!

3.Run docker-compose up and Compose starts and runs your entire app.
启动项目

  • 作用:批量容器编排

补充理解
Compose 是Docker官方的开源项目。需要安装!
Dockerfile 让程序在任何地方运行。 web服务。 redis、mysql、nginx ... 多个容器。需要run很多次

Compose则因此而生

# A docker-compose.yml looks like this:(yml文件示例)
version: '2.0' 
services:
	web:
		build: . 
		ports:
		- "5000:5000"
		volumes:
		-.:/code
		-logvolume01:/var/log 
		links:
		-redis 
	redis:
		image: redis 
volumes:
	logvolume01: {}

Compose重要的概念:
1.服务services,说白了就是容器,应用(web、redis、mysql.)这些应用可以使用compose进行编排
2.就生成一个项目project,是一组关联的容器。跑起来 博客。web、mysql。

Compose 和 Swarm区别
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是:

  • Docker Compose 是一个在单个服务器或主机上创建多个容器的工具
  • Docker Swarm 则可以在多个服务器或主机上创建容器集群服务

因此,对于微服务的部署,显然 Docker Swarm 会更加适合

安装

1,下载

# 不建议
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 这个可能快点!
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2,授权

cd /usr/local/bin
ll
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
# 看到版本号则安装成功

思路

官方步骤地址:https://docs.docker.com/compose/gettingstarted/

  • 1,创建一个应用,例:app.py
  • 2,写一个dockerfile,将应用打包成镜像
  • 3,写Docker-compose yaml文件(文件定义整个服务,需要的环境 | web、redis)完整的上线服务
  • 4,启动 compose 项目(docker-compose up)

流程
1、创建网络
2、执行 Docker-compose yaml
3、启动服务。
Docker-compose yaml

实践步骤

通过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一键启动所有服务或停止。

docker小结

1,Docker镜像 run => 容器
2,DockerFile构建镜像(服务打包)
3,Docker-compose启动项目(编排,多个微服务/环境)
4,Docker网络

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:

标签:容器,compose,redis,Compose,Docker,docker
From: https://www.cnblogs.com/zhengyan6/p/16652079.html

相关文章

  • 使用 Docker-compose 打包整个网站项目一键部署
    前言我们常常见到很多比较棒的开源项目,但在本地安装运行的话就会很复杂,要配置不同的环境,安装不同的依赖,好一点的会用docker直接拉取,或者打包好。这些无疑都会增加初学者......
  • docker的安装
    安装参考文档:https://docker.easydoc.net/doc/81170005/cCewZWoN/lTKfePfP遇到问题#占c盘空间纯纯的nc软件方法:mklink/j"C:\ProgramFiles\Docker""D:\Program......
  • docker 简介
    什么是DockerDocker在容器进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得Docker技术比虚拟机技术更为轻便、快捷。下面......
  • docker-compose 启动一个MySQL测试数据库
    services:mysql:image:mysql:5.7ports:-"3306:3306"expose:-"3306"environment:-MYSQL_USER=test-MYSQL_PASSWO......
  • Linux Mint 安装 docker desktop
    先安装docker-ce-clihttps://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/选择对应版本的deb下载下载dockerdesktophttps://docs.docker.co......
  • Docker 安装
    Docker安装:1.安装依赖包:yuminstall-yyum-utilsdevice-mapper-persistent-datalvm22.更新yum缓存yummakecachefast3.添加docker下载源地址:yum-config-manage......
  • Docker 个人使用的一些镜像及记录
    Docker修改源创建或修改/etc/docker/daemon.json文件{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}Docker中国区官方镜像https://regist......
  • Docker 部署GitLabs 版本升级 13.9.x -> 15.3.x
    Gitlabs版本升级大版本不能直接跳级升级,可以参考官方的升级路径。本人是从13.9.x需要升级到最新的15.3.x。参考官方路径结合自己的实际情况成功升级。13.9.0->13.12.......
  • Docker 安装配置宝塔面板
    本文主要介绍如何将宝塔面板作为Docker容器安装在Linux服务器上。其实对于宝塔一开始我是拒绝的,毕竟我之前是可以熟练操作Linux服务器的。别提宝塔面板了,就连lnmp.o......
  • 使用docker-compose搭建flink集群
    第一步:安装docker和docker-compose并赋予权限第二步:利用docker-compose构建容器1version:"2.1"2services:3jobmanager:4image:flink:1.9.2-scal......