docker搭建lnmp環境

1.阿里雲容器地址
https://cr.console.aliyun.com
2.創建鏡像倉庫
3.虛擬機修改docker源

修改文件:/etc/docker/daemon.json

內容:

{
“registry-mirrors”: [“https://78zjyej0.mirror.aliyuncs.com“]
}

4.虛擬機登錄倉庫賬號

docker login –username= registry.cn-shenzhen.aliyuncs.com
輸入賬號密碼,賬號爲阿里雲賬號,密碼是在倉庫那裏另外設置的密碼
有時login會出現這個問題:x509: certificate has expired or is not yet valid

這個問題是由於虛機的系統時間沒有校正導致的,使用date命令查看時間是否爲本地時間 ,使用命令ntpdate cn.pool.ntp.org校正時間,如果提示命令不存在,使用命令安裝yum instal ntp,再使用date命令進行查看,確保時間爲本地時間,最後重新使用docker login命令,輸入密碼即可。

5.拉取php鏡像

docker pull php:7.2-fpm
嘗試過很多php鏡像,發現還是這個好用一點,配置文件分割清析在/usr/local/etc下面,php相關命令較全,在/usr/local/bin下可以看到很多命令,包括phpize php-config等等,而且改配置立即生效。

6.xdebug擴展

使用鏡像開啓一個容器docker run -itd --name php php:7.2-fpm,進入容器docker exec -it php bash,
使用php -m命令可看相關模塊,筆者自己安裝了xdebug擴展,使用命令php -i > phpinfo.txt獲取到環境信息,複製文件裏的內容到這個網址獲取對應版本的xdebug https://xdebug.org/wizard.php
,文件是下載到宿主機的,要拷貝文件到docker容器中,docker cp filename containerid:target_file_path,到容器中解壓文件並進入目錄

/usr/local/bin/phpize 
./configure --with-php-config=/usr/local/bin/php-config
make && make install

安裝完成,添加配置,在目錄/usr/local/etc/php/conf.d下添加xdebug.ini文件,內容爲

;zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so

;xdebug.remote_enable=1
;xdebug.idekey="PHPSTORM"
;xdebug.remote_connect_back=1
;xdebug.remote_port=9900
;xdebug.remote_log="/tmp/xdebug_log/"

使用的時間把”;”刪除,使用xdebug生效,php -m查看安裝模塊是否有xdebug。如果要安裝其他模塊,安裝命令和配置添加類似,可以下載相應的php安裝源碼cp到虛擬機安裝所需的擴展。(筆者曾經試過自己安裝在一個centos容器中安裝php環境,跑到最後達到了1.5G,最重要的是fileinfo這個擴展安裝不了,提示內存不足,在網上找了很多方法都不行,最後放棄了,直接找現成的php容器)

7.提交鏡像

回到宿主機,爲保留剛纔做的修改,所以重新創建一個鏡像git commit -m 'update php image' songzw/php-fpm:v1,此時使用git images可以看到多了一個songzw/php-fpm:v2鏡像

8.提交鏡像到阿里倉庫

docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/songzw/php:[鏡像版本號] 把倉庫修改到阿里,docker push registry.cn-shenzhen.aliyuncs.com/songzw/php:[鏡像版本號]完成推送。

9.在php容器中需要安裝composer才能安裝擴展包,使用composer命令時要用到git,zip,unzip命令,所以要先apt-get update,apt-get install git zip upzip,重新構建鏡像。

10.docker-compose構建nginx

./nginx/Dockerfile

from nginx
COPY ./*.conf /etc/nginx/conf.d/
run mkdir -p /var/nginx/logs/access /var/nginx/logs/error && chmod -R 777 /var/nginx

nginx如果本地沒有,則會先從遠程倉庫中拉取,將本地的conf配置文件拷貝到容器,在容器中創建目錄並且授權,這個不是必須的,因爲我本地的conf文件裏配置的日誌文件和錯誤文件是在這個目錄,所有本地也要先有這個目錄,如果容器起不來,使用docker logs containerid來查看日誌,有可能是這個目錄問題導致的,在docker-compose.yml文件加上tty: true

11.docker-compose構建mysql

./mysql/Dockerfile

from mysql:5.6
COPY ./*.cnf /etc/mysql/mysql.conf.d/

需要在mysql目錄下touch my.cnf,裏面內容爲自定義配置,可以爲空,mysql:5.6鏡像如果本地不存在也是從遠程拉取。

12.docker-compose構建php

from songzw/php-fpm:v5
COPY *.conf /usr/local/etc/php-fpm.d/
COPY *.ini /usr/local/etc/php/conf.d/
run chown -R www-data.www-data /var/www

其中songzw/php-fpm:v5是筆者從php:7.2-fpm拉取下來進行重新構建的鏡像,要創建文件touch my.conftouch my.ini,這樣可以添加自定義配置,/var/www修改屬主是因爲會出現緩存文件的寫權限問題

13.docker-compose.yml

最後呈現docker-compose.yml文件內容

mysql:
  build: ./mysql/
  volumes:
   - /var/mysql/data:/var/lib/mysql
   - /var/mysql/logs:/var/log/mysql
  expose:
   - "3306"
  ports:
   - 3306:3306
  env_file:
   - ./env

 php:
  build: ./php/
  volumes:
   - /var/www/html:/var/www/html
  expose:
   - "9000"
  links:
   - mysql
  command: php-fpm

 nginx:
  build: ./nginx
  tty: true
  volumes_from:
   - php
  volumes:
   - /var/nginx:/var/nginx
  links:
   - php
  ports:
   - "80:80"

使用docker-compose up -ddocker-compose down便可以搭建和銷燬環境,其中nginx的配置文件在配置連接php時使用php容器ip或者fastcgi_pass php:9000;,php代碼連接mysql數據庫時使用mysql容器ip或者別名mysql,即links對應的別名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章