隨着Docker的不斷成熟,愈來愈多的站長以及運維人員選擇Docker構建程序運行環境,另外因爲國內的雲服務廠商一般在新購主機時會給較大的優惠,而續費則優惠不多,本着儘可能節省成本的原則,藉助Docker自動構建運行環境,成爲一個比較好的選擇。本文針對的場景是一臺雲主機上運行多個版本的PHP的狀況,LNMP架構。php
這裏把運行Docker服務的服務器叫宿主機,目前Docker對於宿主機的系統是有要求的,簡單來講,Centos 須要7以上,Ubuntu須要16以上。因此在購買或者升級雲主機的系統時,須要注意系統的版本,一般選最新的版本是沒錯的,除非有特殊的需求。接下去以Centos爲例,安裝Docker的步驟以下:html
sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
sudo systemctl start docker
sudo docker run hello-world
這個命令將拉去hello-world鏡像並運行,將輸出hello world消息 7. 讓Docker隨系統啓動linux
sudo systemctl enable docker
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["您的專屬加速地址"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
至此,宿主機算配置完畢啦。nginx
docker composer 適合單主機的狀況下進行多容器編排,代碼已經所有放到馬雲了。 地址:https://gitee.com/linwx/Docker-LNMPgit
不一樣版本的PHP,用不一樣的服務名來標誌,如php-fpm,和php54-fpm. 而後在nginx裏鏈接的時候,指定相應的名字:github
links: - php-fpm:fpm - php54-fpm:fpm54
在相應的配置文件中,如site1站點是運行在PHP7版本的,對應的fastcgi_pass參數是fpm:9000:docker
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass fpm:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; }
site2站點是運行在PHP5.4版本上的,對應的fastcgi_pass參數是fpm54:9000:json
location ~ \.php$ { root /var/www/html/bbs; fastcgi_pass fpm54:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 600; }
涉及到時間和日期的操做,須要關注容器的默認時區,好比nginx的日誌輸出的時間,php的計劃任務運行的時間,所以須要在容器編譯的時候,就指定好默認的時區,在nginx和cron的dockerfile裏能夠看到對應的命令:centos
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
本着每一個容器運行一個服務的原則,本文把cron服務也單獨成一個容器,爲了讓cron容器正常運行,須要注意2點,一是容器的時區,上文已經提過;二是計劃任務的列表,須要讓在編譯的時候寫入,相應的dockerfile以下:服務器
ADD crontab /etc/cron.d/cron RUN chmod 0644 /etc/cron.d/cron RUN crontab /etc/cron.d/cron CMD ["cron", "-f"]
使用cron -f 命令,讓cron保持在前臺運行
若是不想了解那麼多細節,能夠在配置完宿主機後,直接git clone https://gitee.com/linwx/Docker-LNMP.git 而後配置相應的站點nginx配置文件,就可使用docker-compose up -d --build啓動全部服務啦。