macOs安装docker且在docker上部署nginx+php

ops/2025/2/21 4:52:15/

一 环境

  • 系统:macOS Sonoma 14.6
  • 芯片:Apple M3
  • docker 版本:27.2.0

二 软件安装

docker_12">2.1 docker下载:

Get Started | Docker进入官网,如图位置,点击mac版本的docker下载.

根据你电脑芯片类型来选择下载的版本

2.2安装

我们打开Docker应用程序后,会有一些选择配置,我们按照如下配置即可。

这里我们选择Accept

选择默认配置就行,Docker会自动设置一些大多数开发人员必要的配置。

这里可以选择直接跳过

出现以上的图标即可

到这里并没有正真的完成

2.3 版本查询以及问题处理
docker --version
Docker version 27.2.0, build 3ab4256

**问题一 :**如果输入这样命令出现以下情况,那么你就要去解决这些问题

docker --version
zsh:command not found:docker

那么应该怎么处理

那么你就要

cat ~/.zshrc

看看你的环境变量文件里面有没有docker

如果红色框内没有,那么依次执行

echo 'export PATH=/Applications/Docker.app/Contents/Resources/bin:$PATH' >> ~/.zshrcsource ~/.zshrc

nginxphp_80">三 部署nginx和php

nginx_82">3.1 安装nginx
sudo docker pull nginx

问题二

Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

为啥出现以上问题,因为没有配置国内镜像所以很容易导致链接失败

所以现在要配置国内镜像

进入该目录

然后找到daemon.json

进入改文件,然后将圈出来的编辑放入这个文件

"registry-mirrors": ["https://docker.211678.top","https://docker.1panel.live","https://hub.rat.dev","https://docker.m.daocloud.io","https://do.nark.eu.org","https://dockerpull.com","https://dockerproxy.cn","https://docker.awsl9527.cn"]

添加完后重启docker软件

命名、指定端口并运行nginx

sudo docker run --name mynginx -p 8080:80 -d nginx

–name mynginx 指定当前容器名称为 mynginx

-p 8080:80 将容器的 80 端口映射到主机的 8080 端口

-v ~/project/www:/usr/share/nginx/html 将主机的 ~/project/www 目录挂载到容器的 /www

-v ~/project/nginx/conf.d:/etc/nginx/conf.d 将主机的 ~/project/nginx/conf.d 目录挂载到容器的 /etc/nginx/conf.d

–link myphp:php 将 myphp 容器的网络并入 nginx 容器,实现容器间的通信

如果想将docker内的文件与docker外的文件相关关联

那么你可以在本地文件夹中创建对应文件

mkdir -p ~/project/nginx/www ~/project/nginx/logs ~/project/nginx/conf

www是项目路经

logs是nginx错误日志

conf 是nginx配置文件

可以看见nginx正常运行

接下来复制docker容器终端配置文件到宿主中

输入(ce1e83caf65f这个在上图查看安装中可见到)

docker cp ce1e83caf65f:/etc/nginx/nginx.conf ~/project/nginx/conf

可以查看一下原配置信息

接下来再运行一个新的(删除原来创建的nginx),前面是测试(开一个新的需要修改端口号和名字),输入如下:

docker run -d -p 8082:80 --name mynginx2 -v ~/project/nginx/www:/usr/share/nginx/html -v ~/project/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/project/nginx/logs:/var/log/nginx nginx

进入www创建

cd ~/project/nginx/www
vim index.html#写一个hello world
<DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>my test docker</title>
</head>
<body><h1>hello world</h1>
</body>
</html>

在网页上输入http://localhost:8082/index.html,就能看到hello Wrold

3.2 安装php

输入命令拉取PHP镜像

sudo docker pull php:8.0-fpm

命名并挂在

sudo docker run --name myphp -v ~/project/nginx/www:/www -d php:8.0-fpm

配置conf文件

