Docker-Compose Linux系统本地部署(一)Php+Nginx
请按顺序阅读
拉取镜像
获取镜像及版本方法在之前的文档中有描述
这里我直接拉的最新版本
docker-compose.yml文件中我们加入新的service
version: "3.8"
services:
php:
container_name: my-docker-api-php
user: root
build: .
ports:
- "8038:8000"
volumes:
- .:/var/www
command: 'php artisan serve --host=0.0.0.0'
networks:
- my-docker-api
mysql:
container_name: my-docker-api-mysql
image: "mysql:latest"
ports:
- "3306:3306"
env_file:
- ./.env.docker
networks:
- my-docker-api
volumes:
- mysqlData:/var/lib/mysql
nginx:
container_name: my-docker-api-nginx
image: "nginx:latest"
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- my-docker-api
elasticsearch:
container_name: my-docker-api-elasticsearch
image: "elasticsearch:8.12.1"
ports:
- "9200:9200"
networks:
- my-docker-api
environment:
- discovery.type=single-node
- ELASTIC_PASSWORD=123456
volumes:
- esData:/usr/share/elasticsearch/data
networks:
my-docker-api:
driver: bridge
volumes:
esData:
driver: local
mysqlData:
redisData:
Mysql
- 这里我们用一个自定义名称的数据卷
mysqlData取映射容器中的数据,这里可以实现数据持久,防止容器关闭或重启后需要重新创建数据库表 - 在启动mysql时还需要为容器设置一个密码用于连接,这里新建了一个文件去存储(建议其他容器有关环境的地方都放在一起,方便使用,最好是隐藏文件),用
env_file命令进行了设置,该命令是一个数组,有其他需要配置的文件也可以添加
3. 最后加上同一个网络,映射宿主机端口3306
Elasticsearch
- 同上使用数据卷、网络、端口隐射
environment命令与env_file命令类似,只不过environment命令需要一条一条写,当环境变量多起来时不方便管理,这里用discovery.type=single-node将elasticsearch节点配置为单节点模式,ELASTIC_PASSWORD变量用于初始化密码
注:在进行连接时主机名一定要写容器的名字,宿主机域名+映射端口是无法在项目中被连接的 例:
DB_CONNECTION=mysql
DB_HOST=my-docker-api-mysql
DB_PORT=3306
DB_DATABASE=my-docker-test
DB_USERNAME=root
DB_PASSWORD=root
DB_PREFIX=d_
ELASTICSEARCH_HOST=my-docker-api-elasticsearch
ELASTICSEARCH_PORT=9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=123456
启动
docker compose up -d
连接成功即表明成功