Docker 部署常用服務
經(jīng)過上面幾節(jié)的積累,我們對 Docker 各個方面都有了大致的了解,這一節(jié),我們將常用的 Redis,Nginx, Mysql 等服務部署到 Docker 上來。
1. 獲取 Docker 服務
Tips:這里部署時默認使用最新穩(wěn)定的官方鏡像版本,如有版本要求自行在鏡像名后標注
:tag
即可。
1.1 Redis
Redis 是一個使用 ANSI C 編寫的開源、支持網(wǎng)絡、基于內(nèi)存、可選持久性的鍵值對存儲數(shù)據(jù)庫。
# 使用 Docker 啟動 redis 服務,端口默認,使用host網(wǎng)絡模式保障性能。
docker run --restart=always --network host -d -it --name myredis redis
將 redis 數(shù)據(jù)保存到宿主機目錄:
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
Nginx 是異步框架的網(wǎng)頁服務器,也可以用作反向代理、負載平衡器和HTTP緩存:
# 使用 Docker 啟動 redis 服務,端口默認,使用host網(wǎng)絡模式保障性能。
# 使用自己的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
MySQL是一個開放源碼的關系數(shù)據(jù)庫管理系統(tǒng)。
# 使用 Docker 啟動 redis 服務,端口默認,使用host網(wǎng)絡模式保障性能。
# my-secret-pw 指定mysql的root用戶密碼
docker run --restart=always --network host -d -it --name mymysql -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
將mysql數(shù)據(jù)保存到宿主機目錄:
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
2. 實戰(zhàn):使用 flask 調(diào)用 redis 容器應用
接下來我們將通過一個flask web應用,實現(xiàn)主頁訪問計數(shù)功能,我們使用 redis 服務幫助我們實現(xiàn)計數(shù)統(tǒng)計功能。這個 redis 服務運行在我們的 Docker 容器中。
Tips: 這里使用
flask
只是想借助一個簡單的 web 框架來演示使用 docker 容器運行的 redis,不了解也沒有關系,這里只是一個小例子。
首先,我們在 CentOS 中安裝 Python3 和flask框架,以及 Python 的 redis 客戶端庫。
# 安裝python3
sudo dnf install -y python3
# 安裝flask與redis python客戶端
pip3 install redis flask --user
接下來,將下面的代碼保存到~/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的數(shù)據(jù)庫
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', 1)
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())
在 ~/docker/redis/
目錄下,配置 redis.conf 文件
cd ~/docker/redis
# 獲取官方提供的redis配置文件模板
wget http://download.redis.io/redis-stable/redis.conf
# 修改redis密碼
echo "requirepass 12345678" >> redis.conf
配置文件修改好后,用它來配置 Docker 的 redis 容器應用。
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/
目錄下執(zhí)行 python3 -m flask run
,打開Linux系統(tǒng)中的瀏覽器,輸入127.0.0.1:5000
訪問這個 web 應用的主頁,多次刷新查看效果。
3. 小結(jié)
Docker官方鏡像倉庫 提供了眾多高質(zhì)量的鏡像和使用文檔,生態(tài)也非?;钴S。這種簡單的部署方式更接近是一種獲取軟件的方式,相信大家都有體會,在平時的開發(fā)測試中,個人的開發(fā)機上安裝這些服務經(jīng)常費時費力,到時尋找安裝包,甚至可能還要編譯源碼,結(jié)果出現(xiàn)一些意想不到的問題。熟練掌握這種方法部署應用服務,可以快速且高效地獲取一致的開發(fā)部署環(huán)境。