前言:
1. 众所周知,Mac M1 如果不用Docker 对于开发者来说就是个摆设,很多软件都不支持原生的ARM内核的系统,在以下处理之前,我好像还改了啥,大概就是让mac支持intel系统的软件
2. 这个docker一旦下载用起来,没事不要升级,我因为闲着蛋疼升级了Docker,导致容器找不到共享卷,网上也没有相关解决方案,大概率是这种问题不会出现在其他系统里;
通过该link可以下载兼容mac m1核心的docker-desktop:(现在界面已经改了,我也懒得重新截图)
注意:docker要安装一个加速镜像,从阿里云账号下获取,否则下载会很慢
所有基于amd64架构核心的都加上--platform linux/amd64来运行,这样就能愉快的玩耍了:
docker search centos7 #搜索
docker images #显示所有镜像
docker pull couchbase/centos7-systemd
这里讲解下/bin/bash 和/usr/sbin/init的区别,下面的启动容器中会用到
首先,docker run -it centos 的意思是,为centos这个镜像创建一个容器
-it就等于 -i和-t,这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)
后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash。
/usr/sbin/init 启动容器之后可以使用systemctl方法
--privileged=true 获取宿主机root权限(特殊权限-)
su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。
补充一个知识点,每次启动服务只有都要手动执行一次source /etc/profile,这个很麻烦,在这里找到了解决方案
在~/.bashrc里面加一句
source /etc/profile
以上方式可以解决这个问题,这个脚本里还可以配置一些初始化的别名和脚本
这是一个docker下启动bug,虚拟机完全没有这个问题,我去找原因没找到,知道的人可以留评
建议使用lnmp一键安装php环境
个人还是喜欢先运行好docker,然后进入后,采用一键lnmp的方式安装,因为后面要用到nginx服务器,lnmp一键安装链接(这个可以节省你太多太多时间,linux下装软件是一个很痛苦的过程,千万别去尝试,除非你是运维):lnmp、lamp、lnmpa一键安装包(Updated: 2022-03-14) | Linux运维笔记
这里有各种php版本绝对够用了,还有php完整版的扩展,非常方便,虽然没有python的conda那么屌,但也是解决方案。
装完后,重启后环境变量不能自动引入,跟虚拟机还是有点差别:我们手动来搞
vim ~/.bashrc 尾部添加 source /etc/profile
以后重启后系统就会自动载入环境变量了。
将虚拟机配置成ssh方式可以连接:
第一步,就是暴露端口下方的连接中已经将端口暴露为1022了;
第二步,就是一轮ssh操作,具体参考链接:
(centos7)创建支持ssh服务的docker镜像_还好还好啦的博客-CSDN博客_docker 创建支持sshd的centos 镜像
yum -y install passwd openssl openssh-server openssh-clients
mkdir /var/run/sshd/
sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
#以下keygen不要加口令密码,不然你链接时要输入一堆密码,比较恶心
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
/usr/sbin/sshd -D & #报个UsePAM啥的不能用警告,直接忽略
#改密码,就可以登陆了
passwd
解决登录特别慢的方法
# 编辑配置文件
vim /etc/ssh/sshd_config
# 关闭DNS解析
UseDNS no
# 关闭GSS认证(不过我发现不关闭这个,问题也能解决)
GSSAPIAuthentication no
phpstorm中建立远程连接:
配置完成后,本地就可以使用远程的php解释器了,此外采用docker共享文件夹的方式,可以做到代码修改的是同一个位置,达到了无需再将phpstorm上传到docker中去
使用php56调试:
唯一注意点是,docker机器在mac上无法桥接,这个有点二逼,但没办法,只有用给定的host,docker才能将远程调试信息发过来,如图配置不能少:
此时右键就可以调试了。
下面给出一种启动方式,早之前参数顺序不是必须的要求的,但现在参数的顺序好像按照下面的方式才不会报错,否则会报端口设置无效等问题,注意参数间只能有一个空格
docker run -dit --platform linux/amd64 --privileged -p 2022:22 -p 8083:80 -p 9505:9501 --name=php72 -v /Users/senwang/workspace:/home 8ef27e80b336 /usr/sbin/init
为啥不是/bin/bash,因为/usr/sbin/init可以初始化sshd,否则你设置的sshd启动后,不是自动启动sshd服务,外界链接,只能通过docker命令行链接进去,这样远程连接解释器就多了一个步骤
这个按钮省去了你手输命令的时间,当然有些打字不快,还喜欢耗费时间输入脚本的可以忽略图形界面操作。
下面是Elaticsearch的运行脚本方式
# elasticsearch docker 配置
docker run -dit --platform linux/amd64 --privileged --name elastic -v /Users/senwang/workspace:/home -p 2202:22 -p 8088:80 -p 15672:15672 -p 9200:9200 -p 9300:9300 c13a516c5bea /usr/sbin/init
php5.6.40中xdebug没有附带安装解决方案:
这里本来不应该是个问题的,可能40是最新版,直接通过pecl无法安装,很神奇,经过比对,xdebug2.5.4对应php5.6.40,从github上找到xdebug,进行编译安装:
GitHub - xdebug/xdebug at XDEBUG_2_5_4 下载zip,解压,然后按照github的步骤,一步步搞下来,就装成功了
在配置xdebug.ini时,参照以下截图,docker访问宿主机时必须是要docker自己提供的host才能访问,再次强调
[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=docker.for.mac.host.internal
xdebug.remote_port=9000
配置完毕后,就可以用远程解释器调试代码了
进如docker命令:
docker exec -it 容器ID /bin/bash
通过docker ps -a 可以查看容器ID
学习docker入门,直接看bilibili的狂神说docker,通俗易懂,看完就会了:【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili
安装composer 提示PHP Warning: copy(): SSL operation failed with code 1. OpenSSL Error messages:
问题描述
#php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
PHP Warning: copy(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in Command line code on line 1
PHP Warning: copy(): Failed to enable crypto in Command line code on line 1
PHP Warning: copy(https://install.phpcomposer.com/installer): failed to open stream: operation failed in Command line code on line 1
解决方法
下载证书http://curl.haxx.se/ca/cacert.pem
wget http://curl.haxx.se/ca/cacert.pem
或者使用网页下载再上传至linux
mkdir -p /usr/local/openssl/ssl/certs/
mv cacert.pem /usr/local/openssl/ssl/certs/cacert.pem
修改php.ini
;openssl.capath=
openssl.cafile=/usr/local/openssl/ssl/certs/cacert.pem
问题解决
重新安装composer即可