【谈一谈】docker-compose的前世今生以及怎么部署实战
时间就像海绵里的水,只要愿意挤,总是有的
忙碌的工作中,趁着系统启动的短暂片刻间,我写一下最近使用到的一个技术,感觉对大家也挺有用
废话不多说,我们直接亮剑!~哈哈哈!~~
本文总纲:
万变不离其宗,我们首先看 总纲 有 整体 的概念,方能决胜 千里之外 !!!
1.docker-compose
的进化史
我们在学习一个知识或者概念时候,我都建议 去看看 关于它的历史! 为什么 ??因为知己知彼方能 百战不殆 !!!(不装逼,就是能更好的吸收理解!)
好,我们首先看下图,你会问这大胡子大叔是谁啊?他就是docker-compose
的负责主导开发Solomon Hykes
,也是docker
的创始人之一(牛逼轰轰的人物!哈哈哈)以及他的docker
公司内部进行研发的一个项目
- 这个
docker-compose
首次公开 是在2014年 - 一开始这个
docker-compose
名字叫做fig
,是一个独立的 开源项目 - 因为其可以采用一个
yml
文件来定义 整个 应用服务栈,,大大简化用户管理和运维成本,所以就越来越多的人使用 - 一旦人多了嘛!
docker
公司也发现了( 最重要 的还好用嘞!),就将这个fig
项目赋予 正宫娘娘 身份,成为官方工具集一部分
2.docker-compose
安装及部署
我们看了它的发展史,那我们 聊一聊 怎么安装部署呢? —> 主要 两种方式 :(我这里只介绍
Linux
系统的安装方式哈!~)(对于
Windows
系统,通常使用的是Docker Desktop
,而这通常Docker Compose
已经被包含在里面了,不需要去安装部署了,所以就 洒洒水 啦!~哈哈哈!)
- 直接下载二进制文件部署(推荐)
- 使用
pip
安装(用国内网推荐)
1.直接下载二进制文件部署
我还是推荐使用官网命令进行直接下载二进制文件部署
1.进入指定的路径:
我们要把二进制文件放在此目录下:
cd /usr/local/bin/
2.获取版本号并部署
直接获取最新二进制文件
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
获取对应的版本号:(可以不看)
##当中的version是要替换的
sudo curl -L "https://github.com/docker/compose/releases/download/VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
##如 VERSION 替换为 1.26.2 就下载1.26.2 版本
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
下载完我们会看到一个文件如下图所示:
3.赋予执行权限
运行下面命令,这个 一定要 运行哈!~
这步操作是 确保 你能够执行
docker-compose
命令的!!!你要非要酱,那就 运行不了 ,哈哈哈!~
sudo chmod +x /usr/local/bin/docker-compose
4.验证安装
docker-compose --version
如果按照上述的结果操作的话,沃恩会看到如下图的结果:(表明 安装成功 !~)
2.采用PIP
命令安装
使用
pip
命令安装是比较传统的方法,也是上述你说不能访问外网的 首推之选好了,我们一起看安装步骤吧!~(也是有两种)
python2
安装Python3
安装为什么能使用
Python
安装? 你是不是有这样的疑问? 其实我们去看它开源项目,我们就会知道,docker-compose
本身就是一个Python
程序(是不是一语惊醒梦中人!~哈哈哈)
1.Python2
安装docker-compose
- 一般不推荐使用
Python2
直接进行安装,因为我们知道Python2
已经不再维护和更新- 当然你的
Linux
版本非常老的话,我还是很建议的哈!~
# 更新pip到最新版本(如果需要)
pip install --upgrade pip
# 安装docker-compose
pip install docker-compose
2.Python3
安装docker-compose
这个推荐使用哈!~
# 更新pip3到最新版本(如果需要)
pip3 install --upgrade pip
# 安装docker-compose
pip3 install docker-compose
3.验证安装(这一步一定要做!!)
避免返工检查,别问我为啥子,
因为有个心高气傲过度自信的博主我已现身说法啦!~(一枚妥妥的 冤种 )
docker-compose --version
好了,既然安装好了,我们说说怎么去实践和应用吧!~
3.DOCKER-COMPOSE
的实战
我始终认为 以练带学 ,是最好上手的和快速成长的方式,来,让我们一起 更优秀 吧!~
前提:
你已经安装好
docker-compose
实战目标:
- 第1个服务: 部署一个基于
Python Flask
的简单Web
应用, - 第2个服务: 该应用连接到一个
MySQL
数据库。 - 使用
Docker Compose
来管理这 两个服务 (Web
应用和MySQL
数据库)
1.创建目录结构
- 新建一个目录,比如叫
compose_proj
,并在该目录下创建两个子目录,- 分别命名为
web
和db
,用于存放两个服务:Web应用
和数据库的Docker
配置文件 (dockerfile
)
2.创建两个服务的dockerfile
文件
1.编写web
应用的DOCKERFile
文件
在
compose_proj/web
目录下,创建一个Dockerfile
,内容如下:
# 使用官方的Python运行时作为基础镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 将当前目录内容复制到容器的/app中
COPY . /app
# 安装所需的包
RUN pip install --trusted-host pypi.python.org flask mysql-connector-python
# 暴露端口
EXPOSE 5000
# 定义启动命令
CMD ["python", "app.py"]
创建
app.py
【 也是在 compose_proj/web
目录下】
- ,创建一个简单的
Flask
应用app.py
- 目的是为了用于连接数据库并展示数据
from flask import Flask
from mysql.connector import connect, Error
app = Flask(__name__)
@app.route('/')
def hello_world():
try:
with connect(
host='db',
user='root',
password='password',
database='example'
) as connection:
cursor = connection.cursor()
cursor.execute("SELECT 'Hello, Docker Compose!'")
result = cursor.fetchone()
return result[0]
except Error as e:
return str(e)
if __name__ == '__main__':
app.run(host='0.0.0.0')
如下图所示
!
2.编写mysql
数据库
这边很简单没啥要操作的 (这里我们啥都不做, 直接第三步 )为啥? 第三步 有解释哈 ~哈哈哈!
- 在此目录下,原本需要
Dockerfile
,或者直接创建一个docker-compose.yml
文件来定义MySQL
服务。 - 但 这里我们先不做,稍后会统一在项目根目录创建一个总的
docker-compose.yml
文件来 管理两者 。
3.编写docker-compose.yml
【核心】
在
compose_example
目录下,创建一个docker-compose.yml
文件,用于定义这两个服务:(这一步很重要哈!灵魂一步!)两个服务:
web
和db
。
web
服务通过build
指令指向了之前创建的web
目录下的Dockerfile
db
服务直接使用了官方的MySQL
镜像,并设置了环境变量来配置数据库。(这就明白了为啥mysql
数据库服务那步为啥我们 啥都没做了吧 )
version: '3.0'
services:
web:
build: ./web
ports:
- "5000:5000"
depends_on:
- db
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: compose_test
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
好了,上述步骤我饿们完成了,接下来我们就是直接运行了
4.启动服务
注意! ~启动服务,一定要在
compose_proj
目录下!一定要在compose_proj
目录下!!一定要在compose_proj
目录下!!!(~重要的话说三遍!!!)下述命令会构建
Web
应用的镜像(如果尚未构建),拉取MySQL
镜像,并在后台启动这两个服务
docker-compose up -d
5.验证服务
- 打开浏览器,访问
http://localhost:5000
, - 能看到
Hello, Docker Compose!
的输出,表明Web
应用已经成功连接到MySQL
数据库并返回了数据。
这也表明你已经成功完成
docker-compose
的实战应用,完结撒花!!!
完结
好了,看到这里,说明你是一个很优秀的人
我也相信你也一定是收益匪浅吧!~感觉有收获的,欢迎大大们点赞收藏啊!~哈哈哈!