mkdir ~/project/nginx/conf/conf.d
vim ~/project/nginx/conf/conf.d/code-php.conf

编辑写入配置:

server {listen       80;server_name  localhost;location / {root    /usr/share/nginx/html;         index  index.html index.htm index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}location ~ .php$ {fastcgi_pass   php:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name;include        fastcgi_params;}
}

接下来可以把前面的nginx停掉,重新运行一个并把PHP接起来

docker run --name mynginx-php -p 8081:80 -d -v ~/project/nginx/www:/usr/share/nginx/html:ro -v ~/project/nginx/conf/conf.d:/etc/nginx/conf.d:ro --link myphp:php nginx

接下来编写一个index.php

<?php
phpinfo();?>

在网址输入http://localhost:8081/index.php

我绑定的是7.4,所以显示的是7.4


http://www.ppmy.cn/ops/157017.html

相关文章

CI/CD相关概念

目录 CI/CD 蓝绿部署 回滚机制 金丝雀发布 CI/CD CI/CD&#xff08;持续集成和持续交付/部署&#xff09;是现代软件开发和运维中的重要实践&#xff0c;旨在通过自动化构建、测试、部署等流程&#xff0c;提升软件交付的速度、质量和一致性。下面详细介绍 CI/CD 的概念、…

sqli-labs靶场实录(二): Advanced Injections

sqli-labs靶场实录: Advanced Injections Less21Less22Less23探测注入点 Less24Less25联合注入使用符号替代 Less25aLess26逻辑符号绕过and/or过滤双写and/or绕过 Less26aLess27Less27aLess28Less28aLess29Less30Less31Less32&#xff08;宽字节注入&#xff09;Less33Less34Le…

使用TensorFlow和Keras构建卷积神经网络:图像分类实战指南

使用TensorFlow和Keras构建卷积神经网络&#xff1a;图像分类实战指南 一、前言&#xff1a;为什么选择CNN进行图像分类&#xff1f; 在人工智能领域&#xff0c;图像分类是计算机视觉的基础任务。传统的机器学习方法需要人工设计特征提取器&#xff0c;而深度学习通过卷积神经…

基于SeaTunnel同步数据

SeaTunnel&#xff08;原名Waterdrop&#xff09;是一个高性能、分布式、易扩展的数据集成平台&#xff0c;旨在简化大规模数据的抽取、转换和加载&#xff08;ETL&#xff09;过程。它支持从多种数据源&#xff08;如数据库、消息队列、文件系统等&#xff09;中提取数据&…

ES6 字符串、数值、数组扩展使用总结

1. 字符串的扩展方法 1.1 includes() // 判断字符串是否包含指定字符串 const str Hello World; console.log(str.includes(Hello)); // true console.log(str.includes(hello)); // false console.log(str.includes(World, 6)); // true - 从位置6开始搜索// 实际应用 func…

linux find-在指定目录下查找文件

-name<范本样式>&#xff1a;指定字符串作为寻找文件或目录的范本样式&#xff1b; -newer<参考文件或目录>&#xff1a;查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录&#xff1b; -nogroup&#xff1a;找出不属于本地主机群组识别码的文件或目…

【鸿蒙HarmonyOS Next实战开发】实现组件动态创建和卸载-优化性能

一、简介 为了解决页面和组件加载缓慢的问题&#xff0c;ArkUI框架引入了动态操作功能&#xff0c;支持组件的预创建&#xff0c;并允许应用在运行时根据实际需求动态加载和渲染组件。 这些动态操作包括动态创建组件&#xff08;即动态添加组件&#xff09;和动态卸载组件&am…

ES6-代码编程风格(数组、函数)

1 数组 使用扩展运算符&#xff08;...&#xff09;复制数组。 const itemsCopy [...items]; 使用Array.from 方法将类似数组的对象转为数组。 const foo document.querySelectorAll(.foo); const nodes Array.from(foo); 2 函数 立即执行函数可以写成箭头函数的形式…