您好,登錄后才能下訂單哦!
運(yùn)行環(huán)境: MAC
Docker 版本: Docker version 17.12.0-ce, build c97c6d6
一、啟動(dòng)Nginx 服務(wù)器
啟動(dòng)Nginx 服務(wù)器,并進(jìn)入模擬終端
docker run -p 8080:80 --name nginx_web -it nginx /bin/bash
二、了解Nginx 鏡像的配置文件位置
日志文件位置:/var/log/nginx
配置文件位置: /etc/nginx
資源存放的位置: /usr/share/nginx/html
上面的配置路徑是我電腦上的虛擬linux中地址,請(qǐng)各位讀者,也自己去看下自己的配置位置
三、修改Nginx 的默認(rèn)首頁(yè),測(cè)試是否可以運(yùn)行
重要提示: 對(duì)于不想折騰的同學(xué),可以直接從第四步來(lái)運(yùn)行
/usr/share/nginx/html echo "<h2>Hello Docker</h2>" > index.html
到這里有的朋友,可能會(huì)發(fā)現(xiàn),我訪問(wèn)localhost:8080 端口,第一次出現(xiàn)了Nginx 的歡迎界面,而第二次就出現(xiàn)了404 提示。
關(guān)于這個(gè)問(wèn)題,本文不展開(kāi)詳序,如果不明白的,可以參考:
1.docker運(yùn)行nginx為什么要使用 daemon off
2.docker容器運(yùn)行后退出,怎么才能一直運(yùn)行?
3.Docker run 命令的使用方法
Docker 執(zhí)行 docker run 之后,先在當(dāng)前操作系統(tǒng)的基礎(chǔ)上,虛擬化了一個(gè)精簡(jiǎn)版的linux(僅僅包含系統(tǒng)運(yùn)行的最精簡(jiǎn)功能),然后加載我們的Nginx鏡像。當(dāng)Nginx鏡像加載到我們的虛擬Linux環(huán)境中時(shí),相當(dāng)于在系統(tǒng)里執(zhí)行了一個(gè)腳本,而這個(gè)腳本就是Nginx。
由于默認(rèn)的Nginx 是不作為守護(hù)進(jìn)程運(yùn)行的。所以當(dāng)Docker內(nèi)監(jiān)聽(tīng)到80端口的請(qǐng)求后,完成之后,就退出了Nginx的進(jìn)程。該容器內(nèi)只有一個(gè)進(jìn)程,并且是非守護(hù)的,執(zhí)行完請(qǐng)求進(jìn)程就銷毀了。那么這個(gè)容器也就沒(méi)有存在的必要了,所以Docker 中這個(gè)服務(wù)也就停掉了。這也就是我們執(zhí)行 docker top 看不到當(dāng)前運(yùn)行的容器的原因。
作為暫時(shí)解決Nginx 只執(zhí)行一次就退出的問(wèn)題,我們可以進(jìn)入交互式終端,執(zhí)行 nginx & 讓nginx 作為守護(hù)進(jìn)程后臺(tái)運(yùn)行。
查看我們正在運(yùn)行的容器
roverliang$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果什么內(nèi)容都沒(méi)有,說(shuō)明當(dāng)前沒(méi)有正在運(yùn)行的容器。
查看已經(jīng)運(yùn)行結(jié)束的容器
roverliang$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5bff285f60b3 nginx "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago nginx_web
重新啟動(dòng)我們剛剛啟動(dòng)過(guò)的容器
docker start nginx_web
進(jìn)入到我們的容器內(nèi)部
docker attach nginx_web echo "<h2>Hello Docker</h2>" > /usr/share/nginx/html/index.html nginx &
然后 使用快捷鍵 control + Q 退出當(dāng)前的容器
之后我們?cè)跒g覽器再次訪問(wèn):http://localhost:8080/
折騰了這么久,終于看到我們期望的的內(nèi)容了。
Hello Docker
四、將前面Nginx Demo 變成一個(gè)可以玩的 Demo
先創(chuàng)建我們本機(jī)需要映射的文件夾
mkdir -p docker_study/log docker_study/etc docker_study/html
注意: 在自己的家目錄創(chuàng)建
復(fù)制我們docker中nginx 的配置文件
docker cp 65bc23f952db:/etc/nginx/ /Users/roverliang/docker_study/etc/
關(guān)閉掉我們的容器
docker stop nginx_web
刪除掉我們的練習(xí)的demo,我們重新來(lái)構(gòu)建一個(gè)可以用的。
docker rm nginx_web
將Nginx 鏡像和我們本機(jī)的目錄進(jìn)行映射,方便我們修改文件
docker run \ -p 8080:80 \ --name nginx_web \ -v /Users/roverliang/docker_study/log/:/var/log/nginx \ -v /Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf \ -v /Users/roverliang/docker_study/html/:/usr/share/nginx/html \ -it \ -d \ nginx \ /bin/bash \
運(yùn)行到這里,我們可能還是會(huì)發(fā)現(xiàn)訪問(wèn)http://localhost:8080/ 沒(méi)有內(nèi)容。但是不要急,解決問(wèn)題的過(guò)程,就是學(xué)習(xí)新東西的過(guò)程,繼續(xù)網(wǎng)上查資料,參考如下:
Docker運(yùn)行nginx
摘抄文中讓我豁然開(kāi)朗的一段:
我之前運(yùn)行的時(shí)候,一般都采用交互式:-i 保證容器的stdin開(kāi)啟-t 為容器生成一個(gè)tty終端,在命令的最后加一個(gè)/bin/bash來(lái)保證可以交互。但是實(shí)際上,nginx并沒(méi)有運(yùn)行,導(dǎo)致我以為容器的端口綁定不是持久化的。
接下來(lái)我們需要關(guān)掉,并刪除我們的容器,再按照如下的命令重啟一個(gè):
docker run \ -p 8080:80 \ --name nginx_web \ -v /Users/roverliang/docker_study/log/:/var/log/nginx \ -v /Users/roverliang/docker_study/etc/nginx.conf:/etc/nginx/nginx.conf \ -v /Users/roverliang/docker_study/html/:/usr/share/nginx/html \ -d \ nginx
五、修改Nginx 配置,解析一個(gè)網(wǎng)站
修改我們剛剛復(fù)制過(guò)來(lái)的nginx 配置
cd /Users/roverliang/docker_study/etc vim nginx.conf
在Http 模塊中添加如下配置:
server { listen 80; server_name www.test_nginx.com; index index.html; root /usr/share/nginx/html; }
然后回到宿主機(jī),綁定host 127.0.0.1 www.test_nginx.com
大功告成
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。