PHP老项目引用compose,Docker-compose构建PHP项目环境

相信初学 docker 的同学,都会有一个问题,我们都是用 docker hub 上 pull 一个镜像下来,但一个web项目,我们需要多个容器配合使用,比如一个PHP项目,需要一个 PHP 容器、nginx 容器、mysql 容器等等,那么它们之间如何关联互通呢?

之前有介绍过 Dockerfile ,虽然实现了使用一个容器包含多个服务,但我感觉编写起来稍有点复杂,并且构建比较慢,今天简单介绍下 docker-compose ,并实现php环境。

Compose 作为 Docker 官方编排工具,其重要性不言而喻,它可以让用户编写一个简单的模板文件,快速地创建和管理基于 Docker 容器的应用集群。 docker-compose 的定位是“定义和运行多个 Docker 容器的应用”,在日常工作中,经常会碰到多个容器相互配合来完成某项任务的情况。

docker-compose.ymlversion: '2.2'

services:

php:

image: php:7.4-fpm

container_name: php74

restart: always

volumes:

- ~/web:/var/www/html

networks:

csl:

ipv4_address: 172.19.0.2

composer:

image: composer

working_dir: /var/www/html

nginx:

image: nginx

container_name: nginx

restart: always

ports:

- 80:80

- 443:443

volumes:

- ~/docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf

- ~/web:/var/www/html

networks:

csl:

ipv4_address: 172.19.0.3

mysql:

image: mysql:8

container_name: mysql8

restart: always

environment:

MYSQL_ROOT_PASSWORD: 123456

networks:

csl:

ipv4_address: 172.19.0.4

networks:

csl:

driver: bridge

ipam:

config:

- subnet: 172.19.0.0/16

这个yaml配置比较简单,相信初学docker的同学也一眼能看明白,这里就不做过多赘述了。

nginx.conf:server {

listen 80;

server_name example.com;

root /var/www/html;

add_header X-Frame-Options "SAMEORIGIN";

add_header X-XSS-Protection "1; mode=block";

add_header X-Content-Type-Options "nosniff";

index index.html index.htm index.php;

charset utf-8;

location / {

try_files $uri $uri/ /index.php?$query_string;

}

location = /favicon.ico { access_log off; log_not_found off; }

location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \.php$ {

fastcgi_pass php74:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

location ~ /\.(?!well-known).* {

deny all;

}

}

启动项目:

该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

docker-compose up -d

eaee49c8f8833f9cfcf49666aac942c3.png

最后

最后浏览器直接访问127.0.0.1,查看效果

你可能感兴趣的:(PHP老项目引用compose)