Dockerfile編寫製作centos7.7+php5.6+nginx鏡像

来源:https://www.cnblogs.com/aotudexiaowu/archive/2020/06/24/13186475.html
-Advertisement-
Play Games

1、新建一個dockerfile文件 touch test.Dockerfile 2、找一個centos基礎鏡像 可以去docker hub上尋找,鏈接:docker-hub 在搜索框搜索'centos',或者直接點擊docker-hub-centos。裡面有從centos 6 到最新的centos ...


1、新建一個dockerfile文件

touch test.Dockerfile

2、找一個centos基礎鏡像

 可以去docker hub上尋找,鏈接:docker-hub 在搜索框搜索'centos',或者直接點擊docker-hub-centos。裡面有從centos 6 到最新的centos 8 等各版本的基礎鏡像,此處我選擇版本:centos:7.7.1908,當然也可以選擇其它版本。

 所以,在test.Dockerfile第一行為:

FROM centos:7.7.1908

3、MAINTAINER 指定作者  (非必要)

MAINTAINER wu "471515***@qq.com"

4、使用RUN命令安裝php5.6

  因為我採用yum安裝,所在需要先配置和更新yum源,然後再進行php5.6安裝,。原本在centos的命令如下:

yum install -y epel-release
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-mysql php-odbc php-pdo php-mssql php-mysqli php-gd php-xml php-pear php-bcmath php-pecl-swoole php-pecl-redis php-pecl-mongo  --skip-broken

  其中yum後都加要-y,避免在執行dockerfile安裝時因等待確認而失敗。在dockerfile中為了避免太多層,可以使用‘&&’將多個使命合併。最終dockerfile中增加命令如下:

RUN yum install -y epel-release \
    && yum -y install wget \
    && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
    && rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm \
    && yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-mysql php-odbc php-pdo php-mssql php-mysqli php-gd php-xml php-pear php-bcmath php-pecl-swoole php-pecl-redis php-pecl-mongo  --skip-broken \

  註意:其中php擴展可以按需求增減。

5、安裝php-fpm

  原本在centos中執行的命令如下:

yum install -y --enablerepo=remi --enablerepo=remi-php56 php-fpm 

  則在dockerfile增加:

&& yum install -y --enablerepo=remi --enablerepo=remi-php56 php-fpm \

6、安裝nginx

 原本在centos中執行的命令如下:

yum install -y nginx

  則在dockerfile增加:

&& yum install -y nginx \

7、添加www用戶組和用戶並安裝vim

  原本在centos中執行的命令如下:

groupadd www
useradd -g www -s /sbin/nologin www
yum install vim -y

  則在dockerfile增加:

    && groupadd www \
    && useradd -g www -s /sbin/nologin www \
    && yum install vim -y

註意:每一行的 \ 是為了合併命令之後的換行,所以最後一行不需要 \ 。

8、修改nginx配置

  此處用COPY命令直接將配置好的nginx.conf複製到鏡像裡面:

COPY nginx.conf /etc/nginx/nginx.conf

  對於nginx.conf文件,增加了對php文件的解析:

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }

9、加入測試用的index.php文件

  此處用COPY命令直接將index.php文件複製到鏡像里相應的目錄:

COPY index.php /usr/share/nginx/html/index.php

  index.php文件中內容為:

<?php
phpinfo();

10、添加容器啟動腳本文件run.sh

  為了讓最終創建的容器在啟動時能啟動nginx和php-fpm服務,需要建一個run.sh,用於在啟動時執行,其中命令為:

#!/bin/bash

nginx
php-fpm
tail -f /dev/null

  其中最後一行的'tail -f /dev/null',是為了避免在CMD執行完這個命令腳本後主進程退出時將導致容器也退出,才加的阻塞操作,因為這個命令永遠都執行不完。然後在dockerfile文件中用COPY命令直接將run.sh文件複製到鏡像里相應的目錄:

COPY run.sh /mnt/run.sh

  特別註意:run.sh必須要有執行許可權!

11、開放80埠

EXPOSE 80

12、CMD命令執行run.sh

CMD ["/mnt/run.sh"]

13、使用docker build命令構建鏡像

  將上述步驟中建好的四個文件放在同一目錄下,然後使用命令構建:

  

sudo docker build -t centos7.7:v2 -f test.Dockerfile .

  等待幾分鐘,鏡像就構建好了。因為涉及到下載安裝過程,網路不好可能失敗,可以重新運行命令。

  

14、使用docker run創建一個容器並運行

