前言
去年在學習docker,在看完菜鳥教程和第一本docker書后,一直想實戰用一下這個技術,多用用才能熟能生巧,真正體驗它的利弊。正好傅老板用docker搭完了wordpress,我也就手癢跟着搭建了一下(也就是現在的這個博客網站)。
此處記錄一下搭建過程。
搭建環境
- 阿里雲ECS
去年雙11買的,720/3年,1核1G1M香港服務器,centos 7.4
有個小插曲,阿里雲的工作人員還給我打電話,問我用的怎么樣。。阿里雲什么時候有這種回訪了。。。
- 域名
阿里雲購買即可,像我申請的 .top 域名更是便宜,喪心病狂只要2塊錢。。
- ssl證書
https用的證書,我是在騰訊雲免費申請的,地址為:騰訊雲證書管理,此處就不詳細描述申請過程了,很簡單的
- Docker
這里要注意,centos中不要直接使用yum install docker,yum中的是舊的docker版本,升級參考我的這篇博文:CentOS更新Docker至最新版本
- Docker Compose
compose原本是一個第三方公司寫的,用來在docker中定義和運行復雜應用的小工具,后來被docker收購了,正式用來替代最早的fig。
通過以下命令安裝:# 下載compose curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname > -s`-`uname -m` -o /usr/bin/docker-compose # 賦予可執行權限,確保compose可執行 chmod +x /usr/bin/docker-compose
添加一個docker network
網站需要占據80端口,顯然,我們的服務器不可能只有一個網站,所以部署一個nginx容器是必須的,讓這個nginx來監聽80以及443端口,再根據域名轉發到對應的網站容器。容器之間的通信是通過network的,所以我們需要先添加一個network:
docker network create nginx-proxy
compose部署WordPress和MySql容器
- 創建工作目錄,創建docker-compose.yml文件:
cd /usr
mkdir myblog && cd myblog
vim docker-compose.yml
- docker-compose.yml輸入以下內容:
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your-mysql-root-password # 在這里輸入你要設置的mysql密碼
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wp_site:/var/www/html # 定義卷后,compose down之類的操作不會導致你的文章等數據丟失
expose:
- 80
restart: always
environment:
VIRTUAL_HOST: www.thyiad.top,thyiad.top
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro # docker.sock是docker守護進程默認監聽的Unix域套接字,容器進程通過它與守護進程進行通信。以后添加新的站點時,nginx將會自動發現並重啟服務
- nginx_certs:/etc/nginx/certs:ro # nginx的證書目錄,:ro指定為只讀
volumes:
db_data:
wp_site:
nginx_certs:
networks:
default:
external:
name: nginx-proxy
添加ssl證書
# 列出所有的卷信息,查找到xxx_wp_certs(xxx是docker自動添加的)
docker volume ls
# 查詢出xxx_wp_certs的真實路徑,一般是在 /var/lib/docker/volumes/xxx_wp_certs/_data
docker volume inspect --format '{{ .Mountpoint }}' xxx_wp_certs
# 創建www.thyiad.top.key,並且把ssl證書的xxx.key內容復制粘貼進來
cd /var/lib/docker/volumes/xxx_wp_certs/_data && sudo vim www.thyiad.top.key
# 創建www.thyiad.top.crt,並且把ssl證書的xxx.crt內容復制粘貼進來
cd /var/lib/docker/volumes/xxx_wp_certs/_data && sudo vim www.thyiad.top.crt
nginx-proxy如果發現在certs文件夾中存在當前域名的.crt和.key文件,將自動轉為https協議
運行wordpress
docker-compose up -d
此時,我們的網站就可以訪問了,很簡單吧?
參考資料:
傅老板的博客
docker-compose
nginx-proxy