其实上篇文章已经说清楚了,此文可以理解为其补充内容。
主要区别是,上篇文章基于wsl子系统的docker,此文主要是docker桌面应用。
注:搬运自公司大佬Haierspi为我们写的文档,版权为其所有,我只是大自然的搬运工和总结者0.0。
一. Docker For Windows
运行要求
- Windows 10 PRO
- Windows 10 Home 升级 Pro
- 升级密钥
VK7JG-NPHTM-C97JM-9MPGT-3V66T
- 升级密钥
下载地址
二. 容器<>宿主机互访
-
容器访问宿主机
- host.docker.internal
- docker.for.win.localhost
- kubernetes.docker.internal
- ifconfig => docker0 的 ip
-
宿主机访问容器
-
简单理解下
-
DockerNAT (貌似不用执行,尚待探索)
- (Get-NetIPConfiguration | Where-Object { $_.InterfaceAlias -eq 'vEthernet (DockerNAT)' }).IPV4Address.IPAddress
- (docker run --rm alpine sh -c 'getent hosts docker.for.win.localhost | awk ''{ print $1 }''')
-
windows宿主机访问容器方法
- 添加路由表 让 windows 宿主机直接访问容器 (cmd管理员权限下执行)
route -p add 172.17.0.0 MASK 255.255.255.0 10.0.75.2
默认网络会强制顺序自动指派IP地址
route -p add 172.18.0.0 MASK 255.255.255.0 10.0.75.2
对应 下文
webapps
网络 - Docker For WINDOWS 2.2 DockerNAT 不存在的问题
open C:\Program Files\Docker\Docker\resources\MobyLinux.ps1 and add $SwitchName = "DockerNAT" between line 175 and 176.
- 添加路由表 让 windows 宿主机直接访问容器 (cmd管理员权限下执行)
-
三. 项目搭建
拉取镜像
-
PHP
docker image pull haierspi/centos7_ssh_php72_swoole_sqlsrv:v1
-
Nginx
docker image pull haierspi/centos7_ssh_nginx:v1
-
Redis
docker image pull haierspi/centos7_ssh_redis:v1
Redis pw:
-
DB_MySql Mariadb
docker image pull haierspi/centos7_ssh_mariadb:v1
账号清单:
账号 密码 访问域 root localhost,% dbuser % -
RabbitMQ
docker pull rabbitmq:management
-
ElasticSearch
待完善
创建单独的Docker网络
docker network create --subnet=172.18.0.0/16 webapps
默认网络会强制按照容器启动顺序自动指派IP地址;所以需要创建网络环境来把内网IP固定下来
创建PHP容器
在webapps
网络下创建c7_ssh_php_swoole
容器并指定固定内网IP 172.18.0.20
docker run --privileged -d --name c7_ssh_php_swoole --net webapps --ip 172.18.0.10 -v D:/Dev/Dev.Data/www:/home/webApps haierspi/centos7_ssh_php72_swoole_sqlsrv:v1 /sbin/init
其中 -v 为映射挂载参数, 含义为将本地(宿主机) D:/Dev/Dev.Data/www
映射到容器内的 /home/webApps
目录上
创建nginx容器
在webapps
网络下创建c7_ssh_nginx
容器并指定固定内网IP 172.18.0.20
docker run --privileged -d --name c7_ssh_nginx --net webapps --ip 172.18.0.20 -v D:/Dev/Dev.Data/www:/home/webApps haierspi/centos7_ssh_nginx:v1 /sbin/init
创建Redis容器
在webapps
网络下创建c7_ssh_redis
容器并指定固定内网IP 172.18.0.30
docker run --privileged -d --name c7_ssh_redis --net webapps --ip 172.18.0.30 haierspi/centos7_ssh_redis:v1 /sbin/init
创建MYSQL_Mariadb容器
在webapps
网络下创建c7_ssh_mariadb
容器并指定固定内网IP 172.18.0.31
docker run --privileged -d --name c7_ssh_mariadb --net webapps --ip 172.18.0.31 haierspi/centos7_ssh_mariadb:v1 /sbin/init
创建rabbitmq容器
在webapps
网络下创建c7_ssh_rabbitmq
容器并指定固定内网IP 172.18.0.31
docker run --privileged -d --name c7_ssh_rabbit_mq --net webapps --ip 172.18.0.40 -d -p 15672:15672 -p 5672:5672 rabbitmq:management
进入容器
- 直接DOCKER命令
docker exec -it c7_ssh_nginx /bin/bash
- 访问SSH 22端口
- 账号
root
- 密码
- 账号
首次访问项目修改事项(否则访问会提示502 gateway错误)
原因:没有修改fastcgi_pass指向php解释器到php容器,而且因为前面配置容器时将网络指向的时host,所有要将其指向127.0.0.1:9000。
直接vim nginx_php_inc.conf的话是没有这个文件的
首先要进入 c7_ssh_nginx
容器
docker exec -it c7_ssh_nginx /bin/bash
cd ~ 进入目录
vim nginx_php_inc.conf
修改 fastcgi_pass 指向PHP解释器到 PHP容器( 172.18.0.10:9000 )
修改完nginx配置要重启nginx服务器
systemctl reload nginx.service
项目详情和访问
站点已经在 Nginx容器内配置好,如果不一样请自定义Nginx站点配置 /etc/nginx/conf.d/
常见问题解决
- 容器内时间问题
-
查看时间/时区
date -R timedatectl status
-
时区问题
timedatectl set-timezone Asia/Shanghai
-
时间强制同步
#yum -y install ntpdate #ntpdate ntp1.aliyun.com
-