Docker部署nginx以及配置域名全過程
背景
docker 容器相關(guān)技術(shù)已經(jīng)成為了現(xiàn)在開發(fā)和運(yùn)維人員的熱門技術(shù)之一,docker就像一個(gè)集裝箱能夠?qū)⒏鞣N應(yīng)用放入到集裝箱里的盒子里進(jìn)行統(tǒng)一管理,優(yōu)點(diǎn)是: 方便、靈活、易遷移。
此文介紹的是怎么使用docker部署nginx。
1. 拉取nginx鏡像
docker pull nginx:latest
latest表示最新版的nginx, 拉取到最新版本的Nginx鏡像完畢后,我們就可以通過docker images來查看是否下載完畢:

2. 啟動(dòng)nginx
鏡像下載完畢后,我們可以就使用docker來啟動(dòng)一個(gè)nginx容器,啟動(dòng)命令如下:
docker run --name my-nginx -p 8080:80 -d nginx
參數(shù)解析:
–name: 給容器取一個(gè)別名,啟動(dòng)成功后會(huì)在NAMES列顯示。-p: 將服務(wù)器的8080端口映射到nginx容器的80端口。-d: 容器將會(huì)以后臺的形式來運(yùn)行。
啟動(dòng)成功后,我們可以通過docker ps命令來查看正在運(yùn)行的容器:

run一個(gè)容器后,我們可以通過Start和stop命令來重寫啟動(dòng)或停止容器, 后面帶上容器的id或者NAMES即可:

另外我們可以通過命令進(jìn)入到nginx的終端,查看nginx鏡像里的配置文件。
docker exec -it nginx bash
啟動(dòng)成功后,我們就可以訪問nginx了, 如果用的是8080端口,服務(wù)器用的是阿里云,那么先要去配置一下安全組:

將8080端口加入訪問的權(quán)限即可:

配置完畢后,再次訪問http://116.62.146.90:8080/:

3. 通過docker修改nginx配置
掛載配置文件
在這里我使用了默認(rèn)的nginx配置來啟動(dòng)容器, 接下來修改nginx.conf文件,這里需要我們在外部掛載一個(gè)配置文件nginx.conf來掛載容器里的nginx的配置文件,因?yàn)槲覀冎涝赿ocker里進(jìn)入到nginx容器時(shí),再去修改 /etc/nginx/nginx.conf文件是極其不方便的,想要在nginx容器外面去操作配置是極其不方便的,因此就有了掛載配置文件的方案。
首先在docker容器的外部新建一個(gè)/data/nginx/{conf,log,conf.d}, 其中conf目錄下面為nginx的配置文件,default.conf為nginx的默認(rèn)配置文件,這兩個(gè)文件的內(nèi)容可以先從docker容器里的nginx里拿出來,此路徑需要通過指令進(jìn)入到nginx容器的終端才能查看到, 另外不掛載的時(shí)候才能夠進(jìn)入到nginx容器的終端去查看路徑。
注: 外 掛時(shí)一定需要 nginx.conf和default.conf兩個(gè)文件才行,并且要保證配置內(nèi)容沒有出錯(cuò)。

nginx.conf:

default.conf:

以下這兩個(gè)配置文件的路徑是用docker run起來以后,我們可以在沒有指定掛載的時(shí)候,進(jìn)入到nginx容器終端里顯示出來的路徑。
| 文件名 | 在nginx容器里的路徑 |
|---|---|
| nginx.conf | /etc/nginx/conf |
| default.conf | /etc/nginx/conf.d/default.conf |
準(zhǔn)備好如上所需要的配置文件后,我們就可以通過如下命令啟動(dòng)nginx容器:
docker run --name my-nginx -p 80:80 \ -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /data/nginx/log:/var/log/nginx \ -v /data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \ -d nginx
參數(shù)解析:
-v: 表示的是將容器所需要的文件進(jìn)行掛載, 本例中是將nginx鏡像所在容器里的/etc/nginx/nginx.conf 文件掛載到 我們自定義的 /data/nginx/conf/nginx.conf 文件。-d: 容器以后臺的方式進(jìn)行運(yùn)行,關(guān)閉終端后也不停止。-p: 80:80 , 將nginx容器的80端口映射到Docker的80端口。
啟動(dòng)成功后,通過docker ps命令查看容器是否在運(yùn)行:

如果失敗了,那么用docker logs 加上返回的一串字母串查看失敗的日志。
重新加載配置文件
通過上述步驟,我可以將nginx的配置文件掛載到了docker容器外,然后我們只需要在外部修改 /data/nginx/conf/nginx.conf 文件即可, 修改好后需要重新啟動(dòng)一下容器。
docker restart my-nginx
如果在run容器出現(xiàn)容器已經(jīng)存在,那么可以通過以下指令刪除指定的容器, 后面接容器的id或者Name, 前提是要將運(yùn)行中的容器先暫停:
docker stop my-nginx docker rm my-nginx
4. 配置我的域名
接下來,我想把我剛申請的域名配置到nginx里,這樣就能夠起到保護(hù)ip地址的作用,這樣看起來更像是一個(gè)完整的網(wǎng)站。首先,剛通過阿里云申請的域名審批通過后,需要在域名控制臺下做下域名解析,解析完畢后,方可使用該域名,可以在windows環(huán)境下通過ping指令來確定是否解析成功,該域名是否可以直接訪問! 解析過程,添加阿里云服務(wù)器下的公網(wǎng)ip地址即可!

windows環(huán)境下看是否能夠Ping通:

發(fā)現(xiàn)可以ping通之后,我們就可以開始配置域名了! 修改nginx.conf文件, 我的域名是www.zhuzhu-bingbing.cn
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
client_max_body_size 1024m;
client_body_buffer_size 10m;
client_header_buffer_size 10m;
proxy_buffers 4 128k;
proxy_busy_buffers_size 128k;
server {
listen 80;
server_name www.zhuzhu-bingbing.cn;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}

訪問www.zhuzhu-bingbing.cn, 出現(xiàn)如下畫面表示域名生效:

總結(jié)
以上步驟為docker部署nginx應(yīng)用的完整流程,配置文件需要外 掛這點(diǎn)調(diào)試了蠻久!
這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker啟動(dòng)常用容器命令及配置詳細(xì)說明
文章介紹了Docker容器的運(yùn)行、進(jìn)入、查看和管理等相關(guān)命令,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-04-04
docker鏡像倉庫hub.docker.com無法訪問的解決方法
最近許多群友都詢問為什么無法訪問Docker鏡像倉庫,本文就來介紹一下docker鏡像倉庫hub.docker.com無法訪問的解決方法,感興趣的可以了解一下2023-08-08
docker-compose啟動(dòng)的容器一直處于restarting狀態(tài)的問題解決
本文主要介紹了docker-compose啟動(dòng)的容器一直處于restarting狀態(tài)的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
Docker?安裝Redis?無法使用配置文件設(shè)置密碼問題及解決方法
最近開發(fā)需要使用各種組件,如果都到開發(fā)機(jī)上安裝,會(huì)占用電腦資源較多,所以使用docker容器來安裝這些組件,這篇文章主要介紹了Docker安裝Redis無法使用配置文件設(shè)置密碼問題,需要的朋友可以參考下2023-08-08
docker容器通過ping直接運(yùn)行獲取公網(wǎng)IP操作
這篇文章主要介紹了docker容器通過ping直接運(yùn)行獲取公網(wǎng)IP操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解
這篇文章主要介紹了Deepin使用docker安裝mysql數(shù)據(jù)庫過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

