一个计算机技术爱好者与学习者

0%

Redis简介

Redis: The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.

Redis是被数百万开发人员用作数据库、缓存、流引擎和消息代理的开源内存数据存储。

Redis特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

参考文档:

阅读全文 »

1. 前言

本文中,我们学习使用Compose构建镜像,并拉起容器。

参考文档:

2. webapp + redis

1、创建测试目录

1
2
mkdir composetest
cd composetest

2、在项目目录中创建一个名为app.py的文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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容器的主机名,使用默认端口6379。

3、创建requirements.txt文件,内容为:

1
2
flask
redis

4、创建Dockerfile,内容为:

1
2
3
4
5
6
7
8
9
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
COPY . .
CMD ["flask", "run"]

该文件说明:

  • 从Python 3.7镜像像开始构建镜像。
  • 将工作目录设置为/code。
  • 设置flask命令使用的环境变量。
  • 安装gcc,以便诸如MarkupSafe和SQLAlchemy之类的Python包可以编译加速。
  • 复制requirements.txt并安装Python依赖项。
  • 复制当前目录中的所有文件到工作目录。
  • 将容器的默认命令设置为flask run。

5、创建docker-compose.yml,内容为:

1
2
3
4
5
6
7
8
version: '3'
services:
web:
build: .
ports:
- "15000:5000"
redis:
image: "redis:alpine"

该Compose文件定义了两个服务:Web和Redis。
Web服务从Dockerfile构建镜像,启动后容器在5000端口提供服务,然后将容器端口5000绑定到主机端口15000。

6、使用Compose构建和运行应用

1
docker-compose up

7、测试应用

1
curl http://127.0.0.1:15000

3. webapp + redis + 挂载

1、编辑docker-compose.yml,挂载当前目录到/code

1
2
3
4
5
6
7
8
9
10
11
12
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"

2、运行应用

1
docker-compose up

3、修改app.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 2.0! I have been seen {} times.\n'.format(count)

4、测试应用

1
curl http://127.0.0.1:15000

Docker-Compose简介

Docker-Compose(简称Compose)是用于定义和运行多容器Docker应用程序的工具。
通过Compose,可以使用YAML文件来配置应用程序的服务。然后使用一个命令,就可以从配置中创建并启动所有服务。

本文中,我们来学习一下Compose的基础用法。

参考文档:

阅读全文 »

Alpine简介

Alpine Linux是基于musl libc和 busybox 的面向安全的轻量级Linux发行版。
Alpine的VM镜像大小113M,Alpine的Docker镜像大小只有2M!

Alpine由非商业组织维护的,支持广泛场景的Linux发行版,它特别为资深/重度Linux用户而优化,关注安全,性能和资源效能。
Alpine 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。

第一次接触alpine,是使用它跑单测。gitlab设置代码提交后触发单测,而这个单测,可以使用alpine来进行。但是因为时区问题,跑出的单测结果和预期不同。因此,本文以修改Alpine时区为引子,简单学习了解一下Alpine。

PS:与Alpine相似的一个小系统CirrOS的VM镜像大小只有12M,CirrOS的Docker镜像大小只有10M。

阅读全文 »