目前用到docker的命令:
docker ps //查詢所有正在運行的容器
docker ps -a //查詢所有創建的容器
dockere stop [容器id/容器名] //停止運行容器
docker rm [容器id/容器名] //刪除容器
docker images //查詢所有拉取的鏡像
docker rmi [REPOSITORY] //刪除鏡像
docker restart [容器id/容器名] //重啓容器
docker inspect --format '{{ .NetworkSettings.IPAddress }}' c9996261e1c5 //查詢容器ip地址
一、安裝docker客戶端。
二、添加加速器地址。
由於在拉取鏡像的時候倉並不在國內,所以需要添加阿里雲加速器。
也可以直接進入阿里雲的加速器界面下,找到相應的系統下載docker客戶端。
安裝後Perferences ---> Daemon ---> 添加鏡像加速器地址 --> Apply&Restart
三、拉取鏡像。
打開終端,拉取nginx、mysql:5.7、php:7.0-fpm的鏡像。
拉取鏡像 nginx
docker pull nginx
拉取鏡像 mysql
docker pull mysql:5.7
拉取鏡像 php
docker pull php:7.0-fpm
四、創建容器並做link操作
參數說明:
-d 讓容器在後臺運行
-p 添加主機到容器的端口映射
-e 設置環境變量,必須設置root的用戶名的初始密碼
-v 添加目錄的映射,就是在本機的/~/~/~/文件夾和容器中的/var/www/html目錄同步。
-link 與另一個容器建立關係,以便於在當前的容器可以使用另外一個容器的服務。
//創建mysql容器
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:5.7
//創建php-fpm容器
在創建之前,由於我們需要將php的 php.ini以及www.conf配置文件跟拷貝出來方便直接與容器相對應的文件做掛載
//我們先運行
$ docker run --name php1 -d php:7.0-fpm
//創建一個臨時的php容器,通過使用docker cp 將www.conf和php.ini 複製到/s9docker/php-fpm下
在複製php.ini前記得進入到php容器中的/usr/local/etc/php/ 將php.ini-development複製完後改名爲php.ini
$ docker cp php1:/usr/local/etc/php/php.ini /Users/nekumatar/s9docker/php-fpm/
$ docker cp php1:/usr/local/etc/php-fpm.d/www.conf /Users/nekumatar/s9docker/php-fpm/
複製完後就可以在自己掛載的路徑看到兩個文件了,這個時候就值需要把運行的容器停了,然後再刪除,然後創建我們所需要的php容器。
docker run --name php70 -p 9000:9000 --link mysql57:mysql \
-v /Users/nekumatar/s9docker/app:/var/www/html \
-v /Users/nekumatar/s9docker/php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf \
-v /Users/nekumatar/s9docker/php-fpm/php.ini:/usr/local/etc/php/php.ini -d php:7.0-fpm
PS:可以先簡單的創建容器後將配置文件拷貝到本地的目錄下最後再兩個文件的掛載-v /本地位置:/容器裏的位置
//創建nginx容器
這裏需要將日誌跟nginx的配置文件掛載出來。
docker run --name s9nginx -d -p 80:80 \
-v /Users/nekumatar/s9docker/app:/var/www/html:ro \
-v /Users/nekumatar/s9docker/logs/nginx:/var/log/nginx \
-v /Users/nekumatar/s9docker/nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx
五、配置nginx容器
容器創建過後需要修改nginx配置
1、進路容器:docker exec -it s9nginx bash
2、先更新軟件源:apt update
3、安裝vim:apt-get install vim
完成後纔可以使用vi命令進行改寫。
4、在容器中對nginx的配置文件進行修改:vi etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
root /var/www/html;
location / {
index index.html index.htm index.php;
#autoindex on;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#172.17.0.3:9000;
location ~ \.php {
fastcgi_pass 172.17.0.4:9000;
fastcgi_index index.php;
include fastcgi_params;
#下面兩句是給fastcgi權限,可以支持 ?s=/module/controller/action的url訪問模式
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#下面兩句才能真正支持 index.php/index/index/index的pathinfo模式
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param REMOTE_ADDR "192.168.1.4";
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
root爲nginx容器裏的服務器路徑,mall是我的項目。這樣輸入url的時候直接寫localhost即可訪問項目
location / { // …..省略部分代碼
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
上面的代碼爲隱藏tp5的入口文件index.php的方法。
如果root爲/var/www/html的話,mall就爲二級目錄,則改爲:
location /mall/ {
index index.html index.htm index.php;
#autoindex on;
if (!-e $request_filename) {
rewrite ^/mall/(.*)$ /mall/index.php?s=/$1 last;
break;
}
由於有掛載到本地的文件,可以直接在/Users/nekumatar/s9docker/nginx/default.conf修改,改完後並重啓容器。
fastcgi_pass 需要填入調用php服務的容器ip,如需要查詢容器地址ip可以使用:docker inspect --format '{{ .NetworkSettings.IPAddress }}' c9996261e1c5
c9996261e1c5是容器的ip, 可以通過 docker ps -a 查詢所有的容器信息。
最後在掛載的本地文件夾(/Users/nekumatar/s9docker/app)位置上創個phpinfo進行查看。
六、配置php容器的擴展
鏡像自帶了php源碼包,位置爲容器的 /usr/src/php.tar.xz
可以通過docker-php-ext-install [擴展名]
例如:docker-php-ext-install mysqli
坑:有一點要注意,有些擴展需要依賴庫,我自己在安裝的gd時候就報錯了。這是依賴庫的原因,在php70的容器裏運行:
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng-dev 安裝這些依賴庫。
最後根據 docker-php-ext-install 命令就可以直接本地編譯安裝擴展了。
現在我在本地的php-fpm文件夾通過touch Dockerfile來創建新的鏡像,Dockerfile內容如下:
FROM php:7.0-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
# no dependency extension
&& docker-php-ext-install gettext mysqli opcache pdo_mysql sockets
然後在創建Dockerfile的文件夾創建有安裝擴展的鏡像,命令:
docker build -t php70:v1 .
創建完後就可以把這個鏡像上傳到aliyun下次就不用再安裝擴展了,算是基於官方鏡像搭建了自己的需要的鏡像
七、安裝Xdebug
首先將打印出來的phpinfo複製後粘貼到https://xdebug.org/wizard.php查詢自己php相對應的Xdebug版本。
下載下來後並對其進行安裝,用例:docker cp /opt/test/file.txt mycontainer:/opt/testnew/
複製xdebug進容器後:
先將/usr/src/裏的php.tar.xz解壓出來,之後再去解壓xdebug的文件複製到/usr/src/php(看你解壓出來的是什麼名字)/ext
//現將文件解壓
tar -xf /home/xdebug-2.6.0.tgz
//刪除掉壓縮包
rm -rf /home/xdebug-2.6.0.tgz
mkdir -p /usr/src/php/ext
mv xdebug-2.6.0 /usr/src/php/ext/xdebug
//在安裝之前,要將你解壓出來的/usr/src/php中的php壓縮回原來的php.tar.xz
tar -Jcvf php.tar.xz php-7.0.32/
//將xdebug擴展安裝
docker-php-ext-install xdebug
最後在info.php查詢到xdebug安裝就表示成功了。
docker下PHOPSTORM與Xdebug配置可以參考:
https://laravel-china.org/articles/14834/configuration-of-php-storm-xdebug-in-docker-based-development-environment