[精讚] [會員登入]
207

[Redhat Linux9] 安裝docker+ docker compose+ apache+ maraidb+ phpmyadmin+ php7

Rocky Linux(Centos9) 下安裝docker及docker compose

分享此文連結 //n.sfs.tw/16374

分享連結 [Redhat Linux9] 安裝docker+ docker compose+ apache+ maraidb+ phpmyadmin+ php7@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-06-07 01:37:58 最後編修
2024-03-15 11:54:10 By 張○○
 

自動目錄

這次的任務是在Red Hat Enterprise Linux release 9.3 (Plow) 裡安裝docker加上以下套件,而不使用redhat原生的podman。

REDHAT9的諸多分枝版本都大同小異。

安裝 Docker及 docker compose

OS

Linux 5.14.0-362.24.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Feb 15 07:18:13 EST 2024 x86_64 x86_64 x86_64 GNU/Linux
Red Hat Enterprise Linux release 9.3 (Plow)
 

安裝

 # dnf install -y yum-utils
 # dnf config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
 # dnf install docker-ce docker-ce-cli

查看版本

 # docker compose version
Docker Compose version v2.24.7

開機啟動

# systemctl enable --now docker

 

docker compose file

建立 docker-compose.yml

version: '3.8'

services:
  apache:
    image: php:7.4-apache
    container_name: apache
    restart: always
    ports:
      - 80:80
    volumes:
      - ../public_html:/var/www/html/

  db:
    image: mariadb:10.11
    restart: always
    container_name: mysql
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD="yourpassword"

上面建立兩個容器,分別是apache和db,其中apache這個容器還包含了php7.4,版本以去dockerhub尋找適合的版本。

例如php,到dockerhub 搜尋php,點車Tags的頁籤,下面會出現很多頁

你可以在 Filter Tags中輸入想要篩檢的關鍵字,例如這次我想用7.x版的php,因此輸入7.進行篩選。

這次使用7.4-apache的版本,只要把tag的標題打入即可。

設定完畢後重新啟動docker compose,在 docker-compose.yml 所在的位置執行:

# docker compose up -d

這個動作會在目錄下建立volume中設定的目錄 public_html/

再把你的php程式寫在這即可。

以上的ports設置中,80:80 代表 <os對外的埠號>:<container服務的ports號>

ports:
      - 80:80

如果不開放給os以外,只給container之間或os對container連線的話,只需要寫一個即可,例如

ports:
      - 3306

加入設定檔及SSL

上面的apache中的設定檔是在container中,可以將他指定到外部並進行設置,因此在volume中加入下面三行

      - ./conf/000-default.conf:/etc/apache2/sites-available/000-default.conf
      - ./conf/apache2.conf:/etc/apache2/apache2.conf
      - ./conf/php.ini:/usr/local/etc/php/php.ini

這時 apache服務的設定看起來是這樣的

  apache:
    image: php:7.4-apache
    container_name: apache
    restart: always
    ports:
      - 80:80
    volumes:
      - ../public_html:/var/www/html/
      - ./conf/000-default.conf:/etc/apache2/sites-available/000-default.conf
      - ./conf/apache2.conf:/etc/apache2/apache2.conf
      - ./conf/php.ini:/usr/local/etc/php/php.ini

分別把三個檔案移到os來,但是原始的設定檔去哪取得?

可以在container執行後,將他拷背出來。

在 docker-compose.yml 所在的位置執行:

# mkdir conf

# docker cp apache:/etc/apache2/sites-available/000-default.conf conf/

# docker cp apache:/etc/apache2/apache2.conf conf/

# docker cp apache:/usr/local/etc/php/php.ini conf/

然後重新啟動docker compose

# docker compose down

# docker compose up -d

如果需要ssl的話,加入3個volume:

- ./conf/default-ssl.conf:/etc/apache2/sites-enabled/default-ssl.conf  <== 網站有ssl時的設定檔
- ./conf/fullchain.crt:/etc/ssl/certs/server.crt  <==  ssl公鑰
- ./conf/priv.key:/etc/ssl/private/private.key  <== ssl私鑰

