iT邦幫忙

0

【Docker】02 使用CentOS系統安裝Apache+PHP+MySQL

  • 分享至 

  • xImage
  •  

1.下載centos的印像檔
開啟 Windows cmd 視窗
docker pull centos
https://ithelp.ithome.com.tw/upload/images/20220412/201480988sB8iNulba.png

2. 建立容器
假設命名為 mycentos
docker run -d -p 50022:22 -p 50080:80 -p 53306:3306 --privileged --name mycentos centos /usr/sbin/init
為了可以執行systemd須加上--privileged
https://ithelp.ithome.com.tw/upload/images/20220412/201480987qSOWng0dO.jpg

可以看到剛剛建立的 mycentos
https://ithelp.ithome.com.tw/upload/images/20220412/20148098ntOdLS6yD6.jpg

檢查 port
使用docker介面
https://ithelp.ithome.com.tw/upload/images/20220412/20148098unax5z5wN3.jpg

或是執行指令
docker port mycentos
https://ithelp.ithome.com.tw/upload/images/20220412/20148098F8Ya9VwfL5.jpg

查看IP位址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mycentos
https://ithelp.ithome.com.tw/upload/images/20220412/201480986nYYstV5XC.jpg

3. 更新環境
執行 bash
docker exec -it mycentos bash
接著會進入容器

更新 repo
一開始執行 yum 會發生錯誤。要更新 repo
修改 mirrorlist
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
修改 baseurl
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

設定語系
下載:dnf install -y glibc-langpack-en
設定:localectl set-locale LANG=en_US.UTF-8

安裝 service 功能
dnf install -y initscripts

5. 安裝 php 8.1
此時 centos 的 php 套件還是 7.x,使用 remi 資源庫。以下指令在安裝 php 的時候會自動安裝 httpd。
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf -y install yum-utils
dnf module reset php
dnf module install php:remi-8.1 -y
dnf install php -y
dnf -y install php-{cli,fpm,mysqlnd,zip,devel,gd,mbstring,curl,xml,json}
來源 https://computingforgeeks.com/how-to-install-php-8-on-centos-linux/

啟動服務
service php-fpm start
service httpd restart

開啟首頁
https://ithelp.ithome.com.tw/upload/images/20220412/20148098ZV050XLtGF.png

編輯 phpinfo.php 當測試頁
vi /var/www/html/phpinfo.php

https://ithelp.ithome.com.tw/upload/images/20220412/20148098Kdq7jyp4jq.png

開機自動啟動
chkconfig php-fpm on
chkconfig httpd on

6. 安裝資料庫
dnf install -y mysql mysql-server
chkconfig mysqld on
service mysqld start
mysql -u root -p

讓Host資料庫工具可以連線mysql
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

讓container自己內部的網頁可以連線mysql
mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

注意 % 跟 localhost 的不同。

資料庫連線工具
https://ithelp.ithome.com.tw/upload/images/20220412/20148098cR2bP9VTsl.jpg

https://ithelp.ithome.com.tw/upload/images/20220412/20148098tTiM6DQLar.jpg

建一個資料庫叫 test。有時候可能裝好後就存在test。編碼隨便選,測試而已。
https://ithelp.ithome.com.tw/upload/images/20220412/20148098vyeBuTquXT.jpg

編輯網頁做資料庫測試
vi /var/www/html/mysql.php

<?php
//開啟錯誤訊息
ini_set("display_errors", "On");
error_reporting(E_ALL ^E_NOTICE ^E_DEPRECATED);
//連線資訊
define('DB_DATABASE','test');
define('DB_USERNAME','root');
define('DB_PASSWORD','123456');
define('DB_HOSTNAME','localhost');
define('DB_TYPE','mysql');
$dsn = DB_TYPE.':host='.DB_HOSTNAME.';dbname='.DB_DATABASE;
$dbh = new PDO($dsn, DB_USERNAME, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//用mysql抓時間
$sql = "SELECT NOW();";
$row = $dbh->query($sql)->fetch(PDO::FETCH_ASSOC);
echo "<pre>", print_r($row, 1), "</pre>";

成功顯示
https://ithelp.ithome.com.tw/upload/images/20220412/20148098uoI8UqQsvF.jpg

如果發現無法連線,試著重設root密碼
mysql_secure_installation


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言