注意事项
1、像MySQL配置文件、Nginx配置文件、网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了
2、docker run MySQL和Nginx的时候注意使用 --link实现容器之间通信
3、运行容器的时候注意使用 --ip 固定容器IP
安装 MySQL
mysql 需要挂载的目录
/var/lib/mysql/etc/mysql/conf.d/var/run/mysqld
挂载详情
# 主机目录:容器目录/docker-data/web/mysql/data:/var/lib/mysql /docker-data/web/mysql/conf:/etc/mysql/conf.d /docker-data/web/mysql/mysql_sock:/var/run/mysqld
文件备份
将mysql的配置文件,自带数据库,sock配置 复制到主机目录
# docker cp container_ID:容器目录 主机目录docker cp 2d19ae0acd5d:/var/lib/mysql /docker-data/web/mysql/datadocker cp 2d19ae0acd5d:/etc/mysql/conf.d /docker-data/web/mysql/confdocker cp 2d19ae0acd5d:/var/run/mysqld /docker-data/web/mysql/mysql_sock
目录分解
docker run --name mysql # 指定容器名称-e MYSQL_ROOT_PASSWORD=root # 初始化root用户的密码为root-p 3307:3306 # 将容器的3306端口映射到主机的3307端口--privileged=true # 给容器加上特定的权限,否则可能会出现常见容器失败的情况-v /docker-data/web/mysql/data:/var/lib/mysql # 挂载目录 mysql数据文件-v /docker-data/web/mysql/conf:/etc/mysql/conf.d # 挂载目录 mysql配置文件-v /docker-data/web/mysql/mysql_sock:/var/run/mysqld # 挂载目录 mysql mysqld--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 /docker-data/web/mysql/data:/var/lib/mysql -v /docker-data/web/mysql/conf:/etc/mysql/conf.d -v /docker-data/web/mysql/mysql_sock:/var/run/mysqld --restart=always-d mysql:5.7
安装PHP
需要挂载的目录
/var/www/html /var/run/mysqld
挂载详情
# 主机目录:容器目录/docker-data/web/www/:/var/www/html /docker-data/web/mysql/mysql_sock/:/var/run/mysqld
文件备份
# docker cp container_ID:容器目录 主机目录docker cp 7da668050b8a:/var/www/html /docker-data/web/www
目录分解
docker run --name php -p 9000:9000 --privileged=true -v /docker-data/web/www/:/wwwroot -v /docker-data/web/mysql/mysql_sock/:/var/run/mysqld --link mysql:mysql # 使用link实现两个容器之间的通信--restart=always -dphp:7.2-fpm
命令实现
docker run --name php -p 9000:9000 --privileged=true -v /docker-data/web/www/:/wwwroot -v /docker-data/web/mysql/mysql_sock/:/var/run/mysqld --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 gddocker restart [container ID]#重启容器
安装Nginx
需要挂载的目录
/usr/share/nginx/html /etc/nginx/conf.d
挂载详情
# 主机目录:容器目录/docker-data/web/www:/usr/share/nginx/html /docker-data/web/nginx/conf.d:/etc/nginx/conf.d
文件备份
# docker cp container_ID:容器目录 主机目录docker cp e0babc8a32ad:/usr/share/nginx/html /docker-data/web/wwwdocker cp e0babc8a32ad:/etc/nginx/conf.d /docker-data/web/nginx/conf.d
目录分解
docker run --name nginx -p 8080:80 --privileged=true -v /docker-data/web/www:/wwwroot-v /docker-data/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 /docker-data/web/www:/wwwroot -v /docker-data/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; }}
let the world have no hard-to-write code
![fecad302458cd04078b59b1cc9c4cce2.png](https://i-blog.csdnimg.cn/blog_migrate/4d90fda48bdc7cc9de7300d52ff92428.jpeg)
作者:汪玉龙
原文:https://www.cnblogs.com/yulongcode/p/12719548.html