docker-compose
- docker compose 简介和安装
- 简介
- 安装 docker compose
- docker compose 快速体验
- 创建SpringBoot 项目自测
- 项目放到容器上测试
- 查看网络
docker compose 简介和安装
简介
官网:
https://docs.docker.com/compose/
背景:
前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。
使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。
官网的定义:
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
Compose的三步最佳实战:
- 定义自己应用的 Dockerfile 文件。可以在任何地方构建。
- 使用 docker-compose.yml 定义我们的服务。这一整套服务可以一起在一个隔离环境运行。
- 运行 docker-compose up 就可以启动整个app。
安装 docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
注意:
官网提供的安装地址非常的慢,不建议使用,用下面的方式安装。截至目前为止,官网最新版是 1.27.4 。
安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
分配权限
chmod +x /usr/local/bin/docker-compose
查看信息
docker-compose --version
docker compose 快速体验
我们用官网的示例,快速体验一下服务编排。
官方文档示例:
https://docs.docker.com/compose/gettingstarted/
准备工作:
如果要参照官网示例,先安装 python 工具包
sudo yum -y install epel-release
sudo yum install python-pip
安装相关镜像:
docker pull python:3.7-alpine
docker pull redis:alpine
1. 编写程序
创建工程目录
mkdir composetest
cd composetest
vi 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)
vi requirements.txt
flask
redis
2. 编写 Dockerfile
vi Dockerfile
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 ["flask", "run"]
3. 编写 docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
上面步骤汇总
[root@localhost /]# mkdir composetest
[root@localhost /]# cd composetest/
[root@localhost composetest]# vi app.py
[root@localhost composetest]# vi requirements.txt
[root@localhost composetest]# vi Dockerfile
[root@localhost composetest]# vi docker-compose.yml
[root@localhost composetest]# ls
app.py docker-compose.yml Dockerfile requirements.txt
注意:在复制粘贴时,一定要留意开头第一个英文单词是否完整,因为在 vi 编辑文件,复制进去的内容,开头第一个单词会不完整。
4. 发布
docker-compose up
效果如下:
总结:
a. 先执行:sudo yum -y install epel-release
b. 再执行:sudo yum install python-pip
c. 再安装两个相关镜像
d. 然后创建项目工程,按步骤创建文件
e. 最后 docker-compose up
需要注意的是,网络环境要很不错,不至于出现下载不了。
创建SpringBoot 项目自测
编写 controller:
package cn.com.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/")
public class controller {
@Autowired
RedisTemplate redisTemplate;
@GetMapping("hello")
public String hello(){
Long views = redisTemplate.opsForValue().increment("views");
return "welcome to homepage,views" + views;
}
}
编写 application.properties:
spring.redis.host=127.0.0.1
# 端口号不写,默认6379
spring.redis.port=6379
启动本地的 redis:
启动 springboot 工程:
项目放到容器上测试
修改 application.properties,host 改为容器名(本地就不能再运行了)。
spring.redis.host=redis
spring.redis.port=6379
新建 dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
VOLUME ["/logs"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
新建 docker-compose.yml 文件
官网上查找对应的版本
https://docs.docker.com/compose/compose-file/
version: '3.8'
services:
springboot-master:
build: .
ports:
- "8080:8080"
image: springboot-master
depends_on:
- redis
redis:
image: "redis:alpine"
打包工程,并上传到服务器
创建工程文件
上传文件
启动测试
可以在控制台看出执行步骤
测试成功。
注意:停止用 ctrl + c,如果用 docker-compose up 启动的话会阻塞控制台,用 docker-compose up -d 后台启动的方式。
docker-compose up --help:查看帮助命令(–help 万能)
查看网络
docker network ls
查看网络细节:
语法:docker network inspect network_id
docker network inspect dff079aa02a5