首先將需要的文件拷貝至要創建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后台運行。