docker compose部署nginx+php+mysql+phpmyadmin环境(LNMP环境)
Contents
docker compose 介绍与安装
docker-compose优点
已经有笔记记录了如何用docker搭建LNMP环境:DOCKER部署NGINX,PHP环境(步骤+注解),那为什么还要使用docker-compose呢?
考虑一个场景,我们搭建好了LNMPdocker环境,并且挂载/端口/网络都设置好了,但是在运行中我们发现有些容器配置需要改变,那我们只能docker stop container
+ docker rm container
来删除此容器,然后用新的配置docker run
。整个过程十分复杂。
但是通过docker-compose工具,我们就可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用;更重要的是,如果我们希望修改容器配置,只需修改compose配置文件重新一键部署即可。
docker-compose安装
下载docker-compose二进制文件至本地
sudo curl -L "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
修改二进制文件的可执行权限并创建软链(软链不是必需)
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试一下是否安装成功
docker-compose version
返回版本信息即表示成功了。
挂载目录准备
挂载目录和笔记DOCKER部署NGINX,PHP环境(步骤+注解)里一样,目录的准备方式也相同:先run一个辅助容器,把需要挂载的文件夹复制 到主机准备好的映射路径,然后删除辅助容器即可。
注:进入内部查询容器内部文件使用命令:
docker exec -it container_name/id bash
php-fpm
docker run -p your_port:9000 -d --name php.0 php:7.4-fpm
docker cp php.0:/usr/share/nginx/html/. your_web_page_path
docker cp php.0:/usr/local/etc/php/. your_php_config_path
docker stop php.0 && docker rm php.0
nginx
docker run --name nginx.0 -p 80:80 -p 443:443 -d nginx
docker cp nginx.0:/usr/share/nginx/html/. your_web_page_path
docker cp nginx.0:/etc/nginx/conf.d/. your_nginx_config_path
docker cp nginx.0:/var/log/nginx/. your_nginx_log_path
docker stop nginx.0 && docker rm nginx.0
mysql
docker run -itd --name mysql.0 -p your_port:3306 --restart unless-stopped -e MYSQL_ROOT_PASSWORD=yourpassword mysql
docker cp mysql.0:/var/log/mysql/. your_db_log_path
docker cp mysql.0:/var/lib/mysql/. your_db_data_path
docker cp mysql.0:/etc/mysql/. your_db_config_path
docker stop mysql.0 && docker rm mysql.0
phpmyadmin
docker run --name phpmyadmin.0 -d -e PMA_ARBITRARY=1 -e PMA_HOST=mysql_ip -e PMA_PORT=mysql_port -p your_port:80 phpmyadmin
docker cp phpmyadmin.0:/etc/phpmyadmin/. your_phpadmin_path
docker stop phpmyadmin.0 && docker rm phpmyadmin.0
具体命令含义及文件夹含义可见上面提到的笔记。
这样我们对于LNMP环境的端口和挂载文件路径都已经设定好了,下面就是编写compose文件并部署。
部署文件编写与部署
docker-compose.yml文件编写
我们需要一个文件夹来作为工作空间放置我们的配置文件,新建文件夹mkdir lnmp && cd lnmp
并创建docker-compose.yml
文件。
显然这是yaml格式的配置文件,对缩进标点比较敏感,一定要注意。
docker-compose.yml
# Creat containers for LNMP + phpmyadmin
version: '3'
services:
php-fpm:
image: php:7.4-fpm # 镜像名
container_name: php.1 #容器名
restart: unless-stopped #重启策略
volumes: #挂载路径
- your_web_page_path:/usr/share/nginx/html
- your_php_config_path:/usr/local/etc/php/
environment: #环境变量
- TZ=Asia/Shanghai #时区
ports:
- "your_port:9000" #端口映射
logging: #日志设置
driver: json-file
options:
max-size: "200k"
max-file: "5"
nginx:
image: nginx
container_name: nginx.1
restart: unless-stopped
depends_on: #依赖关系,被依赖的服务先启动才会启动此服务
- php-fpm
volumes:
- your_web_page_path:/usr/share/nginx/html
- your_nginx_config_path:/etc/nginx/conf.d
- your_nginx_log_path:/var/log/nginx
environment:
- TZ=Asia/Shanghai
ports:
- "80:80"
- "443:443"
logging:
driver: json-file
options:
max-size: "200k"
max-file: "5"
mysql:
image: mysql
container_name: mysql.1
restart: unless-stopped
volumes:
- your_db_config_path:/etc/mysql
- your_db_data_path:/var/lib/mysql
- your_db_log_path:/var/log/mysql
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=yourpassword
ports:
- "your_port:3306"
logging:
driver: json-file
options:
max-size: "200k"
max-file: "5"
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin.1
restart: unless-stopped
volumes:
- your_phpadmin_path:/etc/phpmyadmin
environment:
- TZ=Asia/Shanghai
- PMA_ARBITRARY=1
- PMA_HOST=mysql_ip
- PMA_PORT=mysql_port
ports:
- "your_port:80"
logging:
driver: json-file
options:
max-size: "200k"
max-file: "5"
compose字段简介
重启策略restart:
有这么几种:
restart: no #是默认的重启策略,在任何情况下都不会重启容器。
always #容器总是重新启动。
on-failure #在容器非正常退出时(退出状态非0),才会重启容器。
unless-stopped #在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
compose部署及常用命令
部署命令很简单,在当前lnmp
目录,运行
docker-compose up
#或者
docker-compose up -d
这样就运行成功了,上面四个容器都会被启动。
当我们需要修改配置时,就把compose down掉,修改docker-compose.yml
文件,然后重启up起来就好
docker-compose down
docker-compose up -d
#或者
docker-compose up -d --force-recreate
LNMP环境配置及测试
nginx和php的配置就和上面提到的笔记一样,修改default.conf
即可。mysql与phpmyadmin的测试方法如下:
mysql
进入mysql.1
容器内部,尝试登录mysql即可
docker exec -it mysql.1 bash
#进入容器内部
mysql -u root -p
输入your_password
成功登陆mysql,并显示:
mysql>
phpmyadmin
浏览器登录your_ip:your_port
显示phpmyadmin的登录界面,并且能够登录mysql即可。
这样就大功告成啦。