sudo docker run -d --name test -p 8010:80 -it centos7.7:v2

  然後,在瀏覽器中訪問:http://127.0.0.1:8010/,即出現熟悉的頁面:  

  

 15、附錄:各文件中最終內容

  test.dockerfile文件內容如下:

FROM centos:7.7.1908
MAINTAINER wu "471515***@qq.com"

RUN yum install -y epel-release \
    && yum -y install wget \
    && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
    && rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm \
    && yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-mysql php-odbc php-pdo php-mssql php-mysqli php-gd php-xml php-pear php-bcmath php-pecl-swoole php-pecl-redis php-pecl-mongo  --skip-broken \
    && yum install -y --enablerepo=remi --enablerepo=remi-php56 php-fpm \
    && yum install -y nginx \
    && groupadd www \
    && useradd -g www -s /sbin/nologin www \
    && yum install vim -y
COPY nginx.conf /etc/nginx/nginx.conf
COPY index.php /usr/share/nginx/html/index.php
COPY run.sh /mnt/run.sh
EXPOSE 80
CMD ["/mnt/run.sh"]

  nginx.conf文件內容如下:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80;
        server_name  _;
        root         /usr/share/nginx/html;.
        include /etc/nginx/default.d/*.conf;
    
        location / {
        root   html;
        index  index.php index.html index.htm;
        }
    
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​ 白帽,即通過正常的手段對網站內部優化(包括網站標題,網站結構,網站代碼,網站內容,關鍵詞密度等)、網站外部的發佈與建設,提高網站關鍵詞在搜索引擎排名的一種seo技術;黑帽,即通過垃圾鏈接、隱藏網頁、橋頁、關鍵詞堆砌等方法,實現快速搜索引擎優化的目的。 網路安全,通常指電腦網路的安全,實際上也可 ...
  • 內部類(Inner Class),是 Java 中對類的一種定義方式,是嵌套類的一個分類,即非靜態嵌套類(Non-Static Nested Class)。內部類(非靜態嵌套類)分為成員內部類、局部內部類和匿名內部類三種。Java 編程語言允許一個類被定義在另一個類中,這樣的類就稱為嵌套類。嵌套類分... ...
  • ​ 程式員往往一心撲在編程技術上面,學習編程語言,演算法,網路,自己子領域相關的知識等等。這非常正確,也是作為coder的核心競爭力所在,姑且稱之為“硬技能”吧。 對於有一個程式員來說除了日常碼代碼之外,其實也需要很多編程之外的軟體能,非專業上面的技能可以更好的展現你的情商,與人合作的能力等。 以程式 ...
  • ​ Python是一種跨平臺的電腦程式設計語言。是一個高層次的結合瞭解釋性、編譯性、互動性和麵向對象的腳本語言。最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用於獨立的、大型項目的開發。 Python現如今已成為真正的萬金油語言,哪裡需要哪裡用,不管是做w ...
  • ​ 軟體測試是伴隨著軟體的產生而產生的。早期的軟體開發過程中軟體規模都很小、複雜程度低,軟體開發的過程混亂無序、相當隨意,測試的含義比較狹窄,開發人員將測試等同於“調試”,目的是糾正軟體中已經知道的故障,常常由開發人員自己完成這部分的工作。 對測試的投入極少,測試介入也晚,常常是等到形成代碼,產品已 ...
  • ​ 黃小斜寫了一年多的代碼,漸漸地代碼量也上來了,但是,代碼寫的多就是好嗎,簡單的數量堆積似乎並不能起到太好的效果,畢竟我們CRUD寫多了,也不怎麼需要架構設計,甚至連個設計模式都不怎麼需要用到。如何開始代碼精進之路,其實有很多的過來人早就已經給出了答案,今天就給大家推薦幾本幫你精進代碼的優質書籍, ...
  • 前言 ok,今天就有一個網友說預測說阿裡巴巴可能是要步入百度的後塵,3年到5年後阿裡巴巴就會像百度一樣沒落,未來互聯網的競爭將會是騰訊和位元組跳動的,然後引髮網友各種各樣的聲音和問題。 隨後確實有很多人都打了1,表示認同樓主的說法。 尤其是阿裡內部這位網友,那是挺實在的一小伙啊。打了幾個1,鬼知道他經 ...
  • 7.分散式框架dubbo的好處,不⽤dubbo可不可以。為什麼要使⽤分散式 8.七個垃圾回收器之間如何搭配使⽤ 9.接⼝限流⽅案 10.ConcurrentHashMap使⽤原理 11.解決map的併發問題⽅案 12.什麼是協程,以及實現要點 13.lru cache 使⽤hash ma... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...