[精讚] [會員登入]
877

[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

你可能感興趣的文章

[Linux] 刪除last/lastb登出入記錄 linux shell的登出入記錄

[Centos7] 使用網路安裝 Centos7 使用網路來安裝Centos7,雖然這不是什麼新鮮事,但可以省你的磁碟空間或光碟片

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

[Centos8] 安裝phpMyAdmin Centos 8目前只能採用tarball安裝法

[Linux] 使用tarball安裝下載PERL的tar檔模組 在Linux下,perl下載的pm模組,不使用cpan的安裝方法

使用GPG檔案加解密 簡易的檔案加解密方式,可以讓你重要的資料包括文字檔加解密。

隨機好文

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

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

維修海棉拖把頭 這類型的海棉拖把很好用,可是這近發現海棉頭越來越不耐用,也許是錯覺,以往都能用個三四個月,現在二個月就差不多掉下來。 這

[Mysql/MariaDB] 查看資料庫所占空間 查看資料庫在磁碟中所占空間

[Javascript] 偵錯方式 (火狐中的javascript偵錯) javascript 並不是很容易偵錯(debug)的語言,但那是以前,現在有很多瀏覽器支持很多的工具,此文以火狐為例談談偵錯...