Docker 部署常用服务
1. 获取 Docker 服务
Tips:这里部署时默认使用最新稳定的官方镜像版本,如有版本要求自行在镜像名后标注
:tag
即可。
1.1 Redis
# 使用 Docker 启动 redis 服务,端口默认,使用host网络模式保障性能。
docker run --restart=always --network host -d -it --name myredis redis
将 redis 数据保存到宿主机目录:
mkdir -p ~/docker/redis/data # 新建宿主机目录
docker run --restart=always --network host -d -it -v ~/docker/redis/data:/data --name myredis redis
指定自己的配置文件
# 先将配置文件放到 ~/docker/redis/redis.conf
docker run --restart=always --network host -d -it -v ~/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
1.2 Nginx
# 使用 Docker 启动 redis 服务,端口默认,使用host网络模式保障性能。
# 使用自己的html目录,ro设定宿主机目录挂载到容器后,容器对此目录只读
docker run --restart=always --network host -d -it -v ~/docker/Nginx/html:/usr/share/Nginx/html:ro --name myNginx Nginx
指定自己的配置文件
# 先将配置文件放到 ~/docker/Nginx/etc/Nginx 目录下
docker run --restart=always --network host -d -it -v ~/docker/Nginx/html:/usr/share/Nginx/html:ro -v ~/docker/Nginx/etc/Nginx:/etc/Nginx --name myNginx Nginx
1.3 MysqL
# 使用 Docker 启动 redis 服务,端口默认,使用host网络模式保障性能。
# my-secret-pw 指定MysqL的root用户密码
docker run --restart=always --network host -d -it --name myMysqL -e MysqL_ROOT_PASSWORD=my-secret-pw MysqL
将MysqL数据保存到宿主机目录:
mkdir -p ~/docker/MysqL/data # 新建宿主机目录
docker run --restart=always --network host -d -it -v ~/docker/MysqL/data:/var/lib/MysqL --name myMysqL -e MysqL_ROOT_PASSWORD=my-secret-pw MysqL
指定自己的配置文件
# 将配置文件放入 ~/docker/MysqL/conf.d/
docker run --restart=always --network host -d -it -v ~/docker/MysqL/conf.d/:/etc/MysqL/conf.d --name myMysqL -e MysqL_ROOT_PASSWORD=my-secret-pw MysqL
接下来,将下面的代码保存到~/test/app.py
import flask
from flask import Flask
app = Flask(__name__)
from redis import StrictRedis
from redis import ConnectionPool
# 指定redis服务地址
REdis_HOST = os.getenv('REdis_HOST','127.0.0.1')
# 指定redis端口号
REdis_PORT = os.getenv('REdis_PORT', '6379')
# 指定redis的数据库
REdis_DB = os.getenv('REdis_DB', '0')
# 指定redis的密码
REdis_PASSWORD = os.getenv('REdis_PASSWORD', '12345678')
class Redis:
def __init__(self):
self.cli = None
def connect(self):
pool = ConnectionPool(host=REdis_HOST,
port=REdis_PORT,
db=REdis_DB,
password=REdis_PASSWORD)
return StrictRedis(connection_pool=pool)
def add_pv(self):
self.connection.incr('pv', )
def get_pv(self):
count = self.connection.get('pv')
return int(count)
@property
def connection(self):
if self.cli:
return self.cli
else:
self.cli = self.connect()
return self.cli
redis = Redis()
@app.route('/')
def index():
redis.add_pv()
return "<h1>Hello World, 本页已访问{}次。</h1>".format(redis.get_pv())
cd ~/docker/redis
# 获取官方提供的redis配置文件模板
wget http://download.redis.io/redis-stable/redis.conf
# 修改redis密码
echo "requirepass 12345678" >> redis.conf
docker run --restart=always --network host -d -it -v ~/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
redis容器启动完成后,在 ~/test/
目录下执行 python3 -m flask run
,打开Linux系统中的浏览器,输入127.0.0.1:5000
访问这个 web 应用的主页,多次刷新查看效果。
3. 小结
Docker官方镜像仓库 提供了众多高质量的镜像和使用文档,生态也非常活跃。这种简单的部署方式更接近是一种获取软件的方式,相信大家都有体会,在平时的开发测试中,个人的开发机上安装这些服务经常费时费力,到时寻找安装包,甚至可能还要编译源码,结果出现一些意想不到的问题。熟练掌握这种方法部署应用服务,可以快速且高效地获取一致的开发部署环境。