假設docker
已經安裝好了,如果沒有安裝,可以照著 5分鐘安裝docker教程
安裝一下。
一. 下載映象
預設下載最新版本,如果想指定對應版本,可以用冒號後加版本,像這樣mysql:5.7
:
docker pull mysql:5.7
docker pull wordpress
docker pull nginx
二. 啟動container例項
已經下載好了image,接下來啟動container,需要分別啟動mysql,wordpress,nginx。
1. 啟動mysql
因為wordpress是需要安裝資料庫的,這裡安裝mysql並且啟動:
docker container run -d \
--name wordpressdb \
-p 3306:3306 \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7
各個引數含義:
-d
: 指定容器以守護程式方式在後臺執行;
--name
: 指定容器名稱,此處我指定的是wordpressdb;
-env
環境引數,MYSQL_ROOT_PASSWORD設定root使用者的密碼
-p
: 指定主機與容器內部的埠號對映關係,
[宿主機埠號]:[容器內部埠],此處我使用了主機3306埠,對映容器3306埠;
mysql:5.7
是nginx的映象IMAGE ID前4位
這些引數中涉及了一些名詞,如果看不懂,建議去看看docker
的基本概念。簡單來說就是,docker技術通過image
這種模板
,生成contaienr
例項,下次還可以再生成一個contaienr
例項,image像是一個模板,可以多次使用。contaienr
例項可以看作小型的虛擬機器,多個虛擬機器在區域網裡面,需要將埠對映到宿主機上面,我們都知道直接訪問區域網的內網ip是不能訪問的,通過宿主機的公網ip:對映的埠即可訪問了。
2. 啟動wordpress
docker安裝wordpress,相比docker安裝mysql,這裡相比多了兩個引數,後面會解釋。如果安裝成功,通過docker ps
可以看到wordpress
的程式,瀏覽器輸入ip:8080,應該是可以在網頁安裝wordpress了。
docker run -d \
--name wordpress \
--link wordpressdb:mysql \
--volume "$PWD/wordpress":/var/www/html \
-p 8080:80 \
wordpress
--link
:關聯mysql容器,如果是使用非docker安裝的mysql,比如自己手動安裝的mysql,可以通過引數--env
指定資料庫連線:
-e WORDPRESS_DB_HOST=192.168.80.129:3306 \
-e WORDPRESS_DB_USESR=root \
-e WORDPRESS_DB_PASSWORD=123456
--volume
:將容器的/var/www/html
對映到當前目錄下,這樣直接操作當前目錄,即可操作容器目錄,否則還得進去容器操作,我們都知道容器是一個閹割版的小型虛擬機器,像vim
這種常用命令預設是沒有的;
注意:wordpress容器預設開的是80埠,這裡將容器的80
埠對映到宿主機的8080
埠,為什麼不也對映到80埠呢,因為後面要安裝nginx
,nginx一般要監聽80埠,雲服務商一般配置域名:ikeguang.com繫結雲主機的80埠,所以最後nginx只能由nginx佔用宿主機的80埠,避免不必要的麻煩。
3. 啟動nginx
如果上面wordpress安裝好了,網站可以通過ip地址正常訪問,釋出文章了,可以考慮繫結域名了,加個nginx進行反向代理。
1). 配置http訪問:
nginx配置
http訪問的時候,預設一個server監聽80埠即可;如果配置https,需要加個server,監聽443埠,這裡先把http訪問配置好再說,貼出了我的配置:
include /etc/nginx/conf.d/*.conf;
server{
listen 80;
server_name ikeguang.com www.ikeguang.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主機ip:8080;
}
}
這裡http://宿主機ip:8080
,因為前面我們的wordpress對映宿主機的埠是8080,這裡nginx代理宿主機8080埠,也就是說你訪問80埠(nginx),相當於代理訪問了8080埠(wordpress),並且雲服務商配置的域名也是繫結80埠,這樣訪問域名,就訪問了8080埠的wordpress了,就能訪問網站了。
說明:因我wordpress啟動埠不是80,需要新增配置:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
啟動nginx容器
既然nginx.conf配置好了,接下來啟動nginx容器:
docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx
這裡需要注意:
- 這裡將容器的目錄
/etc/nginx
對映,需要先通過docker cp
命令複製一份完整nginx的目錄到宿主機,然後修改檔案,再執行上面docker run
命令。資料夾對映的時候,資料夾裡面的所有檔案應該是一樣的,檔案內容可以不一樣。
經過上面的配置,應該是可以通過瀏覽器輸入域名:ikeguang.com訪問網站了。
2). 配置https訪問:
經過前面的配置,通過域名應該可以訪問網站了,接下來配置https:
nginx.conf配置:
include /etc/nginx/conf.d/*.conf;
server {
#監聽443埠
listen 443 ssl;
#對應的域名
server_name ikeguang.com www.ikeguang.com;
ssl_certificate ssl/1_ikeguang.com_bundle.crt;
ssl_certificate_key ssl/2_ikeguang.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主機ip:8080;
}
}
server{
listen 80;
server_name ikeguang.com www.ikeguang.com;
#把http的域名請求轉成https
rewrite ^(.*)$ https://$host$1; #將所有HTTP請求通過rewrite指令重定向到HTTPS。
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://宿主機ip:8080;
}
}
把前面啟動http的nginx容器刪除,配置好ssl證照,再次啟動,需要啟動80埠和443埠。
docker run -d -p 80:80 -p 443:443 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx
-p 443:443
,如果配置ssl,才需要這個引數,開始去掉,這裡先把域名繫結成功,http可以訪問了,再進行第二步配置https訪問,ssl證照可以在雲服務商那裡申請免費的,然後按照幫助文件安裝即可,沒啥坑。