热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Win10系统中,基于Docker构建PHP开发环境:Win10+Docker+Larad

接上篇:https:mp.weixin.qq.comsMvIl0uJR21JUZ3WbmIngdQ六、Docker容器的基本操作1、如下图,在windowsshell中使用dock

接上篇:

https://mp.weixin.qq.com/s/MvIl0uJR21JUZ3WbmIngdQ

六、Docker 容器的基本操作
1、如下图,在 windows shell 中使用 docker-composer up -d nginx mysql 命令,可以启动容器,并会启动相关联的容器。启动之后一个基本的 LNMP 环境就构建完成了。
技术分享图片

使用 docker-compose ps 可以查看所有容器,如上图,可以看到,beanstalkd 和 redis 在 state 状态是 Exit ,也就是没有启动。所以,想使用哪个服务就启动哪个容器。最后的 Ports 端口号是 宿主机的端口映射到容器的端口,比如,浏览器访问 http://127.0.0.1 ,宿主机( Win10 ) 的80端口就会映射到 nginx 容器的 80 端口,这样就由 nginx 提供服务了。

2、进入相应的容器就相当于进入了 Linux 系统环境,比如进入 Workspace 容器就可以执行( Artisan, Composer, PHPUnit, Gulp, ... )等命令,进入 mysql 容器,可以登录 mysql 命令行。
技术分享图片

如上图,进入 nginx 容器 bash 后,就可以运行 Linux 命令了,运行 nginx -V 查看版本,可以看到版本号及编译参数,比如,已经启用了 ssl 、gzip、 http_v2 等功能模块。最后用 exit 退出 Linux bash 环境。


docker
-
compose
exec
workspace bash
// 进入workspace 容器bash
docker
-
compose
exec
mysql bash
// 进入 mysql 容器 bash
docker
-
compose
exec
nginx bash
// 进入 nginx 容器 bash
###显示结果###
bash
-
4.4
#

Windows PowerShell 用户执行以下命令以进入任何正在运行的容器:


