Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從 Apache2.0 協定開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux(Windows,MacOS) 機器上,也可以實作虛拟化。
容器是完全使用沙箱機制,互相之間不會有任何接口,更重要的是容器性能開銷極低。
一、安裝nginx、php、mysql鏡像
docker pull nginx:latest
docker pull php:5.6-fpm
docker pull php:5.6-cli
docker pull mysql:5.6.46
docker pull phpmyadmin/phpmyadmin
使用指令docker images
檢視本地鏡像:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c7460dfcab50 5 hours ago 126MB
phpmyadmin/phpmyadmin latest fcf3beee74b9 47 hours ago 458MB
mysql 5.6.46 f7ba8643e01a 12 days ago 302MB
php 5.6-fpm 3458979c7744 11 months ago 344MB
php 5.6-cli 36c3c974e6ee 11 months ago 344MB
善用docker search
指令來檢視可用版本。
https://www.runoob.com/docker/docker-search-command.html
二、運作、停止、删除容器
可以執行指令docker container ls
或者docker container ls -all
,來檢視已啟動的容器或者所有容器。
docker run --name xu-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.6.46
docker run --name xu-phpmyadmin -d --link xu-mysql:db -p 8081:80 phpmyadmin/phpmyadmin
# 通路http://127.0.0.1:8081/,使用root/123456賬号資訊登入管理mysql
docker run --name xu-php-fpm5.6 -v ~/code/docker/nginx/www:/www -d php:5.6-fpm
這樣沒有和nginx結合,如果啟動了這個容器,可以停止并删除它,如下:
docker stop 027c0f432aae # 此外對應的容器id
docker rm 027c0f432aae
下面Nginx + PHP:
docker run --name xu-nginx -p 8080:80 -d -v ~/code/docker/nginx/www:/usr/share/nginx/html -v ~/code/docker/nginx/conf/conf.d/:/etc/nginx/conf.d --link xu-php-fpm5.6:php nginx
參考:
https://www.runoob.com/docker/docker-install-php.html
https://hub.docker.com/_/php
當把web程式代碼放入~/code/docker/nginx/www
後,在浏覽器打開http://127.0.0.1:8080/
,提示:
您的伺服器環境不支援gd擴充,将無法使用驗證碼!
三、安裝php擴充gd庫
# 如果之前啟用了gd,需要先在php.ini檔案中注釋掉extension=gd.so并重新開機容器
# 進入php容器
docker exec -it /bin/bash
# 容器中
# 可把軟體源修改為國内某鏡像站源,例如容器軟體源/etc/apt/sources.list修改為網易鏡像站源,以stretch為例:
deb http://mirrors.163.com/debian/ stretch main contrib non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main contrib non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main contrib non-free contrib
# 更新軟體源
apt update
# 安裝各種庫
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
# 解壓源碼
docker-php-source extract
# 進入gd源碼檔案夾
cd /usr/src/php/ext/gd
# 準備編譯
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2
# 編譯安裝
docker-php-ext-install gd
# 檢查擴充是否安裝成功
php -m | grep gd
# 退出php容器終端
exit
# 重新開機php容器
……
四、擴充知識
1、docker-php-source
此指令在PHP容器中建立一個/usr/src/php的目錄,裡面放了一些自帶的檔案而已。我們就把它當作一個從網際網路中下載下傳下來的PHP擴充源碼的存放目錄即可。事實上,所有PHP擴充源碼擴充存放的路徑: /usr/src/php/ext 裡面。
格式:
docker-php-source extract | delete
參數說明:
* extract : 建立并初始化 /usr/src/php目錄
* delete : 删除 /usr/src/php目錄
2、docker-php-ext-enable
這個指令是用來啟動PHP擴充
的。我們使用pecl安裝PHP擴充的時候,預設是沒有啟動這個擴充的,如果想要使用這個擴充必須要在php.ini這個配置檔案中去配置一下才能使用這個PHP擴充。而 docker-php-ext-enable 這個指令則是自動給我們來啟動PHP擴充的,不需要你去php.ini這個配置檔案中去配置。
3、docker-php-ext-install
這個指令是用來安裝并啟動PHP擴充
的。
指令格式:
docker-php-ext-install “源碼包目錄名”
注意點:
“源碼包“需要放在 /usr/src/php/ext 下
預設情況下,PHP容器沒有 /usr/src/php這個目錄,需要使用 docker-php-source extract來生成。
docker-php-ext-install 安裝的擴充在安裝完成後,會自動調用docker-php-ext-enable來啟動安裝的擴充。
解除安裝擴充,直接删除/usr/local/etc/php/conf.d 對應的配置檔案即可。