Docker Compose
简介
dockerfile build run 手动操作,单个容器!
微服务,100个微服务!依赖关系。
Docker Compose 来轻松高效的管理容器。定义运行多个容器。
官方介绍:
定义、运行多个容器
YAML file 配置文件
single command,命令有哪些?
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.
三个步骤:
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.
service ,什么是服务? docker-compose.yml 这个文件怎么写!
3.Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
启动项目
作用:批量容器编排。
Compose 是Docker官方的开源项目。需要安装!
dockerfile 让程序在任何地方运行。web服务。redis、mysql、nginx…等多个容器。
Compose
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
安装 Compose
参考docker官方文档进行安装
官网地址:https://docs.docker.com/compose/
1、下载
官网下载地址(速度慢):
curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
国内下载地址(速度快):
[root@docker ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 423 100 423 0 0 167 0 0:00:02 0:00:02 --:--:-- 167
100 16.7M 100 16.7M 0 0 3556k 0 0:00:04 0:00:04 --:--:-- 11.4M
2、授权
命令:
sudo chmod +x /usr/local/bin/docker-compose
[root@docker ~]# cd /usr/local/bin
[root@docker bin]# ls
docker-compose
[root@docker bin]# ls -l
总用量 17176
-rw-r--r--. 1 root root 17586312 7月 11 19:57 docker-compose
[root@docker bin]# sudo chmod +x /usr/local/bin/docker-compose
[root@docker bin]# ls
docker-compose
验证是否安装成功compose
[root@docker bin]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
练手
根据docker官方文档进行练习
地址: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
Creating compose_web_1 …done
Creating compose_redis_1 …done
成功
1、文件名 composetest
1、准备工作
yum install python-pip #pip 是 Python 包管理工具
yum -y install epel-release #报错的话执行
2、为项目创建目录
[root@docker bin]# mkdir composetest
[root@docker bin]# cd composetest
3、在项目目录中创建一个名为app.py的文件,内容如下:
root@docker composetest]# cat 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 benn seen {} times.\n'.format(count);
if __name__ == "__main__":
app.run(host="0.0.0.0",debug=True)
在本例中,redis是应用程序网络上redis容器的主机名。我们使用Redis的默认端口6379。
4、在项目目录中创建另一个名为requirement.txt 的文件,内容
[root@docker composetest]# cat requirements.txt
flask
redis
5、在项目目录中,创建名为Dockerfile的文件:
[root@docker composetest]# cat Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
# 这告诉docker:
# 从Python 3.7镜像开始构建镜像
# 将当前目录添加到/code映像中的路径中
# 将工作目录设置为/code
# 安装python依赖项
# 将容器的默认命令设置为python app.py
6、在项目中创建一个名为docker-compose.yml的文件:
[root@docker composetest]# cat docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
2、服务
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
自动的默认规则!
docker images
[root@docker composetest]# docker service ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
默认服务名 文件名_服务名_num
多个服务器,集群,A B _num 副本数量
服务redis服务>=4个副本
集群状态。服务都不可能只有一个运行实例。弹性、10 HA 高并发。
kubectl service 负载均衡
3、网络规则
10个服务>=项目(项目中的内容都在同个网络下,域名访问)
如果在同一个网络下,我们可以直接通过域名访问。
停止
1、要在composetest目录下执行docker-compose down
2、直接Ctrl + C
docker-compose
以前都是单个 docker run启动容器。
docker-compose,通过docker-compose编写yaml配置文件,可以通过 compose 一键启动所有的服务,或停止!
开源项目
搭建博客
docker官方文档地址:https://docs.docker.com/samples/wordpress/
步骤:
下载程序、安装数据库、配置…
compose 应用 => 一键启动!
[root@docker ~]# cd /home
[root@docker home]# mkdir my_wordpress
[root@docker home]# cd my_wordpress
[root@docker my_wordpress]# vim docker-compose.yml
[root@docker my_wordpress]# cat docker-compose.yml
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
[root@docker my_wordpress]# docker-compose up -d
在浏览器输入192.168.200.169:8000进行登录博客
总结
本篇笔记是基于B站up主:遇见狂神说的笔记进行学习,感兴趣的可以去B站进行学习。网站地址:https://space.bilibili.com/95256449,以上就是今天要讲的内容,本文仅仅通过简单Compose
来巩固之前所学的常用指令。好了今天的内容就到这里了,下一篇再见