這是練習用的,所以沒有使用 Docker Hub 上的 WordPress 鏡像,也沒有用 alpine ,因為還不熟悉
base image 是使用CentOS 8,所以整個image很肥大XD,所以不建議實際拿來用
Dockerfile 內是這樣寫

# Use CentOS as the base image
FROM centos
# Add author`s name
LABEL maintainer="Qoo"
# Add the command to run at the start of container
WORKDIR /tmp
COPY wordpress.sh .
COPY run.sh .
RUN chmod +x wordpress.sh && ./wordpress.sh
EXPOSE 80
CMD ["/tmp/run.sh"]

其中wordpress.sh 是自己撰寫的腳本,大略就是更新CentOS,裝一些必須的套件,再安裝Nginx、PHP-FPM、WordPress。MariaDB使用外部Container

#!/bin/bash
# 建立基本NGINX PHP PHP-FPM 環境
dnf install -y epel-release wget
dnf update -y
dnf install -y http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module enable -y php:remi-7.4
dnf install -y php nginx php-opcache php-cli php-gd php-curl php-ldap php-zip php-fileinfo php-pear php-fpm php-bcmath php-dom php-mbstring php-mysqlnd php-json php-mcrypt php-imagick 

# 設定PHP-FPM
sed -i 's|user\ =\ apache|user\ =\ nginx|g' /etc/php-fpm.d/www.conf
sed -i 's|group\ =\ apache|group\ =\ nginx|g' /etc/php-fpm.d/www.conf
sed -i 's|listen\ =\ /run/php-fpm/www.sock|listen\ =\ 127.0.0.1:9000|g' /etc/php-fpm.d/www.conf
mkdir /run/php-fpm/

# 設定NGINX,時隔幾個月,為何會要做以下這些我也忘了
chown -R nginx:nginx /run/php-fpm/ /var/lib/php/session/
mv /etc/nginx/conf.d/php-fpm.conf /etc/nginx/conf.d/php-fpm.conf.bak
sed -i 's|php-fpm;|127.0.0.1:9000;|g' /etc/nginx/default.d/php.conf

# 安裝WordPress
cd /usr/share/nginx/
rm -rf /usr/share/nginx/html/
wget https://tw.wordpress.org/latest-zh_TW.tar.gz
tar zxvf latest-zh_TW.tar.gz
mv wordpress/ html
chown -R nginx:nginx html/
EOF
chmod +x /tmp/wordpress.sh
docker cp /tmp/wordpress.sh $nginxname:/tmp/
docker exec -it $nginxname /bin/bash -c "/tmp/wordpress.sh"

有個問題:
Dockerfile CMD只能執行一個命令,但我有NGINX、PHP-FPM要運行,所以另外寫了run.sh 腳本在Dockerfile 最後CMD內執行
其實也可以在Dockerfile CMD 內用接的

#!/bin/bash
/usr/sbin/nginx
/usr/sbin/php-fpm
tail -f /dev/null

其中 tail -f /dev/null 是爬文爬到的,避免容器執行完 CMD 後就Exited

梅問題這裡有更好的教學,以後網站多想用容器來建 WordPress 再來試

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *