注意事項
1、像MySQL配置文件、Nginx配置文件、網站根目錄這種比較經常操作的需要先使用
docker cp將文件從容器里復制到主機目錄,docker run的時候直接掛載目錄就可以了2、
docker runMySQL和Nginx的時候注意使用--link實現容器之間通信3、運行容器的時候注意使用
--ip固定容器IP
安裝 MySQL
mysql 需要掛載的目錄
/var/lib/mysql
/etc/mysql/conf.d
掛載詳情
# 主機目錄:容器目錄
~/web/mysql/data:/var/lib/mysql
~/web/mysql/conf:/etc/mysql/conf.d
文件備份
將mysql的配置文件,自帶數據庫,sock配置 復制到主機目錄
# docker cp container_ID:容器目錄 主機目錄
docker cp 2d19ae0acd5d:/var/lib/mysql ~/web/mysql/data
docker cp 2d19ae0acd5d:/etc/mysql/conf.d ~/web/mysql/conf
目錄分解
docker run
--name mysql # 指定容器名稱
-e MYSQL_ROOT_PASSWORD=root # 初始化root用戶的密碼為root
-p 3307:3306 # 將容器的3306端口映射到主機的3307端口
--privileged=true # 給容器加上特定的權限,否則可能會出現常見容器失敗的情況
-v ~/web/mysql/data:/var/lib/mysql # 掛載目錄 mysql數據文件
-v ~/web/mysql/conf:/etc/mysql/conf.d # 掛載目錄 mysql配置文件
--restart=always # 設置失敗自動重啟 可寫為 --restart=on-failure:5 最多重啟五次
-d mysql:5.7
命令實現
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 --privileged=true -v ~/web/mysql/data:/var/lib/mysql -v ~/web/mysql/conf:/etc/mysql/conf.d --restart=always -d mysql:5.7
安裝PHP
需要掛載的目錄
/var/www/html
掛載詳情
# 主機目錄:容器目錄
~/web/www/:/var/www/html
文件備份
# docker cp container_ID:容器目錄 主機目錄
docker cp 7da668050b8a:/var/www/html /docker-data/web/www
目錄分解
docker run
--name php
-p 9000:9000
--privileged=true
-v ~/web/www/:/wwwroot
--link mysql:mysql # 使用link實現兩個容器之間的通信
--restart=always
-d
php:7.2-fpm
命令實現
docker run --name php -p 9000:9000 --privileged=true -v ~/web/www/:/wwwroot --link mysql:mysql --restart=always -d php:7.2-fpm
擴展安裝
# 進入容器執行命令安裝擴展
docker-php-ext-install [擴展名稱]
# 安裝GD庫
apt update #更新軟件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安裝各種庫
docker-php-source extract #解壓源碼
cd /usr/src/php/ext/gd #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
docker restart [container ID]#重啟容器
安裝Nginx
需要掛載的目錄
/usr/share/nginx/html
/etc/nginx/conf.d
掛載詳情
# 主機目錄:容器目錄
~/web/www:/usr/share/nginx/html
~/web/nginx/conf.d:/etc/nginx/conf.d
文件備份
# docker cp container_ID:容器目錄 主機目錄
docker cp e0babc8a32ad:/usr/share/nginx/html ~/web/www
docker cp e0babc8a32ad:/etc/nginx/conf.d ~/web/nginx/conf.d
目錄分解
docker run
--name nginx
-p 8080:80
--privileged=true
-v ~/web/www:/wwwroot
-v ~/web/nginx/conf.d:/etc/nginx/conf.d
--link php:php
--restart=always
-d
nginx
命令實現
docker run --name nginx -p 8080:80 --privileged=true -v ~/web/www:/wwwroot -v ~/web/nginx/conf.d:/etc/nginx/conf.d --link php:php --restart=always -d nginx
Nginx配置文件參考
server {
listen 80;
server_name tplay.yulongcode.com;
root /wwwroot/tplay/public; # 項目在容器里的目錄
index index.php index.html index.htm;
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
error_page 500 502 503 504 /50x.html;
location ~ \.php$ {
fastcgi_pass PHP容器IP:PHP端口;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