並把設定檔如前面說明的方式拷背出來

# docker cp apache:/etc/apache2/sites-enabled/default-ssl.conf conf/

公私鑰檔fullchain.crt, priv.key的話就放在指定的目錄中,此例放到 conf 中。

這時 apache服務的設定看起來是這樣的:

  apache:
    image: php:7.4-apache
    container_name: apache
    restart: always
    ports:
      - 80:80
    volumes:
      - ../public_html:/var/www/html/
      - ./conf/000-default.conf:/etc/apache2/sites-available/000-default.conf
      - ./conf/apache2.conf:/etc/apache2/apache2.conf
      - ./conf/php.ini:/usr/local/etc/php/php.ini
      - ./conf/default-ssl.conf:/etc/apache2/sites-enabled/default-ssl.conf
      - ./conf/fullchain.crt:/etc/ssl/certs/server.crt
      - ./conf/priv.key:/etc/ssl/private/private.key

 

安裝phpmyadmin

在docker-compose.yml加下以下內容

  phpmyadmin:
    image: phpmyadmin
    restart: always
    container_name: phpmyadm
    volumes:
      - ./conf/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
      - ./conf/apache2.conf:/etc/apache2/apache2.conf
    environment:
      - PMA_HOST=db
      - UPLOAD_LIMIT=100M
      - MEMORY_LIMIT=256M
      - MAX_EXECUTION_TIME=300

並在apache的設定檔 000-default.conf中加入以下內容

<VirtualHost *:80>
  ServerName yourdomain.exmaple.com
  <Location /phpMyAdm>
     ProxyPass "http://phpmyadmin/"
     ProxyPassReverse "http://phpmyadmin/"
     Order deny,allow
     Deny from All
     Allow from 192.168.1.0/24
     <限定存取的ip範圍>
     AllowMethods GET POST
  </Location>
</VirtualHost>

這樣打入網址yourdomain.exmaple.com就能使用你的phpmyadmin

 

 

結論

使用 docker 來架設伺服器是非常方便的事,只要熟析的話。

 

 

參考資料

[1] http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/

[2] https://blogs.slat.org/blog/otakupapa/42

[3] https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/#fastcgi-params

[4] https://www.cnblogs.com/xiewenming/p/8109292.html

[5] https://www.nginx.com/resources/wiki/start/topics/examples/full/

[6] https://imququ.com/post/my-nginx-conf-for-wpo.html

 

END

你可能感興趣的文章

[Centos7 8] postfix+DKIM 設定 信件總是被退?希望別的mail server相信我寄出的信?那麼你可以設定dkim。

[Docker] IPv6+nginx+php 讓docker中的容器支援ipv6,讀取到外部ipv6 docker中的容器要如何讀取到來源的ip6?這裡眉角很多。

[APACHE] PHP<5.5及 PHP>=5.5 安裝APC php5.5版後的apc只能手動安裝,此文包含php<5.5及php>=5.5兩種安裝方法

[CentOS 8] 無法使用: No URLs in mirrorlist error Centos8 沒辦法使用yum安裝軟體的解決方法

EXCEL+phpPgAdmin 使用phpPgAdmin 匯出資料 直接使用phpPgAmin下載資料的方法

[Centos7] 新的防火牆firewalld Centos7新的防火牆firewalld 和前面的iptables有很大的不同

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

HP SAS硬碟leds燈號說明 HP SAS硬碟leds燈號(hp g7/g6系統適用)說明

「許功蓋」的字以及源由 有玩過電腦一段時間的人,都聽過這個人(有一天我才發現7年級的竟然都不認識這個

此一時彼一時 我是不是易怒的人,其實我也不知道,總之我常會失控,不知道自己在幹嘛。這近生活過得浮浮的,不是很踏實,總會想太多,我甚至會

[AS3] 變數型態 基本類型宣告 as3 有下列幾種基本類型:string, int, number, object, boolean, n

銷售的困難點--庫存 銷售時,商人加上自己的利潤和風險,作為商品的售價,進貨面臨的問題會是什麼?