docker自編譯nginx
Ⅰ 如何製作docker nginx鏡像
先去下載一個docker的nginx鏡像源,建議下國內的源的鏡像 ,下好以後用這個啟動就好了。
Ⅱ Docker 搭建 Nginx 集群
實現負載均衡其實並不難、只是很多人不敢去嘗試而已,簡單來說就是:
在nginx裡面配置一個upstream,然後把相關的伺服器ip都配置進去。然後採用輪詢的方案,然後在nginx裡面的配置項里,proxy-pass指向這個upstream,這樣就能實現負載均衡.
nginx的負載均衡有4種模式:
1)、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2)、weight
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。
3)、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
4)、fair , url_hash(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
docker pull nginx ( docker pull cloud.io/nginx 這個稍微快點 )
docker run -itd --name nginx1 -p 8080:80 nginx /bin/bash -- 主
docker run -itd --name nginx2 nginx /bin/bash
docker run -itd --name nginx3 nginx /bin/bash
docker ps 查看
docker network ls
docker nerwork inspect d530da7ebbd3
進入nginx1 (主)
docker exec -it d530da7ebbd3 /bin/bash
安裝 vim 編輯器 (如有其他、盡可隨意) --- 注意:nginx2、nginx3 均安裝 編輯器、下文不再贅述
1. apt update 2. apt install vim
cd /etc/nginx/
vim nginx.conf
進入nginx2
docker exec -it e59de010efff /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 後添加: From 172.17.0.3:80 即可
進入nginx3
docker exec -it 0f12240cb622 /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 後添加: From 172.17.0.4:80 即可
重啟三個nginx服務 service nginx restart
此時如果 docker容器會關閉、因此需要再次重啟
docker start d530da7ebbd3
docker start e59de010efff
docker start 0f12240cb622
測試結果
補充:
上述說到 負載均衡有4種模式、
配置分別如下:
輪詢模式:
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080;
}
weight 模式:
upstream webname {
server192.168.0.1:8080 weight=2;
server192.168.0.2:8080 weight=1;
}
ip_hash模式:
upstream webname {
ip_hash;
server192.168.0.1:8080;
server192.168.0.2:8080;
}
其他配置:
設置某一個節點為backup,那麼一般情況下所有請求都訪問server1,當server1掛掉或者忙的的時候才會訪問server2
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080 backup;
}
設置某個節點為down,那麼這個server不參與負載。
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080 down;
}
Ⅲ docker如何修改nginx配置
如果是掛載的配置文件,外面修改,然後重啟docker容器;
如果不是掛載的配置文件,docker exec -it 容器ID /bin/sh進入容器修改並重啟NGINX。
Ⅳ docker-compose快速啟動nginx
創建nginx目錄,目錄下創建docker-compose.yml文件如下:
nginx目錄下創建創建nginx.conf文件,根據實際情況配置,我這里寫一個示例:
在nginx目錄下創建build目錄,將前端靜態文件拷貝到下邊
在nginx目錄下執行如下命令啟動服務
啟動之後,nginx就可以正常使用了。
Ⅳ Docker中使用Nginx部署多應用
最近打算將系統中的應用全部用docker進行部署,能夠進行統一管理。
花費時間最多的問題是:
這兩種方式各有優勢各有痛點:
我最終還是選擇使用一個nginx容器代理所有應用,因為如果多個域名不能都使用80,443埠訪問確實很難受。
這篇文章包含了docker中很多元素,如果用的不對,也希望大家斧正。
步驟如下:
我之前已經准備好了兩個簡單的應用鏡像,訪問返回靜態頁面,啟動兩個應用。
創建一個appbridge用於容器之間的通信。
數據卷可以映射宿主機和容器中的目錄,可以方便配置,修改內容和數據持久化。也可以在運行容器 -v 參數自動創建數據卷,這里為了清晰就單獨拎出來。
test2應用相同方式創建。
因為需要配置https,先用certbot為域名生成證書和密鑰(步驟省略),拷貝證書和密鑰到數據卷ssl-certs-vol中。
修改nginx-vol數據卷中的nginx.conf文件,能夠映射到nginx容器的配置。
添加伺服器配置,這里配置了相同域名的三個埠的反向代理應用,應用地址可使用別名。
進入nginx容器,重新啟動nginx
瀏覽器訪問
Ⅵ 如何使用Dockerfile構建鏡像
你好,使用方法如下:
Dockerfile結構
dockerfile由4部分信息組成:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# Base image to use, this must be set as the first line
FROM ubuntu
# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user [email protected]
# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
CMD /usr/sbin/nginx
其中#表注釋,可以標注一些說明性的文字。
FROM關鍵字指定鏡像的來源,默認為DockerHub,也可以寫私有倉庫的鏡像,例如:localhost:5000/centos:6.7,如果本地已經存在指定的鏡像名稱,則會從本地緩存直接獲取。MAINTAINER 指定鏡像的作者,之後為鏡像操作執行RUN、ADD等,最後是容器啟動時發起的指令。
Dockerfile中的指令
FROM: 指定鏡像名稱,格式為FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04
MAINTAINER: 鏡像作者 ,格式為 MAINTAINER <name>
RUN:格式為 RUN <command> 或 RUN ["executable", "param1", "param2"]。
前者將在 shell 終端中運行命令,即 /bin/sh -c;後者則使用 exec 執行。指定使用其它終端可以通過第二種方式實現,例如 RUN ["/bin/bash", "-c", "echo hello"]。
每條 RUN 指令將在當前鏡像基礎上執行指定命令,並提交為新的鏡像。當命令較長時可以使用 \ 來換行。
CMD:支持三種格式
1.CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;
2.CMD command param1 param2 在 /bin/sh 中執行,提供給需要交互的應用;
3.CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數;
指定啟動容器時執行的命令,每個 Dockerfile 只能有一條 CMD 命令。如果指定了多條命令,只有最後一條會被執行。如果用戶啟動容器時候指定了運行的命令,則會覆蓋掉 CMD 指定的命令。
EXPOSE:格式為 EXPOSE <port> [<port>...]。
告訴 Docker 服務端容器暴露的埠號,供互聯系統使用。在啟動容器時需要通過 -P,Docker 主機會自動分配一個埠轉發到指定的埠。
ENV:格式為 ENV <key> <value>。 指定一個環境變數,會被後續 RUN 指令使用,並在容器運行時保持。這就對應程序語言中的變數定義,可在需要的時候引用。例如:
1
2
3
4
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
ADD:格式為 ADD <src> <dest>。
該命令將復制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目錄的一個相對路徑;也可以是一個 URL;還可以是一個 tar 文件(自動解壓為目錄)。
COPY:格式為 COPY <src> <dest>。
復制本地主機的 <src>(為 Dockerfile 所在目錄的相對路徑)到容器中的 <dest>。當使用本地目錄為源目錄時,推薦使用 COPY。
COPY和ADD的不同就是:ADD多了自動解壓和支持URL路徑的功能。
ENTRYPOINT:
兩種格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中執行)。
配置容器啟動後執行的命令,並且不可被 docker run 提供的參數覆蓋。
每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個起效。
CMD和ENTRYPOINT比較:兩個命令都是只能使用一次,並且都是在執行docker run指令時運行,如果有多個,只執行最後一條。
兩者的不同在於參數的傳遞方式,如果在Dockerfile中定義如下指令
1
CMD echo hello
或
1
ENTRYPOINT ["echo","hello"]
那麼在運行命令docker run containerId echo hello時,指定了CMD的輸入結果為world,可以看出Dockerfile中指定的命令被覆蓋了,而指定了ENTRYPOINT時,輸出結果為hello echo world,可以看出指定的命令被作為ENTRYPOINT指定指令的參數了。
VOLUME:格式為 VOLUME ["/data"]。創建一個可以從本地主機或其他容器掛載的掛載點,一般用來存放資料庫和需要保持的數據等。不過此屬性在Dockerfile中指定並沒有什麼意義,因為沒有辦法指定本地主機的目錄。如果需要指定掛載點可以在執行docker run命令時指定:
1
docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bash
USER:格式為 USER daemon。指定運行容器時的用戶名或 UID,後續的 RUN 也會使用指定用戶。
當服務不需要管理員許可權時,可以通過該命令指定運行用戶。並且可以在之前創建所需要的用戶,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要臨時獲取管理員許可權可以使用 gosu,而不推薦 sudo。
WORKDIR:格式為 WORKDIR /path/to/workdir。為後續的 RUN、CMD、ENTRYPOINT 指令配置工作目錄。可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑。例如
1
2
3
4
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
則最終路徑為 /a/b/c。
ONBUILD:格式為 ONBUILD [INSTRUCTION]。
配置當所創建的鏡像作為其它新創建鏡像的基礎鏡像時,所執行的操作指令。
例如,Dockerfile 使用如下的內容創建了鏡像 image-A。
1
2
3
4
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基於 image-A 創建新的鏡像時,新的Dockerfile中使用 FROM image-A指定基礎鏡像時,會自動執行ONBUILD 指令內容,等價於在後面添加了兩條指令。
1
2
3
4
5
FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
使用 ONBUILD 指令的鏡像,推薦在標簽中註明,例如 ruby:1.9-onbuild。
基於CentOS6.7並源碼安裝nginx
首先准備了nginx-1.9.9.tar.gz安裝包和CentOS6-Base-163.repo(163源),將這兩個文件放到同一目錄下,並在此目錄下創建名稱為Dockerfile的文件。之後在此文件中實現源替換、nginx編譯安裝、及一些依賴包的安裝,Dockerfile內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# this is a test ubuntu 12.04 image dockerfile
# Author:fengzheng
# Base image,this must be set as the first line
#localhost:5000/centos:6.7是我的私有倉庫的鏡像,可替換為centos:6.7(DockerHub中的鏡像)
FROM localhost:5000/centos:6.7
MAINTAINER fengzheng
# Commands to update the image
RUN mkdir /usr/nginx1.9.9
ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/
#RUN yum -y install tar
#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gz
RUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bak
ADD CentOS6-Base-163.repo /etc/yum.repos.d/
RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo \
&& yum clean all && yum makecache \
&& yum -y install gcc \
&& yum -y install yum install -y pcre-devel \
&& yum -y install zlib zlib-devel \
&& yum -y install openssl openssl--devel \
&& cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install
#如果設置daemon off; nginx無法啟動
#RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
# 啟動nginx 需進入/usr/local/nginx/sbin 執行./configure
CMD /bin/bash
最後執行命令"docker build -t nginx-centos:6.7 ."
其中.表示在當前目錄下搜索Dockerfile文件,-t參數指定鏡像名稱和tag。
Ⅶ docker 怎麼配置nginx 文件路徑
#docker pull nginx
#docker run -itd -p 80:80 nginx 啟動nginx
nginx默認目錄是/etc/nginx,如果要自定義,指定本地目錄
#docker run -itd -p 80:80 -v /usr/local/目錄名:/etc/nginx nginx
Ⅷ nginx docker怎麼配置
安裝Nginx可以選擇直接使用ubuntu的apt-get install nginx命令來安裝,這種安裝方式最簡單方便,但是Nginx的版本可能是比較老的版本,所以選擇編譯安裝的方式。
Ⅸ 開源Nginx可視化配置工具,快速搞定Nginx配置難題
《開源精選》是我們分享Github、Gitee等開源社區中優質項目的欄目,包括技術、學習、實用與各種有趣的內容。本期推薦的是一個Nginx界面配置工具——nginxWebUI。
nginxWebUI是一款圖形化管理nginx配置的工具, 可以使用網頁來快速配置nginx的各項功能, 包括http協議轉發、tcp協議轉發、反向代理、負載均衡、靜態html伺服器、ssl證書自動申請、續簽、配置等,配置好後可一建生成nginx.conf文件, 同時可控制nginx使用此文件進行啟動與重載,完成對nginx的圖形化控制閉環。
本項目是基於solon的web系統,資料庫使用h2, 因此伺服器上不需要安裝任何資料庫。
本系統通過Let's encrypt申請證書,使用acme.sh腳本進行自動化申請和續簽,開啟續簽的證書將在每天凌晨2點進行續簽,只有超過60天的證書才會進行續簽,只支持在linux下簽發證書。
添加tcp/ip轉發配置支持時, 一些低版本的nginx可能需要重新編譯,通過添加–with-stream參數指定安裝stream模塊才能使用,但在ubuntu 18.04下,官方軟體庫中的nginx已經帶有stream模塊,不需要重新編譯。本系統如果配置了tcp轉發項的話,會自動引入ngx_stream_mole.so的配置項,如果沒有開啟則不引入,最大限度優化ngnix配置文件。
打開 http://ip:8080 進入主頁。
登錄頁面,第一次打開會要求初始化管理員賬號。
進入系統後,可在管理員管理裡面添加修改管理員賬號。
在http參數配置中可以配置nginx的http項目,進行http轉發,默認會給出幾個常用配置,其他需要的配置可自由增刪改查,可以勾選開啟日誌跟蹤,生成日誌文件。
在TCP參數配置中可以配置nginx的steam項目參數,進行tcp轉發。
在反向代理中可配置nginx的反向代理即server項功能,可開啟ssl功能,可以直接從網頁上上傳pem文件和key文件,或者使用系統內申請的證書,可以直接開啟http轉跳https功能,也可開啟http2協議。
在負載均衡中可配置nginx的負載均衡即upstream項功能,在反向代理管理中可選擇代理目標為配置好的負載均衡。
在證書管理中可添加證書,並進行簽發和續簽,開啟定時續簽後,系統會自動續簽即將過期的證書。
備份文件管理,這里可以看到nginx.cnf的備份 歷史 版本,nginx出現錯誤時可以選擇回滾到某一個 歷史 版本。
最終生成conf文件,可在此進行進一步手動修改,確認修改無誤後,可覆蓋本機conf文件,並進行校驗和重啟,可以選擇生成單一nginx.conf文件還是按域名將各個配置文件分開放在conf.d下。
遠程伺服器管理,如果有多台nginx伺服器,可以都部署上nginxWebUI,然後登錄其中一台,在遠程管理中添加其他伺服器的ip和用戶名密碼,就可以在一台機器上管理所有的nginx伺服器了。
提供一鍵同步功能,可以將某一台伺服器的數據配置和證書文件同步到其他伺服器中。
本系統提供http介面調用,只要開 http://xxx.xxx.xxx.xxx:8080/doc.html 即可查看smat-doc介面頁面。
介面調用需要在header中添加token,其中token的獲取需要在管理員管理中,打開用戶的介面調用許可權,然後通過用戶名密碼調用獲取token介面,才能得到token,然後在knife4j的文檔管理中設置全局token。
jar安裝說明:
以Ubuntu操作系統為例:
1 安裝java運行環境和nginx
Ubuntu:
Centos:
Windows:
2 下載最新版發行包jar
有新版本只需要修改路徑中的版本即可。
3 啟動程序
docker安裝說明
本項目製作了docker鏡像,同時包含nginx和nginxWebUI在內,一體化管理與運行nginx。
1 安裝docker容器環境
ubuntu:
centos:
2 下載鏡像
3 啟動容器
—END—
開源協議:MulanPSL-1.0
開源地址:https://github.com/cym1102/nginxWebUI
Ⅹ Ubuntu 下使用 Docker 安裝 Nginx
docker pull nginx
將 nginx.conf 配置文件放在 /your/dir/conf/ 下。
將 default.conf 配置文件放在 /your/dir/conf/conf.d 下。
將容器 80 埠映射到主機 80 埠。