接上篇,继续学习docker进阶一些的内容。
官方文档:https://docs.docker.com/compose
安装
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权
sudo chmod +x /usr/local/bin/docker-compose
官方文档:Get started with Docker Compose | Docker Documentation
1、创建文件夹
mkdir composetest
cd composetest
2、创建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)
3、创建依赖配置文件requirements.txt
flask
redis
1、创建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"]
编写docker-compose.yml
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
创建并运行docker-compose
docker compose up
compose启动后,会将每个服务生成对应的镜像,并且所有服务都在一个网络中
docker-compose down
ctrl+c
https://www.runoob.com/w3cnote/yaml-intro.html
version:
services:
服务1:
#服务配置
服务2:
#服务配置
# 其他配置 网络、券、全局规则
volumes:
network:
configs:
version是向下兼容的
创建项目文件
mkdir my_wordpress
cd my_wordpress
编写docker-compose.yml
version: '3'
services:
mysql:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: my_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: wordpress_password
volumes:
- mysql_data:/var/lib/mysql
wordpress:
image: wordpress:latest
depends_on:
- mysql
ports:
- 8080:80
restart: always
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: wordpress_password
volumes:
mysql_data:
启动使用即可
docker-compose up
建个springboot项目,用redis记录请求次数。将文件打成jar包
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
StringRedisTemplate redisTemplate;
@GetMapping("/hello")
public String hell(){
Long views = redisTemplate.opsForValue().increment("views");
return "hello,Sentiment,views:"+views;
}
}
dockerfile
FROM openjdk:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
docker-compose.yml
version: '3.3'
services:
sentimentdemo:
build: .
image: demo
depends_on:
- redis
ports:
- "4000:8080"
redis:
image: "library/redis:alpine"
docker启动项目
docker-compose up
此时请求主页便会记录次数
后边还有Swarm等集群内容,但由于内容需求和服务器问题docker就了解到这里。。。