nik*_*las 5 php lamp docker docker-compose
我最近从 Wamp(wampserver)搬到了 Docker(Windows 主机)。使用 wamp 时,我能够拥有多个项目,例如以下文件结构
- wamp64
- www/
- project1/
- project2/
- ....
Run Code Online (Sandbox Code Playgroud)
在 wamp 的 Apache 上,我定义了几个虚拟主机,所有项目都使用 wamp 的数据库,每个都有自己的架构。
因此,在必要时通过访问类似 url或相应的虚拟主机来切换上下文从project1、project2到project3等是很常见的http://localhost/projectX。
正如我目前所见,这在 Docker 上似乎并不那么简单。我的第一个方法是在每个项目上设置一个不同的 Docker
- www/
- project1/
- dockerfile & docker-compose
- project2/
- dockerfile & docker-compose
- projectX/
- dockerfile & docker-compose
- data // this is where mysql data lie
Run Code Online (Sandbox Code Playgroud)
我认为,与我习惯使用 wamp 的相比,这似乎不太有效,因为每次我想更改上下文时,我都必须使用docker-compose stop我当前正在工作docker-compose up的项目和我想切换到的项目,反之亦然.
我尝试了另一种方法,在单个 apache-php 容器(整个 www 文件夹)中运行所有项目
- www/
dockerfile & docker-compose
- project1/
- project2/
Run Code Online (Sandbox Code Playgroud)
这可以让我同时拥有所有项目,但是使用这种方法,我面临两个严重的问题。
第一种方法中的 docker-compose 文件如下所示
version: '3'
services:
project1:
build:
context: . // contents of specific project directory
dockerfile: .docker/Dockerfile
image: project1
ports:
– 80:80
volumes:
– .:/app/project1
links:
– mysql
mysql:
image: mysql:5.7
ports:
– 13306:3306
environment:
MYSQL_DATABASE: docker
MYSQL_USER: docker
MYSQL_PASSWORD: docker
MYSQL_ROOT_PASSWORD: docker
volumes:
- ../data:var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
而我在第二种方法中的 docker-compose 文件看起来像这样
version: '3'
services:
web-project:
build:
context: . // contents of www directory
dockerfile: .docker/Dockerfile
image: web-project
ports:
– 80:80
volumes:
– /project1:/app/project1
– /project2:/app/project2
– /projectX:/app/projectX
links:
– mysql
mysql:
image: mysql:5.7
ports:
– 13306:3306
volumes:
- /data:var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
参考 mysql 数据持久化Docker-Compose 持久化数据 MySQL
我认为对您来说最好的解决方案是在它自己的容器中运行每个项目。由于容器(应该)是轻量级的并且易于上下移动,因此这样做的开销应该是最小的。
\n\n我将展示的内容与第一种方法的区别在于 docker-compose 文件将为您编排容器。因此,它应该允许所有容器(项目)同时与数据库进行通信。(鉴于您的项目不会不断地相互覆盖,并导致死锁)
\n\n文件夹结构:
\n\n- www/\n docker-compose.yml\n - project1/\n Dockerfile\n - project2/\n Dockerfile\nRun Code Online (Sandbox Code Playgroud)\n\nDocker 组合
\n\nversion: '3'\nservices:\n project1:\n build:\n context: /project1 #automatically finds Dockerfile\n container_name: project1\n ports:\n \xe2\x80\x93 8081:80\n volumes:\n \xe2\x80\x93 .:/app/project\n links:\n \xe2\x80\x93 mysql\n project2:\n build:\n context: /project2 #automatically finds Dockerfile\n container_name: project2\n ports:\n \xe2\x80\x93 8082:80\n volumes:\n \xe2\x80\x93 .:/app/project\n links:\n \xe2\x80\x93 mysql\n ...\n mysql:\n image: mysql:5.7\n ports:\n \xe2\x80\x93 13306:3306\n volumes:\n - /data:var/lib/mysql\nRun Code Online (Sandbox Code Playgroud)\n\n然后,当您运行时,docker-compose up它将在同一网络中启动两个项目容器和一个数据库容器。请注意,每个项目都在其自己的端口上运行。因此,您需要记住哪个端口链接到哪个容器。
| 归档时间: |
|
| 查看次数: |
4221 次 |
| 最近记录: |