首先创建一个新的 Docker 网络 这里是用来测试 使用名称test
docker network create -d bridge test
docker network ls 可查看 docker网络
拉取mysql镜像 这里 用mysql5.7 :5.7标签 也是指 版本号
docker pull mysql:5.7
开始之前 把主机目录的 文件夹先建立好 加好相应权限
mysql 需要挂载的目录
/var/lib/mysql /etc/mysql/conf.d
挂载详情
# 主机目录:容器目录 /etc/docker/mysql/data:/var/lib/mysql /etc/docker/mysql/conf:/etc/mysql/conf.d
复制容器相应文件 到本机 事先先创建一个测试容器 进行文件复制
# docker cp container_ID/容器名称:容器目录 主机目录
docker cp mysql:/var/lib/mysql /etc/docker/mysql/data
docker cp mysql:/etc/mysql/conf.d /etc/docker/web/mysql/conf
命令实现
docker run --name --network test mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 --privileged=true -v /etc/docker/mysql/data:/var/lib/mysql -v /etc/docker/mysql/conf:/etc/mysql/conf.d --restart=always -d mysql:5.7
命令详情
docker run --name mysql # 指定容器名称 --network test #添加到test网络 -e MYSQL_ROOT_PASSWORD=root # 初始化root用户的密码为root -p 3307:3306 # 将容器的3306端口映射到主机的3307端口 --privileged=true # 给容器加上特定的权限,否则可能会出现常见容器失败的情况 -v /etc/docker/mysql/data:/var/lib/mysql # 挂载目录 mysql数据文件 -v /etc/docker/mysql/conf:/etc/mysql/conf.d # 挂载目录 mysql配置文件 --restart=always # 设置失败自动重启 可写为 --restart=on-failure:5 最多重启五次 -d mysql:5.7
拉取php 镜像 默认最新版本
docker pull php
需要挂载的目录
/var/www/html
与mysql类似 在本地创建相应容器挂载目录 进行权限修改 文件复制等等
命令实现:
docker run --name --network test php -p 9000:9000 --privileged=true -v /etc/docker/php/web/www/:/wwwroot --restart=always -id php
命令详情 与 mysql 一样
扩展安装
docker exec -it [container id]/container name bash #进入容器
# 进入容器执行命令安装扩展 docker-php-ext-install [扩展名称]
# 我放置了tplay框架 安装 pdo_mysql 未安装之前报错 could not find driver # 安装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]/容器name #重启容器
上述gd扩展如出现 MySQL安装不上pdo_mysql 用如下命令 docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm
安装nginx
需要挂载的容器目录
/usr/share/nginx/html
/etc/nginx/conf.d
同上 复制 容器文件 到本机
docker run --name nginx --network test -p 8080:80 --privileged=true -v /etc/docker/nginx/web/www:/wwwroot -v /etc/docker/nginx/conf.d:/etc/nginx/conf.d --restart=always -id nginx
Nginx配置文件参考
server { listen 80; server_name www.buxin.com; root /wwwroot/docker/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; } }
本机hosts 文件添加 127.0.0.1 www.buxin.com
docker查看镜像元信息 可以查到php容器 ip
docker inspect [container id]/[container name]
example : "IPAddress": "172.18.0.4",