Docker安裝Nginx環境

Docker安裝Nginx環境

安裝Nginx能夠選擇直接使用ubuntu的apt-get install nginx命令來安裝,這種安裝方式最簡單方便,可是Nginx的版本多是比較老的版本,因此這裏我選擇編譯安裝的方式。html

Nginx須要依賴下面3個包nginx

  1. gzip 模塊須要 zlib 庫 ( 下載: http://www.zlib.net/ ) zlib-1.2.8.tar.gz
  2. rewrite 模塊須要 pcre 庫 ( 下載: http://www.pcre.org/ ) pcre-8.37.tar.gz
  3. ssl 功能須要 openssl 庫 ( 下載: http://www.openssl.org/ ) openssl-1.0.1q.tar.gz

編譯方式安裝Nginxgit

# 下載nginx安裝依賴的包
$ wget http://zlib.net/zlib-1.2.8.tar.gz
$ wget http://www.openssl.org/source/openssl-1.0.1q.tar.gz
$ wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz

# nginx-1.8.0,pcre-8.37,zlib-1.2.8,openssl-1.0.1q這幾個解壓的文件夾是放在/temp文件夾下,nginx按照的目錄是/software/nginx-1.8.0
$ cd /temp/nginx-1.8.0/
$ sudo ./configure --sbin-path=/software/nginx-1.8.0/nginx --conf-path=/software/nginx-1.8.0/nginx.conf --pid-path=/software/nginx-1.8.0/nginx.pid --with-http_ssl_module --with-pcre=/temp/pcre-8.37 --with-zlib=/temp/zlib-1.2.8 --with-openssl=/temp/openssl-1.0.1q
$ sudo make
$ sudo make install

# 檢查80端口是否被佔用
$ netstat -ano|grep 80

# 啓動nginx
$ cd /software/nginx-1.8.0/
$ sudo ./nginx

# 不指定配置文件地址
$ cd /software/nginx-1.8.0
$ ./nginx

# 指定配置文件地址
$ cd /software/nginx-1.8.0
$ ./nginx -c /software/nginx-1.8.0/nginx.conf

# 中止服務
$ sudo kill 'cat /software/nginx-1.8.0/nginx.pid'

# 檢測配置文件
$ cd /software/nginx-1.8.0
$ ./nginx -t

# 從新加載配置文件(不中止服務)
$ cd /software/nginx-1.8.0
$ ./nginx -s reload
  •  

編譯安裝Nginx可能會遇到的問題和解決方法github

# 編譯安裝Nginx的時候須要指定相關參數,不然會遇到下面的問題
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

# Nginx編譯參數
–prefix                         #nginx安裝目錄,默認在/usr/local/nginx
–pid-path                       #pid問件位置,默認在logs目錄
–lock-path                      #lock問件位置,默認在logs目錄
–with-http_ssl_module           #開啓HTTP SSL模塊,以支持HTTPS請求。
–with-http_dav_module           #開啓WebDAV擴展動做模塊,可爲文件和目錄指定權限
–with-http_flv_module           #支持對FLV文件的拖動播放
–with-http_realip_module        #支持顯示真實來源IP地址
–with-http_gzip_static_module   #預壓縮文件傳前檢查,防止文件被重複壓縮
–with-http_stub_status_module   #取得一些nginx的運行狀態
–with-mail                      #容許POP3/IMAP4/SMTP代理模塊
–with-mail_ssl_module           #容許POP3/IMAP/SMTP可使用SSL/TLS
–with-pcre=../pcre-8.11         #注意是未安裝的pcre路徑
–with-zlib=../zlib-1.2.5        #注意是未安裝的zlib路徑
–with-debug                     #容許調試日誌
–http-client-body-temp-path     #客戶端請求臨時文件路徑
–http-proxy-temp-path           #設置http proxy臨時文件路徑
–http-fastcgi-temp-path         #設置http fastcgi臨時文件路徑
–http-uwsgi-temp-path=/var/tmp/nginx/uwsgi #設置uwsgi 臨時文件路徑
–http-scgi-temp-path=/var/tmp/nginx/scgi #設置scgi 臨時文件路徑


# 我用pcre2替代了pcre會遇到以下的問題,最後仍是換成pcre
出現了錯誤:src/core/ngx_regex.h:15:18: fatal error: pcre.h: No such file or directory
 #include <pcre.h>
                  ^
compilation terminated.
make[1]: *** [objs/src/core/nginx.o] Error 1
make[1]: Leaving directory `/home/ben/dev/nginx-1.8.0'
make: *** [build] Error 2


# 若是遇到下面的問題最好升級一下gcc
$ sudo rm -rf /var/lib/apt/lists/*
$ apt-get update

configure: error: You need a C++ compiler for C++ support.
make[1]: *** [/home/ben/dev/pcre-8.37/Makefile] Error 1
make[1]: Leaving directory `/home/ben/dev/nginx-1.8.0'
make: *** [build] Error 2
  •  

Dockerfile文件docker

############################################
# version : birdben/nginx:v1
# desc : 當前版本安裝的nginx
############################################
# 設置繼承自咱們建立的 tools 鏡像
FROM birdben/tools:v1

# 下面是一些建立者的基本信息
MAINTAINER birdben (191654006@163.com)

# 設置環境變量,全部操做都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

# 添加 supervisord 的配置文件,並複製配置文件到對應目錄下面。(supervisord.conf文件和Dockerfile文件在同一路徑)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 安裝升級gcc
RUN sudo rm -rf /var/lib/apt/lists/*
RUN sudo apt-get update

RUN sudo apt-get -y install \
build-essential

RUN sudo mkdir -p /software/temp
RUN wget http://nginx.org/download/nginx-1.8.0.tar.gz && tar -zxvf nginx-1.8.0.tar.gz -C /software/temp
RUN wget http://zlib.net/zlib-1.2.8.tar.gz && tar -zxvf zlib-1.2.8.tar.gz -C /software/temp
RUN wget http://www.openssl.org/source/openssl-1.0.1q.tar.gz && tar -zxvf openssl-1.0.1q.tar.gz -C /software/temp
RUN wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz && tar -zxvf pcre-8.37.tar.gz -C /software/temp
RUN cd /software/temp/nginx-1.8.0 && sudo ./configure --sbin-path=/software/nginx-1.8.0/nginx --conf-path=/software/nginx-1.8.0/nginx.conf --pid-path=/software/nginx-1.8.0/nginx.pid --with-http_ssl_module --with-pcre=/software/temp/pcre-8.37 --with-zlib=/software/temp/zlib-1.2.8 --with-openssl=/software/temp/openssl-1.0.1q && sudo make && sudo make install

# 設置nginx是非daemon啓動
RUN echo 'daemon off;' >> /software/nginx-1.8.0/nginx.conf
RUN echo 'master_process off;' >> /software/nginx-1.8.0/nginx.conf
RUN echo 'error_log  logs/error.log;' >> /software/nginx-1.8.0/nginx.conf

# 設置 NGINX 的環境變量,若讀者有其餘的環境變量須要設置,也能夠在這裏添加。
ENV NGINX_HOME /software/nginx-1.8.0

# 容器須要開放Nginx 80端口
EXPOSE 80

# 執行run.sh文件
# CMD ["/run.sh"]
# 執行supervisord來同時執行多個命令,使用 supervisord 的可執行路徑啓動服務。
CMD ["/usr/bin/supervisord"]
  •  

Dockerfile源文件連接:ubuntu

https://github.com/birdben/birdDocker/blob/master/nginx/Dockerfile瀏覽器

注意ssh

# 編譯安裝Nginx方式構建Docker鏡像遇到幾個比較坑的問題
1. supervisor沒法啓動Nginx,必須設置nginx是非daemon啓動,這個問題以前安裝ES的時候已經遇到過了,由於沒有注意仍是被這個問題困擾了一段時間。Nginx設置非daemon啓動須要在nginx.conf配置文件中設置daemon false便可。
參考文章:
http://comments.gmane.org/gmane.comp.sysutils.supervisor.general/1233
http://nginx.org/en/docs/ngx_core_module.html#daemon
http://serverfault.com/questions/647357/running-and-monitoring-nginx-with-supervisord
http://www.v2ex.com/t/123152

2. 編譯安裝Nginx時,老是提示lib-dev64相對的版本不匹配,即便執行apt-get -y install build-essential安裝gcc也是如此,最終發現是由於以前繼承的tools鏡像在安裝ssh時有改過ubuntu的sourcelist文件,直接繼承ubuntu 14.04的鏡像就不會有lib-dev64版本不匹配的問題。
參考文章:
http://www.oschina.net/question/220489_160699
http://www.cnblogs.com/linxiong945/p/4180565.html
http://blog.csdn.net/xhz1234/article/details/37044531
  •  

Supervisor.confui

# 配置文件包含目錄和進程
# 第一段 supervsord 配置軟件自己,使用 nodaemon 參數來運行。
# 第二段包含要控制的 2 個服務。每一段包含一個服務的目錄和啓動這個服務的命令。

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:nginx]
command=/software/nginx-1.8.0/nginx -c /software/nginx-1.8.0/nginx.conf
  •  

控制檯終端spa

# 構建鏡像
docker build -t="birdben/nginx:v1" .
# 執行已經構件好的鏡像
docker run -p 9999:22 -p 8888:80 -t -i birdben/nginx:v1
  •  

瀏覽器訪問

http://10.211.55.4:8888/
  •  

參考文章

相關文章
相關標籤/搜索