18年刚出来实习的时候就搭建过lnmp开发环境,教程为docker 搭建LAMP开发环境,拉的是一个集成的lnmp环境,今天使用mysql、nginx、php的镜像来搭建多个容器的php-fpm环境。
只是单纯的记录步骤,不用知道为什么,照着执行就对了。无脑操作
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
systemctl status docker
sudo systemctl start docker(一般都启动了,没启动在执行这个)
sudo curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
拉取镜像前,咱们设置一下docker加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://5a88fb64.m.daocloud.io
这里使用到的php是7.1版本的,后续在更新一个最新版本的7.3的docker-compose.yml吧。然后mysql用的还是5.7的,刚开始使用了mysql8的,相比于5.7,它的性能高很多,但也会有比较多的坑要过,这里先用5.7简单点吧。
docker pull nginx
docker pull php:7.1-fpm
docker pull mysql:5.7
version: "3"
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
volumes:
- ./code:/code #创建项目根目录,根据自己的情况来定
- ./nginx/conf.d:/etc/nginx/conf.d #可以把ngixn配置映射出来,便于修改
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
network_mode: "host"
mysql:
image: mysql:latest
container_name: mysql
command: --default-authentication-plugin=mysql_native_password
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- ./mysql/data:/var/lib/mysql:rw #创建 /data/myql 目录
- ./mysql/logs:/var/lib/mysql-logs:rw # /logs/mysql 目录
ports:
- "3306:3306"
environment:
MYSQL_USER: root
MYSQL_PASSWORD: 123456
MYSQL_ROOT_PASSWORD: 123456
network_mode: "host"
php:
build: ./
container_name: fpm7.1
ports:
- "9000:9000"
working_dir: /code
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- ./code:/code
- ./php/php.ini:/usr/local/etc/php/php.ini
network_mode: "host"
FROM php:7.1-fpm
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libpq-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
&& docker-php-ext-install gd mbstring pdo pdo_mysql pdo_pgsql zip
CMD ["php-fpm"]
version: "3"
services:
php-fpm:
container_name: php-fpm
image: php:7.3-fpm-alpine
user: www-data
network_mode: "host"
restart: always
working_dir: /app
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- /opt/test:/app/test
version: "3"
services:
redis:
container_name: redis
image: redis:5-alpine
user: root
network_mode: "host"
volumes:
- ./database:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
version: "3"
services:
nginx:
container_name: nginx
image: nginx:1.16-alpine
restart: always
network_mode: "host"
environment:
- "USER=www"
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- /opt/test:/app/test
- /opt/bll-doc:/app/bll-doc
- ./conf.d:/etc/nginx/conf.d
- ./nginx.conf:/etc/nginx/nginx.conf
- ./logs:/var/log/nginx
version: "3"
services:
mysql:
container_name: mysql
image: mysql:8
#restart: always
environment:
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: 'middlewarepwd'
network_mode: "host"
volumes:
- ./mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
- ./database:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password