docker部署Nginx項目dockerfile


首先將需要的文件拷貝至要創建dockerfile目錄中

 這邊已經編寫好nginx.conf配置文件,到時候直接build成鏡像,如下是我nginx的配置文件內容

安裝nginx.1.16.1版本,自定義版本

dockerfile內容如下

FROM centos

#創建項目所需目錄
RUN mkdir -p /www/ctm/xcy-project/yun-app
#創建這個目錄是為了指定安裝ningx路徑
RUN mkdir -p /www/server/nginx/conf

#安裝所需依賴
RUN yum -y install gcc pcre-devel zlib-devel openssl-devel make vim
#將nginx拷貝至軟件目錄下並解壓
ADD nginx-1.16.1.tar.gz /www/server
#將配置好的nginx配置文件從本地拷貝至鏡像中
COPY nginx.conf /www/server/nginx/conf

#編譯安裝nginx
RUN cd /www/server/nginx-1.16.1 && ./configure --prefix=/www/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module && make && make install

#刪除包目錄,安裝完成就用不上了
RUN rm -rf /www/server/nginx-1.16.1
#指定進入容器后的工作目錄
WORKDIR /www/server/nginx

#器運行時監聽的端口,這里我就不設置了,nginx配置文件中我設置的801,運行容器時候指定就行。
#EXPOSE 801

#添加環境變量
ENV PATH /www/server/nginx/sbin/:$PATH
#當啟動一個container時默認運行的命令,如果在啟動container時賦予了command的話,那么定義的CMD中的命令將不會被
執行,而會去執行command的命令
CMD /bin/sh -c 'nginx -g "daemon off;"'

將dockerfile文件build成一個我們所需的一個鏡像

docker build -f /www/ctm/data/dockerfile -t app/nginx .

查看是否已經構建完成

將鏡像啟動為一個容器

docker run -d --name yun-app -p 801:801
-v /www/sfs/logs/app-log:/www/server/nginx/logs
-v /www/ctm/xcy-project/yun-app:/www/ctm/xcy-project/yun-app app/nginx

解析

-d 啟動在后台運行

--name  指定項目名稱

-p 指定端口    801(外部訪問端口):801(容器映射出來的端口)

端口nginx默認是80,我nginx配置文件專門修改為801。

第一個-v 是指定nginx日志共享路徑

第二個-v 是指定項目目錄的路徑

app/nginx 是鏡像的名稱

已經啟動訪問測試。

ip:801

 

############彩蛋################

使用nginx -g daemon off啟動nginx容器的原因

背景知識: Docker 容器啟動時,默認會把容器內部第一個進程,也就是pid=1的程序,作為docker容器是否正在運行的依據,如果 docker 容器pid=1的進程掛了,那么docker容器便會直接退出。

原因: nginx默認是以后台模式啟動的,Docker未執行自定義的CMD之前,nginx的pid是1,執行到CMD之后,nginx就在后台運行,bash或sh腳本的pid變成了1。所以一旦執行完自定義CMD,nginx容器也就退出了。為了保持nginx的容器不退出,應該關閉nginx后台運行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM