在docker安裝Apache php及Mariadb服務,可以快速部署安裝於多種OS,不管是在開發或是正式上線環境都可以一樣。
images使用是官方的apache php 7.2版本;mariadb:latest,其中apache-php部份還需要另外安裝mysqli擴展套件。
指令如下
資料庫部份
sudo docker search mariadb sudo docker pull mariadb sudo docker run -d --name mariadb -e MYSQL_ROOT_PASSWORD=youpass --restart unless-stopped mariadb
參數–restart unless-stopped可以讓os在重開機時自動啟動docker container,不過自已下指令停止時不會自動再啟動
資料庫建立可直接進入docker內部利用mysql client建立
sudo docker exec -ti mariadb bash mysql -u root -p yourpass create database test;
apache及php部份
先建立一個空間,等等要跟docker共用,如此可以把程式放在os的指定位置裡
mkdir -p /opt/www-data
下載images
sudo docker search php sudo docker php:7.2-apache
版本可以參考 docker_php
啟動docker container後進入docker container裡安裝擴充套件mysqli
sudo docker run -d --name apache --restart unless-stopped -p 80:80 -v /opt/www-data:/var/www --link mariadb:mariadb php:7.2-apache sudo docker exec -ti apache sh >> docker-php-ext-install mysqli >> docker-php-ext-enable mysqli >> apachectl restart
也可以直接使用我commit的版本,然後直接run起來守備狀態
sudo docker pull catyku/php-mysqli:docker pull catyku/php-mysqli:7.2-apache sudo docker run -d --name apache --restart unless-stopped -p 80:80 -v /opt/www-data:/var/www --link mariadb:mariadb catyku/php-mysqli:7.2-apache
因為有link mariadb的docker container所以我們可以直接連線mariadb
撰寫程式測試
sudo nano /opt/www-data/index.php
<?php $db = new mysqli('mariadb', 'root', 'youpass', 'test'); if (mysqli_connect_errno()) { echo '<p>' . 'Connect DB error'; exit; } else { echo "Connection success"; } ?>
測試
補充
如果不想每次執行docker都要加入sudo可以建立一個docker group,把使用者加入這個group就可以了
#如果沒group docker就建立一個
sudo groupadd docker
#將使用者加入group docker
sudo gpasswd -a ${USER} docker
#重啟docker服務
sudo gpasswd -a ${USER} docker
#轉換使用者帳號group為group docker
newgrp - docker
如果之前已經利用sudo執行過docker image了,那可能會出現
WARNING: Error loading config file: /home/username/.docker/config.json: stat /home /username/.docker/config.json: permission denied
這時候就需要授權.docker這目錄權限及owner
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod g+rwx "/home/$USER/.docker" -R
都會發生這個錯誤 Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused “chdir to cwd (\”/var/www/html\”) set in config.json failed: no such file or directory”.