[精讚] [會員登入]
233

[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

你可能感興趣的文章

[CentOS6] 設定 sendmail Centos6上設定sendmail,基本上sendmail會設定多半是為了寄系統信和收垃圾信(喂!!?)

[bc] linux 的計算機 bc 設定小數位數、計算π、次方根 linux 的計算機 bc 設定小數位數、計算π、次方根

[Centos7] 安裝php套件管理程式Composer+ Codeignioter3 很多人在用的套件管理程式 Composer+ Codeignioter3+ 指定安裝目錄

[Linux] mongodb 初步--2/3 我使用mongo 的一些大小事:叢集

[Centos7] 安裝sphinx+php7 在centos7上安裝sphinx,在PHP7上運作正確

[Centos] opentftp + selinux 安裝及設定 Centos 安裝微型ftp伺服器:tftp伺服器

我有話要說

>>

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

訪客留言

[無留言]

隨機好文

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

[HP DL380G7] 生效啟動第3,4片網卡/開啟或關閉內建的網卡 HP DL380G7 預設第3,4片網卡裝完系統後找不到,難道是壞了?要怎麼辦?

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

Linux shell 的date表示法 linux下SHELL中的date表示法

[札記] 2016.7~12月札記 札記,只是札記