带有M1专业芯片的新Macbook Pro。图片来源:dlxmedia.huonUnsplash。
最近几年,苹果公司发布了一项新技术,让很多人感到惊讶。在我看来,名为M1的新集成芯片成功地提供了惊人的性能和最佳的成本效益比。但一项新技术仍然需要一段时间才能达到成熟。这很简单:没有多少应用程序在这种环境下原生运行。是的!,这个好消息也伴随着坏消息。但苹果并没有放过我们,他们给了我们一个 "临时 "的解决方案,叫做Rosetta。
用例架构
我们将有两个应用程序,一个后端使用laravel, 一个前端使用React.Js。后端laravel应用程序将访问MySQL数据库,它也运行在Docker容器中。
用例架构图。
Docker桌面安装
首先,让我们用苹果芯片下载并安装Docker Dekstop。安装完成后,你可以注意到Docker Desktop在菜单栏中的新图标。
菜单栏中的Docker Desktop图标.
使用Docker设置你的Laravel应用程序
在你的项目中创建两个文件, 即Dockerfile和docker-compose.yml。
FROM php:7.2-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable mysqli pdo pdo_mysql
RUN a2enmod rewrite
- 我使用的镜像是php:7.2-apache.你可以根据你的要求来调整。这里我使用PHP7.2只是因为我想适应生产环境的配置。
- 这个图像仍然是非常基本的。我需要几个PHP扩展(库),如MySQL驱动。最后我需要的是Url Rewrite模块,以确保Laravel的正常工作。
version: '3.8'
volumes:
composer-vol:
services:
web:
build: .
container_name: web-dashboard-api
restart: unless-stopped
volumes:
- './public:/var/www/html'
- './:/var/www/'
ports:
- 82:80
networks:
- ptpn-database_default
networks:
ptpn-database_default:
external: true
- 使用的图像已经在Docker文件中提到了.我们只需要确保这一行在我们的配置中存在: build: .
- 我给这个容器起了个名字叫web-dashboard-api,然后用82号端口发布网络。
- 容器中的公共文件夹位于html文件夹中。所以我们需要把public文件夹映射到html文件夹。'./public:/var/www/html'。它还需要另一部分,也就是位于super文件夹中的源代码和库。所以我们需要映射当前文件夹:'./:/var/www/'。
- 最后,因为MySQL数据库也在容器中运行,我们需要在容器之间建立一个网络桥。注意这个名字的部分:tpn-database_default。
安装依赖性并编译起来
- 在你的项目文件夹中运行 composer install 命令。
- 运行docker compose:docker compose -f "docker-compose.yml" up -d --build,然后在Docker Desktop的容器部分检查你的应用程序。
Docker Desktop的容器部分。
使用Docker设置你的React.JS应用程序
在你的项目中创建两个文件,即Dockerfile和docker-compose.yml。
FROM node:16.5
# RUN apt-get update
# RUN apt-get install -y python2
COPY . .
CMD ["yarn", "start"]
- 我使用的镜像是node:16.5。我建议你使用node的LTS版本。我在最新版本中收到了一堆错误。
- 如果你发现与python有关的错误,用apt-get取消第二和第三行的注释。
- 接下来,我们需要将所有文件复制到容器中,并运行应用程序。
version: '3.8'
services:
web:
build: .
container_name: web-dashboard-reactjs
restart: unless-stopped
ports:
- 3000:3000
- 使用的镜像已经在Docker文件中提到。我们只需确保这一行在我们的配置中存在:build: .
- 我给容器起了个名字叫web-dashboard-reactjs,用3000端口发布网络。
安装依赖项并编译起来
- 我没有使用Rosetta,也不打算使用它。我因此得到了很多错误,比如说。错误。Node Sass尚不支持你当前的环境。OS X 不支持的架构(arm64)与不支持的运行时间(88)更多关于支持哪些环境的信息请看。
- 解决办法:(a)在本地,确保你使用的是node的LTS版本;(b)运行这个命令npm install node-sass@npm:sass。
- 在你的项目文件夹中运行这些命令 rm -R node_modules 和 composer install。
- 运行docker compose:docker compose -f "docker-compose.yml" up -d --build,然后在Docker Desktop的容器部分检查你的应用程序。
Docker Desktop的容器部分。
总结
- 使用Docker构建应用程序使很多事情变得简单,我们可以用Docker Desktop轻松设置Laravel和React.JS。
- 我们可以将React.JS应用程序部署到Macbook Pro M1的容器中,而无需使用Rosetta。
- 苹果的硅芯片速度很快,但也有一些缺点。作为一个程序员,确保我们在购买这台漂亮的电脑之前考虑好一切。