M1 Mac Docker Compose Dnmp 开发环境配置
目录结构
|
|
Docker 安装
官方安装教程:https://docs.docker.com/desktop/install/mac-install/
我用的手动安装
手动下载安装
点击以下链接下载 Install Docker Desktop on Mac
选择适合自己的下载
安装完成打开 Docker Desktop,完成基本设置和入门教程(可以跳过)。
在终端可以使用以下命令检查安装的 Docker 的版本
1 2
╰─ docker -v Docker version 23.0.5, build bc4487a
使用 Homebrew 安装
https://yeasy.gitbook.io/docker_practice/install/mac
1
brew install --cask docker
或者 https://www.runoob.com/docker/macos-docker-install.html
1 2 3 4 5 6 7 8 9 10 11 12
$ brew install --cask --appdir=/Applications docker ==> Creating Caskroom at /usr/local/Caskroom ==> We'll set permissions properly so we won't need sudo in the future Password: # 输入 macOS 密码 ==> Satisfying dependencies ==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg ######################################################################## 100.0% ==> Verifying checksum for Cask docker ==> Installing Cask docker ==> Moving App 'Docker.app' to '/Applications/Docker.app'. 🍺 docker was successfully installed!
镜像加速
Docker 镜像加速:https://www.runoob.com/docker/docker-mirror-acceleration.html
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 科大镜像:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com/
- 七牛云加速器:https://reg-mirror.qiniu.com
- 百度:https://mirror.baidubce.com
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
登陆后,左侧菜单点击“镜像工具”中“镜像加速器”就可以看到你的专属地址了。
配置镜像(阿里云镜像加速器页面下边也会有说明)
建议多添加几个国内的镜像,如果有不能使用的,会切换到可以使用个的镜像来拉取。
在任务栏点击 Docker Desktop 应用图标 -> Perferences,在左侧导航菜单选择 Docker Engine,在右侧输入栏编辑 json 文件。
将上个步骤中的加速地址(https://<你的ID>.mirror.aliyuncs.com),加到
registry-mirrors
的数组里,没有的话添加一个 key;点击 Apply & Restart 按钮,等待 Docker 重启并应用配置的镜像加速器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "features": { "buildkit": true }, "registry-mirrors": [ "https://<你的ID>.mirror.aliyuncs.com", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] }
检查加速器是否生效
在命令行执行
1
docker info
如果从结果中看到了如下内容,说明配置成功。
Registry Mirrors: https://hub-mirror.c.163.com/ https://mirror.baidubce.com/
安装 Nginx
关闭本地 nginx(如果开启了的话,且恰好占用 80 端口)
1
sudo nginx -s stop
直接执行一下命令默认拉取最新的镜像
1
docker pull nginx
根据官方文档中 Complex configuration 部分
后台启动一个名为 tmp-nginx 的容器
1
docker run --name tmp-nginx -d nginx
将 nginx 整个配置目录 copy 到本地一份,
/Users/username/dockerServer/etc/
根据自己的实际目录换成自己的,没有的话需要手动创建1
docker cp tmp-nginx:/etc/nginx ~/dockerServer/etc/nginx
删除刚刚新建的容器
1
docker rm -f tmp-nginx
运行一个 html 文件,查看效果
首先准备一个 html 文件:
~/dockerServer/www/hello.html
,然后执行命令1 2 3
docker run --name run-nginx -p 80:80 \ -v ~/dockerServer/www:/usr/share/nginx/html:ro \ -d nginx
命令说明:
后台启动一个名为 run-nginx 的容器,将容器的 80 端口映射到主机的 80 端口
主机(宿主)端口:容器端口
,绑定本地的一个目录(www)到 nginx 容器中的 web 目录(html)容器中的 web 目录可以到
~/dockerServer/etc/nginx/conf.d/default.conf
中查看浏览器访问 http://localhost/hello.html 看看效果
删除容器,后面我们改完配置再来启动它。
1
docker rm -f run-nginx
安装 php:7.3-fpm
官方仓库地址:https://hub.docker.com/_/php
Dockerfile 一直没成功,故直接pull
,扩展之后再说
|
|
拷贝出 nginx 配置一份,将 php 的相关配置也拷贝到本地。
|
|
修改 nginx、php 配置文件
修改 nginx 配置
拷贝一份 default.conf
1 2
cd ~/dockerServer/etc/nginx/conf.d cp default.conf phpinfo.conf
在新文件中加入以下内容
1 2 3 4 5 6 7
location ~ \.php$ { fastcgi_pass php-fpm-container:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; include fastcgi_params; }
php-fpm-container
这个是咱们自己创建的 php-fpm 容器的别名,具体是在启动 nginx 的时候指定的,后边会提到修改 php 相关配置
进入
~/dockerServer/etc/php7.3
下,将 php.ini-development 复制改名为 php.ini,配置内容根据自己情况修改即可。1
cd ~/dockerServer/etc/php7.3
1
cp php.ini-development php.ini
启动 php、nginx 容器
docker run 启动
启动 php-fpm
1 2 3 4 5 6 7 8
docker run --name run-my-php-fpm \ -p 9000:9000 \ -v ~/dockerServer/www:/var/www/html \ -v ~/dockerServer/etc/php7.3/php.ini:/usr/local/etc/php/php.ini \ -v ~/dockerServer/etc/php7.3/www.conf:/usr/local/etc/php-fpm.d/www.conf \ -v ~/dockerServer/etc/php7.3/conf.d:/usr/local/etc/php/conf.d \ -v ~/dockerServer/log/php7.3:/var/log/php \ -d php:7.3-fpm
~/dockerServer/log/php 文件如果不存在需要手动创建
启动 nginx
1 2 3 4 5 6 7 8
docker run --name run-nginx \ -p 80:80 \ --link run-my-php-fpm:php-fpm-container \ -v ~/dockerServer/www:/usr/share/nginx/html \ -v ~/dockerServer/etc/nginx/conf.d:/etc/nginx/conf.d \ -v ~/dockerServer/etc/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v ~/dockerServer/log/nginx:/var/log/nginx \ -d nginx
~/dockerServer/log/nginx 文件如果不存在需要手动创建
说明:
- 将配置目录、日志目录和 web 目录都分别进行了绑定,方便在本地环境中修改。
- 还记得上面提到的 nginx 中有个配置填写的
php-fpm-container
吗?实际上就是在这里指定的,连接两个容器,并给 php-fpm 容器起了个别名,配置中通过别名访问。
PHP7.3 Dockerfile
创建 Dockerfile 文件
|
|
使用脚本
原始方法安装 imagick 扩展一直不成功
GitHub地址:https://github.com/mlocati/docker-php-extension-installer
Dockerfile 内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
FROM php:7.3-fpm LABEL xuweidong="determined_xw@126.com" ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions && \ install-php-extensions gd xdebug redis mcrypt memcached swoole zip RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \ install-php-extensions imagick RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm RUN docker-php-ext-install -j$(nproc) mysqli pdo pdo_mysql WORKDIR /tmp RUN curl -s https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ # 容器启动时执行指令 CMD ["php-fpm"]
创建镜像
1
docker build -t my-php-fpm:myphp.7.3 .
启动容器
1
docker run --name tmp-my-php-fpm -d my-php-fpm:myphp.7.3
进入容器
1
docker exec -it tmp-my-php-fpm bash
镜像创建完成之后,可以像上面我们拷贝出 nginx 配置一样,将 php 的相关配置也拷贝到本地。
1 2 3 4 5
docker cp tmp-my-php-fpm:/usr/local/etc/php/php.ini-development ~/dockerServer/etc/php7.3 docker cp tmp-my-php-fpm:/usr/local/etc/php-fpm.d/www.conf ~/dockerServer/etc/php7.3 docker cp tmp-my-php-fpm:/usr/local/etc/php/conf.d/ ~/dockerServer/etc/php7.3 # 删除容器 docker rm -f tmp-my-php-fpm
PHP配置文件
1 2
cd ~/dockerServer/etc/php7.3/ cp php.ini-development php.ini
修改 xdebug 的配置文件,加入一下内容
1
vim ~/dockerServer/etc/php7.3/conf.d/docker-php-ext-xdebug.ini
添加
1 2 3 4 5 6 7
xdebug.mode=debug xdebug.remote_handler = dbgp xdebug.client_host = host.docker.internal xdebug.client_port = 9001 xdebug.log = /var/log/php/xdebug.log xdebug.idekey = PHPSTOR
以上设置主要是开启 xdebug 的远程调试模式,因为 php-fpm 使用了 9000 端口,所以这里我们把 xdebug 的端口改为了 9001;
host.docker.internal
是 docker 18.03 新加入的,可以解析获得宿主机的 ip 地址,这样就不用写死 ip 地址了。启动 php-fpm 容器
1 2 3 4 5 6 7 8
docker run --privileged --name run-my-php-fpm \ -p 9000:9000 \ -v ~/dockerServer/www:/var/www/html \ -v ~/dockerServer/etc/php7.3/php.ini:/usr/local/etc/php/php.ini \ -v ~/dockerServer/etc/php7.3/www.conf:/usr/local/etc/php-fpm.d/www.conf \ -v ~/dockerServer/etc/php7.3/conf.d:/usr/local/etc/php/conf.d \ -v ~/dockerServer/log/php7.3:/var/log/php \ -d my-php-fpm:myphp.7.3
启动 nginx 容器
1 2 3 4 5 6 7
docker run --name run-nginx \ -p 80:80 \ --link run-my-php-fpm:php-fpm-container \ -v ~/dockerServer/www:/usr/share/nginx/html \ -v ~/dockerServer/etc/nginx:/etc/nginx \ -v ~/dockerServer/log/nginx:/var/log/nginx \ -d nginx
复制一个 Nginx 配置文件
1 2 3
cd ~/dockerServer/etc/nginx/conf.d cp default.conf phpinfo.conf vim phpinfo.conf
参考以下内容修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { root /var/www/html; fastcgi_pass php-fpm-container:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
修改完配置文件,重启nginx容器
1
docker restart run-nginx
在
~/dockerServer/www
中创建一个 phpinfo.php 文件,输出 php 信息,通过 http://localhost/phpinfo.php 访问来查看。项目配置 nginx 参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
server { listen 80; server_name dev-www.sx1211.com; root /usr/share/nginx/html/laravel10/public; index index.php index.html index.htm; location / { if (!-e $request_filename) { rewrite ^/index.php(.*)$ /index.php?s=$1 last; rewrite ^(.*)$ /index.php?s=$1 last; break; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { root /var/www/html/laravel10/public; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php-fpm-container:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Nginx Dockerfile
|
|
Dockerfile 内容
|
|
构建镜像
|
|
启动容器
|
|
安装 Redis
Dockerfile
参考:https://www.cnblogs.com/kendoziyu/p/15814418.html
|
|
Dockerfile 内容
|
|
配置
下载:https://github.com/redis/redis/blob/7.0.5/redis.conf
|
|
修改配置
|
|
注释bind 127.0.0.1 -::1
,解绑 local ip
|
|
或者
|
|
确保 daemonize,为no(默认) ,否则通过docker -d
方式不能启动 redis, (非 docker 方式,需要改为yes
实现后台启动)
|
|
外网访问
|
|
设定密码
|
|
使用 aof 持久化方式
|
|
创建镜像
|
|
创建启动容器,由于本地 redis 占用 6379 端口,故映射 6380
|
|
注意:项目不能使用 IP + 端口号 的方式链接 redis
解决:
1
vim .env
删除
REDIS_PORT
,把REDIS_HOST
的值改为redis
1 2
REDIS_HOST=redis # REDIS_PORT=6380
参考:https://stackoverflow.com/questions/42360356/docker-redis-connection-refused/42361204
写个 PHP 脚本测试
|
|
成功
╰─ php test.php Name: John, Age: 30 User Info: Array ( [name] => Alice [age] => 25 [email] => alice@example.com )
安装 MySQL
配置
mysql:8.0.34
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 拉取镜像 docker pull mysql:8.0.34 # 启动容器 docker run -p 3306:3306 --name tmp-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.34 # 复制配置文件 mkdir -p ~/dockerServer/etc/mysql8.0.34/ docker cp tmp-mysql:/etc/my.cnf ~/dockerServer/etc/mysql8.0.34/ # 删除容器 docker rm -f tmp-mysql # 进入容器 docker exec -it tmp-mysql bash # 进入mysql mysql -u root -p # 查看mysql版本 select version();
启动容器:挂载配置文件、日志、数据
1 2 3 4 5 6 7 8
docker run -p 3306:3306 \ --name run-mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -v ~/dockerServer/etc/mysql8.0.34/my.cnf:/etc/my.cnf \ -v ~/dockerServer/log/mysql8.0.34:/var/log \ -v ~/dockerServer/data/mysql8.0.34:/var/lib/mysql \ -v ~/dockerServer/data/mysql-files8.0.34:/var/lib/mysql-files \ -d mysql:8.0.34
mysql:5.7.41
1
docker pull mysql:5.7.43
但是,由于 m1 直接从 dockerhub 拉取镜像报错,查了相关文章说,docker 官方仓库没有适配 M1 的镜像
no matching manifest for linux/arm64/v8 in the manifest list entries
解决方式:
在 dockerhub 搜索
mysql/mysql-server
https://hub.docker.com/r/mysql/mysql-server/tags?page=1&name=5.7但是,docker-compose 方式启动,可以进入容器,但是无法连接,Dockerfile 可以连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# 拉取镜像 docker pull mysql/mysql-server:5.7.41 # 启动容器 docker run -p 3307:3306 --name tmp-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7.41 # 复制配置文件 mkdir -p ~/dockerServer/etc/mysql5.7.41/ docker cp tmp-mysql:/etc/my.cnf ~/dockerServer/etc/mysql5.7.41/ # 进入容器 docker exec -it tmp-mysql bash # 进入mysql mysql -u root -p # 查看mysql版本 select version(); # 删除容器 docker rm -f tmp-mysql
Dockerfile
mysql:8.0.34
1 2 3
cd ~/dockerServer/compose.dockerfile mkdir mysql8.0.34 && cd mysql8.0.34 vim Dockerfile
Dockerfile 文件内容
1 2 3 4 5 6 7 8 9 10 11
FROM mysql:8.0.34 # 维护者信息 LABEL xuweidong="determined_xw@126.com" # 时区 ENV TZ Asia/Shanghai RUN date -R # 容器启动时执行指令 CMD ["mysqld"]
构建镜像
1
docker build -t my-mysql:mysql-8.0.34 .
启动容器
1 2 3 4 5 6 7 8
docker run -p 3306:3306 \ --name run-mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -v ~/dockerServer/etc/mysql8.0.34/my.cnf:/etc/my.cnf \ -v ~/dockerServer/log/mysql8.0.34:/var/log \ -v ~/dockerServer/data/mysql8.0.34:/var/lib/mysql \ -v ~/dockerServer/data/mysql-files8.0.34:/var/lib/mysql-files \ -d my-mysql:mysql-8.0.34
mysql/mysql-server:5.7.41
1 2 3
cd ~/dockerServer/compose.dockerfile mkdir mysql5.7.41 && cd mysql5.7.41 vim Dockerfile
Dockerfile 文件内容
1 2 3 4 5 6 7 8 9 10 11
FROM mysql/mysql-server:5.7.41 # 维护者信息 LABEL xuweidong="determined_xw@126.com" # 时区 ENV TZ Asia/Shanghai RUN date -R # 容器启动时执行指令 CMD ["mysqld"]
构建镜像
1
docker build -t my-mysql:mysql-5.7.41 .
启动容器
1 2 3 4 5 6 7 8
docker run -p 3307:3306 \ --name run-mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -v ~/dockerServer/etc/mysql5.7.41/my.cnf:/etc/my.cnf \ -v ~/dockerServer/log/mysql5.7.41:/var/log \ -v ~/dockerServer/data/mysql5.7.41:/var/lib/mysql \ -v ~/dockerServer/data/mysql-files5.7.41:/var/lib/mysql-files \ -d my-mysql:mysql-5.7.41
安装 PHP8.1
配置文件
|
|
Dockerfile
|
|
Dockerfile 文件内容
|
|
Docker Compose
使用
|
|
|
|
填入以下内容
|
|
启动
|
|
使用 docker 命令执行容器的命令
docker exec -it 容器名称 实际命令
|
|
项目中配置修改
设置自定义路径的都需要修改
admin .env 配置文件修改
|
|
teacher_center .env 配置文件修改
|
|
Elasticsearch7.9.1
下载 es
|
|
启动 es
|
|
docker 启动 elasticsearch 报错:
——ERROR: Elasticsearch did not exit normally - check the logs at xxx 解决:https://blog.csdn.net/weixin_40816738/article/details/121617618 在运行命令中添加
-e "discovery.type=single-node"
discovery.type (静态)指定 Elasticsearch 是否应形成多节点集群。默认情况下,Elasticsearch 在形成集群时会发现其他节点,并允许其他节点稍后加入集群。如果discovery.type
设置为single-node
,Elasticsearch 将形成单节点集群并抑制 所设置的超时cluster.publish.timeout
。有关何时可以使用此设置的更多信息,请参阅单节点发现。
来源:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/modules-discovery-settings.html
拷贝配置文件
|
|
删除容器
|
|
ik 分词器
手动下载:https://github.com/medcl/elasticsearch-analysis-ik/releases?page=7
|
|
以下适用于 amd6 4架构系统,M1没有适合的 Kibana 镜像
安装 kibana, 自定义网络
Error response from daemon: user specified IP address is supported on user defined networks only.
仅在用户定义的网络上支持用户指定的IP地址。
创建自定义网络
|
|
启动容器时,配置固定IP
|
|
安装 kibana7.9.1
|
|
启动,指定 es 的IP,配置网络
|
|
M1 本地安装Kibana
可能需要安装jdk1.8
下载 JDK1.8
可以到Java Downloads | Oracle下载,但是 Oracle 需要登录或者注册,然后才能下载,注册一个就好了。
安装 java 8
查看当前的 Java 版本
1
java -version
启动 es
|
|
安装
点击 View past releases,选择和已安装的 ES 版本相同的版本。
解压,默认在下载目录(也可以放到自己想放的目录),进入目录
|
|
本地 Kibana 访问其他的机器的 es
配置文件: /config/kibana.yml
修改 elasticsearch.hosts
的值
|
|
Dockerfile 添加es
编写 Dockerfile
1 2 3
cd ~/dockerServer/compose.dockerfile/es7.9.1 cd es7.9.1 vim Dockerfile
1 2 3 4 5 6 7 8 9 10
FROM elasticsearch:7.9.1 # container creator LABEL maintainer="liu_xiao_guo@yahoo.com" # copy the configuration file into the container # COPY elasticsearch.yml /usr/share/elasticsearch/config # expose the default Elasticsearch port EXPOSE 9200 9300
启动测试
1
docker build -t my-es:7.9.1 .
1 2 3 4 5 6 7 8
docker run -p 9200:9200 -p 9300:9300 \ --restart=always \ --name=elasticsearch7.9.1 \ -e "discovery.type=single-node" \ -v ~/dockerServer/data/es7.9.1:/usr/share/elasticsearch/data \ -v ~/dockerServer/etc/es7.9.1/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v ~/dockerServer/plugins/es7.9.1/ik:/usr/share/elasticsearch/plugins \ -d my-es:7.9.1
编写 docker-compose.yml
-e “discovery.type=single-node” 加入配置文件
1
vim ~/dockerServer/etc/es7.9.1/elasticsearch.yml
1
discovery.type: single-node
1
vim ~/dockerServer/compose.dockerfile/docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
version: "3" services: nginx: build: ./nginx ports: - "80:80" restart: always tty: true container_name: nginx volumes: - ~/dockerServer/www:/usr/share/nginx/html - ~/dockerServer/log/nginx:/var/log/nginx - ~/dockerServer/etc/nginx/conf.d:/etc/nginx/conf.d - ~/dockerServer/etc/nginx/nginx.conf:/etc/nginx/nginx.conf networks: - lnmp-networks mysql8.0.34: build: ./mysql8.0.34 container_name: mysql8.0.34 tty: true restart: always ports: - "3306:3306" volumes: - ~/dockerServer/data/mysql8.0.34:/var/lib/mysql - ~/dockerServer/data/mysql-files8.0.34:/var/lib/mysql-files - ~/dockerServer/etc/mysql8.0.34/my.cnf:/etc/my.cnf - ~/dockerServer/log/mysql8.0.34:/var/log environment: MYSQL_ROOT_PASSWORD: 123456 networks: - lnmp-networks redis: build: ./redis container_name: redis tty: true restart: always ports: - "6380:6379" volumes: - ~/dockerServer/etc/redis/redis.conf:/etc/redis.conf - ~/dockerServer/data/redis:/data - ~/dockerServer/log/redis:/var/log networks: - lnmp-networks php7.3: build: ./php7.3 tty: true restart: always container_name: php7.3 ports: - "9000:9000" volumes: - ~/dockerServer/www:/var/www/html - ~/dockerServer/log/php7.3:/var/log/php - ~/dockerServer/etc/php7.3/php.ini:/usr/local/etc/php/php.ini - ~/dockerServer/etc/php7.3/www.conf:/usr/local/etc/php-fpm.d/www.conf - ~/dockerServer/etc/php7.3/conf.d:/usr/local/etc/php/conf.d depends_on: - nginx networks: - lnmp-networks php8.1: build: ./php8.1 tty: true restart: always container_name: php8.1 ports: - "9081:9000" volumes: - ~/dockerServer/www:/var/www/html - ~/dockerServer/log/php8.1:/var/log/php - ~/dockerServer/etc/php8.1/php.ini:/usr/local/etc/php/php.ini - ~/dockerServer/etc/php8.1/www.conf:/usr/local/etc/php-fpm.d/www.conf - ~/dockerServer/etc/php8.1/conf.d:/usr/local/etc/php/conf.d depends_on: - nginx networks: - lnmp-networks es7.9.1: build: ./es7.9.1 tty: true restart: always container_name: elasticsearch7.9.1 ports: - "9200:9200" - "9300:9300" volumes: - ~/dockerServer/data/es7.9.1:/usr/share/elasticsearch/data - ~/dockerServer/etc/es7.9.1/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - ~/dockerServer/plugins/es7.9.1/ik:/usr/share/elasticsearch/plugins networks: - lnmp-networks networks: lnmp-networks:
1
docker-compose up -d
项目中连接 es
TP 使用容器名称
1 2 3 4 5
SCOUT_DRIVER=elasticsearch ELASTICSEARCH_HOST=elasticsearch7.9.1 ELASTICSEARCH_PORT= ELASTICSEARCH_USER= ELASTICSEARCH_PASS=
Laravel 中可以直接用“IP+端口号”
1 2 3 4 5
SCOUT_DRIVER=elasticsearch ELASTICSEARCH_HOST=localhost ELASTICSEARCH_PORT=9200 ELASTICSEARCH_USER= ELASTICSEARCH_PASS=
PHP 安装 zip 扩展
修改 PHP 的 Dockerfile
解决上传文件报错
ZipArchive library is not enabled
1
vim ~/dockerServer/compose.dockerfile/php7.3/Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
FROM php:7.3-fpm LABEL xuweidong="determined_xw@126.com" ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions && \ install-php-extensions gd xdebug redis mcrypt memcached swoole zip RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \ install-php-extensions imagick RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba pcntl shmop sysvmsg sysvsem sysvshm RUN docker-php-ext-install -j$(nproc) mysqli pdo pdo_mysql # 容器启动时执行指令 CMD ["php-fpm"]
然后在对应的 php.ini 开启扩展
1
extension=zip
PHP 镜像中安装 composer
php7.3
|
|
php8.1
|
|
写入
|
|
原文
https://mycherish.github.io/m1-mac-docker-compose-dnmp/