# docker exec -it {workspace-c
```ontainer-id} bash
每一个容器就相当于类似于沙箱一样的互相隔离的一个 Linux 系统,比如 nginx 容器就是一个 Linux + nginx 系统,而 mysql 容器是另一个 Linux + mysql 系统,两个容器之间是隔离的,不会互相影响,每个容器都有一个 Docker 统一分配的局域网 IP 地址。进入容器之后 bash ,可以运行基本的 Linux 命令,比如查看容器的ip地址:

cat /etc/hosts


3、为了区别 Windows PowerShell 和 容器 base 环境,可以约定:如果命令行前是 > 符号,就表示要在 Windows PowerShell 中运行;如果命令行前是 # 符号,就表示在 Linux base 环境中运行。
4、如果在安装时没有修改 .env 文件,按默认没有安装 Xdebug ,要重新配置启用 Xdebug 的话,可以按前面 五、安装 Laradock 中的第3条方法修改 .env 文件,修改完成后,运行命令 > docker-compose build workspace php-fpm 重新构建容器,所需时间和第一次安装时一样。
5、一般在修改 nginx 配置后,需要重启 Docker 的 Nginx:


docker


compose up

d nginx


###显示结果###


laradock_docker


in


docker_1
is
up


to

date

Recreating
laradock_workspace_1
...

done


Recreating
laradock_php

fpm_1
...

done

Recreating
laradock_nginx_1
...

done


6、进入 workspace 容器 base ,使用国内的 composer 镜像,详见:https://pkg.phpcomposer.com/

docker

compose
exec
workspace bash


composer config

g repo
.
packagist composer https
:
//packagist.phpcomposer.com


**七、mysql8.0 无法连接问题**
1、使用docker-compose up命令运行phpMyAdmin容器

use with mysql

docker


compose up

d mysql phpmyadmin


2、打开浏览器并通过端口8080访问本地主机:http://localhost:8080 ,服务器:mysql, 用户名:root,密码:root 登录
3、如果宿主机安装了 Navicat 之类的数据库管理软件,主机地址使用 127.0.0.1 ,就可以连接 mysql 数制库。
4、但是在 mysql8.0 时,这些数据库管理软件还不支持,可能会报错:

mysqli_real_connect
():

The
server requested authentication method unknown to the client
[
caching_sha2_password
]

mysqli_real_connect
():

(
HY000
/
2054
):

The
server requested authentication method unknown to the client


这是因为 mysql 8.0 将密码验证方式由以前的 mysqlnativepassword 改为了 cachingsha2password 。可以进入 mysql 容器 bash,登录 mysql ,将验证方式修改成原来的。
#在

docker

compose
exec
mysql bash


mysql


uroot

p

mysql


grant all PRIVILEGES on
.
to root@
‘%‘
WITH GRANT OPTION
;


mysql


ALTER user ‘root‘
@
br/>‘root‘
@
IDENTIFIED WITH mysql_native_password BY
‘root‘
;


mysql


ALTER user ‘root‘
@
br/>‘root‘
@
IDENTIFIED WITH mysql_native_password BY
‘root‘
;


mysql


FLUSH PRIVILEGES
;


mysql



exit
;


现在就可以用 root 登录了。为了使新建用户的验证方式默认为 mysqlnativepassword ,可以修改 my.cnf 文件,在 [mysqld] 部分中添加:
defaultauthenticatiOnplugin= mysqlnativepassword
5、laradock 默认装的是 mysql 最新版本(mysql8),也可以更换成低版本的 mysql 。

修改 .env 文件
MYSQL_VERSION

5.7


默认为 latest

#停止mysql容器


docker

compose stop mysql


删除旧数据库数据

rm

rf
~
/.laradock/
data
/
mysql


重新构建新 mysql

docker

compose build mysql


重新创建容器

docker


compose up

d nginx mysql


查看现有 mysql 版本

docker inspect laradockmysql


6、在 php 程序中连接数据库时,如果 DB_HOST 为 127.0.0.1 或 localhost,则会报错:SQLSTATE[HY000] [2002] Connection refused ,SQLSTATE[HY000] [2002] No such file or directory,那时因为 php 容器里是没有 mysql 的,需要用 mysql 容器的 IP。
**八、项目配置**
1、以安装和配置一个 Laravel 项目为例,在 PowerShell 中首先进入 Laradock 目录,启动容器:

docker


compose up

d mysql


docker


compose up

d nginx

###输出内容###


laradock_mysql_1
is
up


to

date


laradock_docker


in


docker_1
is
up


to

date


laradock_workspace_1
is
up


to

date


laradock_php


fpm_1
is
up


to

date


laradock_nginx_1
is
up


to

date


docker


compose up

d redis beanstalkd phpmyadmin


docker


compose up

d phpmyadmin


**注意**:默认情况下,docker会使用 bridge 网络模式为每一个启动的容器动态分配一个IP,以172.17.0.1为网关,172.17.0.2,172.17.0.3 依次类推作为容器的 ip,但是如果下次启动时容器启动顺序有变化,可能分配的 IP 地址也会变化,并且有些容器之间互相有依赖,所以最好按顺序依次启动,不要包含在一条 docker-compose up 命令中,这样当下次启动多个容器的时候 IP 还是会分配和上次相同的 IP。
2、进入 workspace 容器

docker

compose
exec
workspace bash

###输出内容###

root@5f056ea61aed
:
/var/
www
#


输出内容可以看到容器中默认目录是 /var/www 目录,这个目录默认是和 win10 中 Laradock 同级目录建立的软链接。
ps:如果要修改这个默认的软链接目录,可以先在 laradock 父级目录下创建一个与 laradock 同级的 wwwroot 目录,然后编辑 laradock 目录下 .env 文件中的 APPLICATION 配置项:

APPLICATION
=../
wwwroot
/


再重新载入容器,这样就相当于为 win10 中的 wwwroot 目录与 Docker 的 /var/www 目录建立了软链接
4、在 workspace 容器的 bash 中,首先要确定是否已启用用 composer 国内镜像,参见上述 六.6 ,然后运行 composer 命令创建一个 Laravel 项目:

composer create


project laravel
/
laravel larabbs


prefer

dist


在 win10 中的目录结构如下:

+
laradock

+
laravel


在 win10 中的 laravel 目录,就相当于 workspace 中的 /var/www 目录。
5、在win10中打开 laradock/nginx/sites 目录,复制一份 laravel.conf.example ,重命名为 larabbs.conf 并编辑此文件:

server_name larabbs
.
test
;

root
/
var
/
www
/
laravel
/
public
;

index index
.
php index
.
html index
.
htm
;


重新启动 laradock_nginx 容器,也就是重启 nginx 服务器

docker restart laradock_nginx_1


6、打开 C:\Windows\System32\drivers\etc 目录,编辑 hosts 文件,添加:127.0.0.1 laravel.test
7、打开浏览器,访问 http:// laravel.test ,即可看到 laravel 框架默认首页。
8、使用 Navicat ,或 phpMyAdmin ,新建数据库 testlaravel ,字符及排序规则选:utf8mb4unicode_ci
9、进入 mysql 容器,查询容器的 ip 地址。如本例:172.19.0.2 即为 php 项目连接数据库的地址。


docker

compose
exec
mysql bash



cat /etc/hosts

显示结果

127.0
.
0.1
localhost


::
1
localhost ip6


localhost ip6

loopback


fe00
::
0
ip6

localnet


ff00
::
0
ip6

mcastprefix


ff02
::
1
ip6

allnodes


ff02
::
2
ip6

allrouters

172.19
.
0.2

973c5c774036


退出容器 bash

exit

显示结果

exit

PS C
:
\WWW\laradock



10、用 phpstrom 或别的编辑器,打开 Laravel 项目,编辑 .env 配置文件,DB_HOST 为上一步查询到的 IP 地址:

APP_URL
=
http
:
// laravel.test
...
DB_CONNECTION
=
mysql
DB_HOST
=
172.19
.
0.2
DB_PORT
=
3306
DB_DATABASE
=
test_laravel
DB_USERNAME
=
root
DB_PASSWORD
=
root

11、至此,项目配置完成!


一、安装 cmder
1、win10 中将 cmder 放在C:\Program files\ 目录下时有权限问题。2、360杀毒会误杀,要将 cmder/vendor/init.bat 到360杀毒的 设置->文件白名单 中,在弹出拦截窗口时点击加入白名单无效,要手动加入。

二、Docker 常用命令
切换到 laradock 目录执行:

进入容器:docker-compose exec{容器名}bash 默认是使用 root 用户进入,议不要采用root进入,因为composer不推荐

用 laradock 用户进入容器:docker-compose exec —user=laradock workspace bash

退出命令是 : exit。

进入 mysql 容器:docker-compose exec mysql bash

在 mysql 容器 bash 中,进入mysql 命令行:mysql -uroot -proot

进入 workspace 容器:docker-compose exec workspace bash ,这是 laradock 的 docker 的工作空间

查看容器启动状态:docker-compose ps

关闭所有容器:docker-compose stop

关闭指定容器:docker stop CONTAINER ID或者NAMES

删除所有容器:docker-compose down

重新启动容器:docker start CONTAINER ID或者NAMES

重启 nginx 容器:docker-compose restart nginx

杀死所有正在运行的容器:docker kill $(docker ps -a -q)

删除所有已经停止的容器:docker rm $(docker ps -a -q)

查看本地镜像:docker images

查看本地容器:docker ps

创建镜像:docker build -t name:tag Dockerfile路径

进入容器:docker exec-it IMAGE ID或者NAMES /bin/bash

移除本地容器:docker rm CONTAINER ID或者NAMES

查看openssl版本号:openssl version

查看 nginx 的版本及编译参数:nginx -V

三、win10 中 docker 运行程序加载速度慢的问题
docker 在win10挂载目录 IO 速度慢,导致 laravel 程序加载速度慢,说明及解决方法见以下两个链接:

https://github.com/docker/for-win/issues/188

https://www.jianshu.com/p/db1c826ea98c

相关内容

php开发环境安装配置:win10+docker+Laradock(上篇)

---END---


推荐阅读
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
author-avatar
成长的人走在路上_774
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有