在这篇文章中,我们将为您详细介绍Docker搭建开发环境的内容,并且讨论关于Nginx+MySQL+PHP的相关问题。此外,我们还会涉及一些关于Centos6.8编译安装LNMP环境(Nginx+My
在这篇文章中,我们将为您详细介绍Docker搭建开发环境的内容,并且讨论关于Nginx+MySQL+PHP的相关问题。此外,我们还会涉及一些关于Centos 6.8编译安装LNMP环境(Nginx+MySQL+PHP)教程、Docker + node(koa) + nginx + mysql 开发环境搭建、Docker 20.10.8 搭建PHP+Mysql+phpmyadmin开发环境、Docker Ubuntu php nginx mysql redis开发环境部署教程的知识,以帮助您更全面地了解这个主题。
本文目录一览:- Docker搭建开发环境(Nginx+MySQL+PHP)(docker搭建开发环境)
- Centos 6.8编译安装LNMP环境(Nginx+MySQL+PHP)教程
- Docker + node(koa) + nginx + mysql 开发环境搭建
- Docker 20.10.8 搭建PHP+Mysql+phpmyadmin开发环境
- Docker Ubuntu php nginx mysql redis开发环境部署教程
Docker搭建开发环境(Nginx+MySQL+PHP)(docker搭建开发环境)
MySQL
创建并运行MySQL容器:
docker run
--name mysql
-e MYSQL_ROOT_PASSWORD=root
-p 33267:3306
--privileged=true
-v ~/Web/mysql/data:/var/lib/mysql
-v ~/Web/mysql/conf:/etc/mysql/conf.d
-v ~/Web/mysql/mysql_sock:/var/run/mysqld
--restart=always
-d
mysql:5.7
命令解释:
–name mysql 指定容器名称为 mysql
-e MYSQL_ROOT_PASSWORD=123456 初始化 root 用户的密码为 123456
-p 33267:3306 将容器的 3306 端口映射到主机的 33267 端口
--privileged=true 给容器加上特定权限,否则有可能出现常见容器失败的情况
-v ~/web/mysql/data:/var/lib/mysql 将主机 ~/web/mysql/data 目录挂载到容器的 /var/lib/mysql
-v ~/web/mysql/conf:/etc/mysql/conf.d 将主机 ~/web/mysql/conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf
-v ~/web/mysql/mysql_sock:/var/run/mysqld 将主机 ~/web/mysql/mysql_sock 目录挂载到容器的 /var/run/mysqld (为防止 php 容器无权限读取 mysql 容器的 sock 文件)
-d 后台运行
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 33267:3306 --privileged=true -v ~/Web/mysql/data:/var/lib/mysql -v ~/Web/mysql/conf:/etc/mysql/conf.d -v ~/Web/mysql/mysql_sock:/var/run/mysqld --restart=always -d mysql:5.7
--restart=on-failure:5 最多重启五次
PHP
创建并运行PHP容器:
docker run
--name php
-p 9000:9000
--privileged=true
-v ~/Web/www/:/var/www/html
-v ~/Web/mysql/mysql_sock/:/var/run/mysqld --link mysql:mysql
--restart=always
-d
php:7.2-fpm
命令解释:
–name php5.4 指定容器的名称为 php5.4
-p 9000:9000 将容器的 9000 端口映射到主机的 9000 端口
-v ~/web/www:/var/www/html 将主机的 ~/web/www 目录挂载到容器的 /var/www/html 目录
-v ~/web/mysql/mysql_sock:/var/run/mysqld 将主机
~/web/mysql/mysql_sock 目录挂载到容器的 /var/run/mysqld (为防止 php 容器无权限读取
mysql 容器的 sock 文件)
–link mysql:mysql 将 mysql 容器的网络并入 php7.2 容器,实现容器间的通信
-d 保持后台运行
查看PHP的扩展
cd /usr/src/php/ext/
安装扩展
docker-php-ext-install [扩展名称]
docker run --name php -p 9000:9000 --privileged=true -v ~/Web/www/:/var/www/html -v ~/Web/mysql/mysql_sock/:/var/run/mysqld --link mysql:mysql --restart=always -d php:7.2-fpm
Nginx
创建并运行Nginx容器:
docker run
--name nginx
-p 80:80
--privileged=true
-v ~/Web/www:/usr/share/nginx/html
-v ~/Web/nginx/conf.d:/etc/nginx/conf.d
--link php:php
--restart=always
-d
nginx
docker run --name nginx -p 80:80 --privileged=true -v ~/Web/www:/usr/share/nginx/html -v ~/Web/nginx/conf.d:/etc/nginx/conf.d --link php:php --restart=always -d nginx
nginx配置文件
server {
listen 80;
server_name www.test.loc; //需修改的配置项
location / {
root /usr/share/nginx/html/web 根目录; //需修改的配置项
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html/web 根目录; //需修改的配置项
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
Centos 6.8编译安装LNMP环境(Nginx+MySQL+PHP)教程
前言
对于新手的一点建议:
- 最好熟悉一下linux 的基本命令,vim的常用命令
- 千万不要无脑复制,先看一下命令,特别是路径要注意
- 学会排查错误
本篇安装的软件版本为:
- Linux:Centos6.8
- Nginx:1.10.3
- MysqL:5.7.17
- PHP:7.0.16
最近研究了Linux系统下的PHP环境搭建,个人感觉最好最好不要用yum默认的程序包安装,因为版本都比较低,下载最新的稳定版自行安装比较好。现在网上教程很多,之所以还记这篇,原因有一点,当你重复网上的教程自行安装时,90%还是会出现各种各样的问题,因为你可能linux的系统版本不同,你想装的软件版本不同,安装的方法不同,你下错了安装包的版本,还有其它乱七八糟的。举个例,比如你看着5.6的MysqL安装教程,装5.7的,你感觉没问题,但是事实就是,5.7的不一样了!而且网上还没有新的这方面内容,不好找,这就需要你去摸索了,亲身经历啊。这里面,Niginx感觉最好配,MysqL最坑。
一 准备工作
1. 关闭SELINUX
修改配置文件,重启服务后永久生效。
# sed -i ‘s/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
命令行设置立即生效。
# setenforce 0
2. 如果是阿里云ECS用户,安全组设置中开启80端口方便调试。
二 安装Nginx
1. 下载源码包
上Nginx官网,复制最新稳定版的下载地址过来,然后用wget下载(接下来需要下载安装包的都可以用wget):
# cd /usr/local/src # wget http://Nginx.org/download/Nginx-1.10.3.tar.gz
下载完成的状态基本都是以下这样的:
2. 进行解压编译
# tar xvf Nginx-1.10.3.tar.gz # yum groupinstall “Development tools” # yum -y install gcc wget gcc-c++ automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl-devel
执行完成。
进入解压后的Nginx-1.10.3文件夹:
cd /usr/local/src/Nginx-1.10.3
执行以下语句:
./configure \ --prefix=/usr/local/Nginx \ --sbin-path=/usr/sbin/Nginx \ --conf-path=/etc/Nginx/Nginx.conf \ --error-log-path=/var/log/Nginx/error.log \ --http-log-path=/var/log/Nginx/access.log \ --pid-path=/var/run/Nginx.pid \ --lock-path=/var/run/Nginx.lock \ --http-client-body-temp-path=/var/tmp/Nginx/client \ --http-proxy-temp-path=/var/tmp/Nginx/proxy \ --http-fastcgi-temp-path=/var/tmp/Nginx/fcgi \ --http-uwsgi-temp-path=/var/tmp/Nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/Nginx/scgi \ --user=Nginx \ --group=Nginx \ --with-pcre \ --with-http_v2_module \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-ipv6 \ --with-http_v2_module \ --with-threads \ --with-stream \ --with-stream_ssl_module
完成后执行编译:
# make && make install # mkdir -pv /var/tmp/Nginx/client
3. 添加SysV启动脚本。
用vim编辑脚本:
# vim /etc/init.d/Nginx
写入以下内容:
#!/bin/sh # # Nginx - this script starts and stops the Nginx daemon # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server,HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: Nginx # config: /etc/Nginx/Nginx.conf # config: /etc/sysconfig/Nginx # pidfile: /var/run/Nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 Nginx="/usr/sbin/Nginx" prog=$(basename $Nginx) Nginx_CONF_FILE="/etc/Nginx/Nginx.conf" [ -f /etc/sysconfig/Nginx ] && . /etc/sysconfig/Nginx lockfile=/var/lock/subsys/Nginx start() { [ -x $Nginx ] || exit 5 [ -f $Nginx_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $Nginx -c $Nginx_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval killall -9 Nginx } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $Nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $Nginx -t -c $Nginx_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
保存退出(按:wq!);可能你得稍微查一下vim的一些命令,不然操作时可能会出现一点小问题。
赋予脚本执行权限:
# chmod +x /etc/init.d/Nginx
添加至服务管理列表,设置开机自启:
# chkconfig Cadd Nginx # chkconfig Nginx on
4. 启动服务。
# service Nginx start
出现这玩意说明成功了!
注:如果报错 [emerg]: getpwnam(“Nginx”) Failed ;
解决方法:
# useradd -s /sbin/nologin -M Nginx # id Nginx
三 安装MysqL
1. 版本选择
在安装之前必须明白一件事情,MysqL有很多种安装方式,每种不一样,不要弄混了。
比如源码编译安装(MysqL-5.7.17.tar.gz),二进制安装(MysqL-5.7.17-linux-glibc2.5-i686.tar),nmp安装(最简单的)。这里我们用源码自己编译安装。
2. 准备编译环境
# yum groupinstall “Server Platform Development” “Development tools” -y # yum install cmake -y
cmake在现在的版本是必须要安装的,你可以下载camke之后编译,也可以直接yum安装。接下来的编译过程如果报错缺少什么就补什么。
3. 准备MysqL数据库存放目录
# mkdir /mnt/data # groupadd -r MysqL # useradd -r -g MysqL -s /sbin/nologin MysqL # id MysqL
4. 更改数据目录权限。
# chown -R MysqL:MysqL /mnt/data
5. 下载并解压编译官网下载的稳定版的源码包。
在下载的时候注意一下版本,下载对应的版本。我们源码编译,要下载长这样的安装包:MysqL-5.7.17.tar.gz,同时在安装的时候我们需要boost库,5.7需要1.59版本的库;你可以下载boost库然后编译boost库,或者像我一样,下载带有boost库的MysqL版本。
开始解压编译:
# tar xvf MysqL-boost-5.7.17.tar.gz -C /usr/local/src # cd /usr/local/src/MysqL-5.7.17 # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/MysqL \ -DMysqL_DATADIR=/mnt/data \ -DSYSconfdIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DMysqL_TCP_PORT=3306 \ -DMysqL_UNIX_ADDR=/tmp/MysqL.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/MysqL/boost/boost_1_59_0 \ # make && make install
6. 修改安装目录的权限属组
# chown -R MysqL:MysqL /usr/local/MysqL/
7. 初始化数据库。
# /usr/local/MysqL/bin/MysqLd Cinitialize Cuser=MysqL Cbasedir=/usr/local/MysqL Cdatadir=/mnt/data/
需要注意这里是MysqL5.7的初始化命令,而5.7以下的都是用:
# /usr/local/MysqL/scripts/MysqL_install_db Cuser=MysqL Cdatadir=/mnt/data/
在初始化成功之后,5.7的initial命令会产生一个随机的root登录密码,你要用这个密码登录,然后修改(必须修改生成的随机密码不然无法后续操作)。在最后有一个类似这样的密码:
8. 复制配置文件
# cp support-files/my-default.cnf /etc/my.cnf
这里又有一点要注意:MysqL5.7配置文件需要修改my.cnf关键配置, MysqL5.7之前默认配置文件中是有配置项的,不用手动修改。以下为配置,根据实际情况修改:
</div> <div>[MysqLd]</div> <div>basedir = /usr/local/MysqL</div> <div>datadir = /mnt/data</div> <div>port = 3306</div> <div>socket = /Ultrapower/test/MysqL/tmp/MysqL.sock</div> <div></div> <div>sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES</div> <div>[client]</div> <div>socket = /Ultrapower/test/MysqL/tmp/MysqL.sock</div> <div>
如果添加[client]下 的内容,注意sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES要放在[MysqLd]下。
如果报错tmp目录不错在,到对应的地方去创建目录,然后创建后要赋予MysqL权限,chown -R MysqL:MysqL tmp。
9. 设置开机启动
# cp /usr/local/MysqL/support-files/MysqL.server /etc/init.d/MysqLd # chmod +x /etc/init.d/MysqL
注册为开机启动服务:
# chkconfig MysqLd on # chkconfig Cadd MysqLd
查看是否设置成功:
# chkconfig Clist MysqL
10. 设置PATH环境变量。
# echo “export PATH=$PATH:/usr/local/MysqL/bin” > /etc/profile.d/MysqL.sh # source /etc/profile.d/MysqL.sh
11. 启动服务
# service MysqLd start
这样基本上,这个MysqL就装好了。
12. 登录MysqL并修改密码
MysqL -uroot -p生成的密码
执行修改密码:
alter user ‘root'@'localhost' identified by ‘newpassword';
四 安装PHP-fpm
1. 安装依赖包:
yum install libmcrypt libmcrypt-devel mhash mhash-devel libxml2 libxml2-devel bzip2 bzip2-devel
这里还漏了几个,如果报错了提示缺少了什么就yum补上。
2. 到官网下载源码包后,开始编译安装:
# tar xvf PHP-7.0.16.tar.bz2 -C /usr/local/src # cd /usr/local/src/PHP-7.0.16 执行下面的配置文件: # ./configure --prefix=/usr/local/PHP \ --with-config-file-scan-dir=/etc/PHP.d \ --with-config-file-path=/etc \ --with-MysqL=/usr/local/MysqL \ --with-MysqLi=/usr/local/MysqL/bin/MysqL_config \ --enable-fpm \ --enable-opcache \ --disable-fileinfo \ --with-jpeg-dir \ --with-iconv-dir=/usr/local \ --with-freetype-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --enable-bcmath \ --enable-shmop \ --enable-exif \ --with-curl \ --enable-sysvsem \ --enable-inline-optimization \ --enable-mbregex \ --enable-inline-optimization \ --enable-mbstring \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-ftp \ --with-gettext \ --enable-zip \ --enable-soap \ --with-bz2
执行以上的配置,如果出现下面这样的license,才是正确的,才可以开始编译,如果出问题,就解决,一般是少了什么库。
执行编译:
# make && make install
3. 添加PHP和PHP-fpm配置文件。
# cp /usr/local/src/PHP-7.0.16/PHP.ini-production /etc/PHP.ini # cd /usr/local/PHP/etc/ # cp PHP-fpm.conf.default PHP-fpm.conf # sed -i ‘s@;pid = run/PHP-fpm.pid@pid = /usr/local/PHP/var/run/PHP-fpm.pid@' PHP-fpm.conf
4. 添加PHP-fpm启动脚本。
# cp /usr/local/src/PHP-7.0.16/sapi/fpm/init.d.PHP-fpm /etc/init.d/PHP-fpm # chmod +x /etc/init.d/PHP-fpm
5. 添加PHP-fpm至服务列表并设置开机自启。
# chkconfig Cadd PHP-fpm # chkconfig Clist PHP-fpm # chkconfig PHP-fpm on
6. 启动服务。
# service PHP-fpm start
注:启动时如出现错误:
WARNING: nothing matches the include pattern ‘/usr/local/etc/PHP-fpm.d/*.conf' from /usr/local/etc/PHP-fpm.conf at line 125. ERROR:. No pool defined at least one pool section must be specified in config file ERROR: Failed to post process the configuration ERROR: FPM initialization Failed
解决:到指定目录执行cp www.conf.default www.conf
7. 添加Nginx对fastcgi的支持,
首先备份默认的配置文件。
# cp /etc/Nginx/Nginx.conf /etc/Nginx/Nginx.confbak # cp /etc/Nginx/Nginx.conf.default /etc/Nginx/Nginx.conf
编辑/etc/Nginx/Nginx.conf,在所支持的主页面格式中添加PHP格式的主页,类似如下:
</div> <div>location / {</div> <div>root /usr/local/Nginx/html;</div> <div>index index.PHP index.html index.htm;</div> <div>}</div> <div>
取消以下内容前面的注释:
</div> <div>location ~ \.PHP$ {</div> <div>root /usr/local/Nginx/html;</div> <div>fastcgi_pass 127.0.0.1:9000;</div> <div>fastcgi_index index.PHP;</div> <div>fastcgi_param SCRIPT_FILENAME /usr/local/Nginx/html/$fastcgi_script_name;</div> <div>include fastcgi_params;</div> <div>}</div> <div>
8. 重启Nginx
# service Nginx reload
9. 测试是否成功
在/usr/local/Nginx/html/新建index.PHP的测试页面,内容如下:
<?PHP PHPinfo(); ?>
如果出现这个熟悉的界面,说明就大功告成了!Linux下一个基本的LNMP就搭建完毕了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。
您可能感兴趣的文章:
- CentOS 5.5使用yum来安装LAMP(php运行环境)
- 在CentOS 6 中安装WordPress(一) 安装Apache,PHP环境
- Centos6.5和Centos7 php环境搭建方法
- CentOS+Nginx+PHP+MySQL标准生产环境配置方法
- Linux+php+apache+oracle环境搭建之CentOS下源码编译安装PHP
- 阿里云CentOS7搭建Apache+PHP+MySQL环境
- centos下yum搭建安装linux+apache+mysql+php环境的方法
- centos下yum搭建安装linux+apache+mysql+php环境教程
- Linux+php+apache+oracle环境搭建之CentOS下安装Oracle数据库
- Centos7下编译安装配置Nginx+PHP+MySql环境
- CentOS搭建PHP服务器环境简明教程
Docker + node(koa) + nginx + mysql 开发环境搭建
什么是Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
为什么要用Docker
为了线下线上环境一致,更方便的部署
大家一定经历过环境配置的折磨
“明明在我这台机器上都可以运行,为什么跑你那去就出错了?”
很大的可能环境不一致,如果线下更新了环境,那么服务器上也要更新一大堆。
为了减少这些痛苦,Dokcer提供了很好的解决方案:打包我们的应用以及依赖到Docker容器中,从而避免了环境不一致
Docker的一些概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
安装Docker
Docker安装
支持的平台:
DESKTOP
- Docker Desktop for Mac (macOS)
- Docker Desktop for Windows (Microsoft Windows 10)
SERVER
- CentOS
- Debian
- Fedora
- Ubuntu
Docker仓库
Docker仓库
我们搭建环境使用的镜像都可以在上面的仓库找到
在开发过程中如何使用Docker
接下来我们就使用一个最简单的实例搭建一个基于koa的开发环境
开发环境使用的配置
Node
- node:12-alpine
- koa 基础框架
- koa-router 路由
- promise-mysql mysql
- nodemon 自动重启服务
Nginx
- nginx:1.17
Mysql
- mysql:5.6
目录结构
- koa-docker
- conf
- data
- docker-compose.yml
- node_modules
- package.json
- server.js
- static
- yarn.lock
1.Node环境配置
要先安装好本地的node环境,新建一个项目
所有操作命令都在项目根目录中进行
本地环境为Linux Mint,和Win平台的某些命令不一致,可以适当修改
mkdir koa-docker
cd koa-docker
初始化项目
# 进入根目录执行cmd命令,生成package.json
npm init -y
# 修改npm启动脚本package.json
{
"scripts":{
"start":"nodemon server.js"
}
}
安装node包
包管理工具yarn,或者npm,cnpm,随意
yarn add koa koa-router promise-mysql nodemon
server服务
# server.js
const Koa = require(''koa'')
const Router = require(''koa-router'')
const mysql = require(''promise-mysql'')
let app = new Koa()
let router = new Router()
// 根路由
router.get(''/'', async ctx=>{
ctx.body = ''index''
})
// 测试mysql连接路由
router.get(''/db'', async ctx=>{
let db = await mysql.createPool({
host: ''mysql'',
port: 3306,
user: ''root'',
password: ''123456''
})
let res = await db.query(''SHOW DATABASES'')
ctx.body = res
})
app.use(router.routes())
app.listen(3000)
docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
配置docker-compose
如果我们只需要一个容器,可以用Dockerfile进行单独配置,(当然每个容器都可以写一个Dockerfile,然后docker-compose来build)
现在我们有多个容器需要管理
docker-compose.yml
根目录新建docker-compose.yml文件
我们一步一步构建服务
version: "3"
services:
web:
image: node:12-alpine #node镜像名称
working_dir: /code #工作目录
volumes: #挂载点
- .:/code #把本地当前目录挂载到容器的/code目录
ports: #端口映射
- "3000:3000" #本地端口:容器端口
command: npm start #这条命令会在工作目录下执行
关于volumes挂载点:
由于容器删除了数据也会删除,我们把容器里的目录挂载到本地目录,容器挂载了的目录有任何改变,都会保存到本地
我们现在只有一个web服务,先跑起来看看能否正确运行
docker-compose up
如果你访问localhost:3000
能够显示内容,说明容器正常运行起来了
2.Mysql配置
接着上面的配置,我们再添加一个mysql的配置
# docker-compose.yml
version: "3"
services:
...
mysql:
image: mysql:5.6
volumes:
- ./data:/var/lib/mysql #挂载当前的data目录到容器默认mysql存储目录
environment: #环境变量
- MYSQL_ROOT_PASSWORD=123456 #mysql的root密码
- MYSQL_DATABASE=koa_docker #mysql的初始化数据库
ports:
- "3306:3306"
我们现在有2个服务,web和mysql,一次同时运行两个服务
docker-compose up
不出意外,服务跑起来了,我们测试一下mysql是否能正常连接,访问localhost:3000/db
,如果能够看到以下信息,说明mysql也正常连接了
[{"Database":"information_schema"},{"Database":"koa_docker"},{"Database":"mysql"},{"Database":"performance_schema"}]
3.Nginx配置
我们需要nginx的默认配置文件,先把一个nginx容器跑起来,复制容器里面的配置
运行一个nginx容器
docker run -itd --rm nginx:1.17
# -i 交互式操作
# -t 终端
# -d 后台运行
# --rm 容器停止后自动销毁
我们会得到一个容器ID
35c5c3671780
也可以用docker ps查看运行的容器
复制容器里面的文件
# 复制nginx容器里的配置文件到当前目录
docker cp 35c5c3671780:/etc/nginx/conf.d/default.conf .
default.conf配置文件
server {
listen 80;
server_name localhost;
location /static {
alias /code/static; #路径可以自定义,放在什么目录都可以
}
location / {
proxy_pass http://web:3000; #地址web是docker-compose.yml里面的web服务名
}
...
}
移动配置文件到conf文件夹
mv default.conf conf/
docker-compose.yml
version: "3"
services:
...
...
nginx:
image: nginx:1.17
volumes:
- ./static:/code/static
- ./conf/default.conf:/etc/nginx/conf.d/default.conf #挂在nginx服务的配置文件到容器里
ports:
- "80:80"
我们有一个配置文件的挂载点,用于更改默认配置,如果mysql也需要更改配置文件,也可以添加一个配置文件的挂载点(也可以是挂载一个配置目录:./conf:/etc/nginx/conf.d)
让我们一次跑3个服务,web,mysql,nginx,看看是否正确运行
docker-compose up
我们配置了nginx的代理,现在默认访问端口为80,不用再写端口号了
注意,如果本地安装了nginx需要先停止本地nginx服务 systemctl stop nginx
- 访问
localhost
不带端口号(默认80),是否正常 - 访问
localhost/db
数据库是否连接正常 - 访问
localhost/static/1.jpg
测试static服务是否正常(静态文件就放在本地目录的static下)
总结
到此一个基于node的koa,nginx,mysql,开发环境就搭建完成,基于挂载点,开发调试也很方便
如果你本地修改了server.js里面的文件(随便什么文件),nodemon会监听文件变化,自动重启服务
还有一个疑问,本地开发环境好了,是和线上环境一致的,那么怎样部署到服务器呢?
我们下一篇见:Docker + node(koa) + nginx + mysql 线上环境部署
附录
docker-compose.yml
version: "3"
services:
web:
image: node:12-alpine
working_dir: /code
volumes:
- .:/code
ports:
- "3000:3000"
command: npm start
mysql:
image: mysql:5.6
volumes:
- ./data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=koa_docker
ports:
- "3306:3306"
nginx:
image: nginx:1.17
volumes:
- ./static:/code/static
- ./conf/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
github
- https://github.com/tonysoul/docker-koa
参考
- Docker教程
Docker 20.10.8 搭建PHP+Mysql+phpmyadmin开发环境
Hi 小伙伴们大家好,
因为Mac每次升级都会搬迁我的拓展库,最后都要手动再去搞一次环境,其次每个coder本质都是懒人,所以准备试试docker,看是否能一劳永逸的解决这个问题。
安装php:
首先先在dockerhub上寻找自己想要的版本。tips:这里最好不要用latest的tag,因为不稳定。这里我用的php-7.4
https://hub.docker.com/_/php?...
安装:
1.登陆dockerhub:docker login -u 用户名 -p
2.docker pull php:7.4.24:fpm(拉取景象)
3.docker images(看是否拉取成功)
4.安装容器:(将访问网站的本地文件地址映射到容器的地址)
docker run --name myphp-fpm -v ~/nginx/www:/www -d php:7.4.24-fpm
成功会返回container_id
5.使用docker ps 看是否运行,如果没有查看使用docker ps -a,如果运行失败则再去仓库换一下其他的php版本。
搭建Nginx:
(把8083端口映射到容器的80端口,把php并入nginx的网络中)
(tips:myphp-fpm是安装php时的name)
docker run --name php-nginx -p 8083:80 -d \
-v 你的网站文件地址/www:/usr/share/nginx/html:ro \
-v 你的网站文件地址/conf/conf.d:/etc/nginx/conf.d:ro \
--link myphp-fpm:php \
nginx
成功后会返回容器id,使用docker ps 查看是否运行成功。
然后在本地的www目录下,新增index.php文件,echo phpinfo();
再curl localhost:8083,看是否有返回,有则说明安装成功。
安装Mysql:
安装流程:
https://www.runoob.com/docker...
tips:
mysql的安装很简单,主要是php如何访问mysql,这里是不能用localhost作为mysql的地址的,
首先先查看mysql容器的详情:docker inspect mysql_container_id
找到Gateway,这个就是mysql的host地址
然后从镜像下载的php是没有mysql拓展的,需要先安装一下:
进入容器 docker exec -it php_containerid /bin/bash
至目录下 cd /usr/local/bin
安装扩展 ./docker-php-ext-install pdo_mysql
安装扩展 ./docker-php-ext-install mysqli
重启容器 docker restart php_containerid
安装php-redis拓展:https://learnku.com/articles/...
安装完成后:(我的mysql端口设置的3307,06在用)
最后安装phpmyadmin:
dockerhub地址:https://hub.docker.com/r/phpm...
用最新的就行:
一般在概述中都会有安装步骤:(能力不好的同学可以用google翻译,直接翻译网页,怎么翻墙自己多搜索一下)
操作:
docker pull phpmyadmin/phpmyadmin:latest
docker run -d --name myadmin --link mysql5.7:db -p 8080:80 phpmyadmin/phpmyadmin
打完收工!
Docker Ubuntu php nginx mysql redis开发环境部署教程
以下是关于如何在Ubuntu环境下安装Docker和Docker Compose,并使用它们搭建一个包含Nginx、PHP、MySQL和Redis的多容器服务的详细步骤与解析。
一、Docker与Docker Compose的安装
Docker是一种应用容器引擎,能够将应用程序及其依赖打包到容器中,从而提高开发环境与生产环境的一致性。Docker Compose是一个工具,可以通过YAML文件来定义多容器应用,使得应用的启动和管理更加简便。
1.1 安装Docker
在安装Docker之前,先确保系统包是最新的,更新系统包:
sudo apt-get update
接下来,安装Docker相关的软件包:
sudo apt-get install docker-ce docker-ce-cli containerd.io
解释:
apt-get update
:更新包索引以确保获取最新的软件包信息。docker-ce
:安装Docker的社区版(Community Edition)。docker-ce-cli
:Docker的命令行工具。containerd.io
:Docker容器运行时。
1.2 安装Docker Compose
Docker Compose是Docker生态中的一个重要工具,通过YAML文件编排和启动多容器应用。使用以下命令来安装:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
解释:
curl -L
:通过curl命令下载Docker Compose的可执行文件。chmod +x
:为Docker Compose添加可执行权限,以便可以直接运行。
通过运行docker-compose --version
命令,可以确认Docker Compose是否安装成功。
安装过程的工作流程图
以下是安装Docker与Docker Compose的工作流程图:
graph TD;
A[系统更新] --> B[安装Docker相关软件包]
B --> C[下载Docker Compose]
C --> D[修改执行权限]
D --> E[验证安装]
二、创建docker-compose.yml文件
在安装Docker和Docker Compose之后,我们可以开始定义多容器服务。我们通过创建docker-compose.yml
文件来实现这一点。
2.1 编写docker-compose.yml文件
在项目根目录下,创建一个名为docker-compose.yml
的文件,内容如下:
version: ''3''
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
- ./www:/www
php:
image: php:7.4-fpm
volumes:
- ./www:/www
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
volumes:
- ./mysql:/var/lib/mysql
redis:
image: redis:latest
ports:
- "6379:6379"
解释:
Nginx服务:
image: nginx:latest
:使用最新的Nginx镜像。ports: "80:80"
:将容器的80端口映射到主机的80端口。volumes
:挂载配置文件和网页目录到容器内。
PHP服务:
image: php:7.4-fpm
:使用PHP 7.4的FPM镜像(专为处理PHP请求设计)。volumes
:共享代码文件夹www
。
MySQL服务:
image: mysql:5.7
:使用MySQL 5.7镜像。environment
:设置MySQL的环境变量,例如根用户密码和数据库信息。volumes
:持久化MySQL数据到宿主机。
Redis服务:
image: redis:latest
:使用Redis的最新镜像。ports
:将Redis容器的6379端口映射到主机。
三、创建Nginx配置文件
在docker-compose文件中定义了nginx
服务,因此我们还需要Nginx的配置文件。可以在./nginx
目录下创建default.conf
:
server {
listen 80;
server_name localhost;
root /www;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
解释:
listen 80;
:监听80端口,接受来自外界的HTTP请求。server_name localhost;
:指定服务器名称为localhost。root /www;
:网站根目录为/www
,这是挂载到Nginx容器内的宿主机目录。location ~ \.php$
:处理以.php
结尾的请求,通过fastcgi_pass
代理给PHP-FPM服务。
配置文件的说明表
指令 | 描述 |
---|---|
listen | 指定服务监听的端口号。 |
server_name | 指定服务器名称或域名。 |
root | 网站根目录所在的位置。 |
location | 配置特定路径下的请求处理规则,例如将.php 请求交由PHP处理。 |
fastcgi_pass | 指定PHP-FPM的地址,用于处理PHP请求。 |
四、编写PHP测试页面
在项目根目录下创建一个www
目录,用于存放PHP测试页面。然后在www
目录中创建index.php
文件:
<?php
phpinfo();
?>
解释:
- 这个文件调用了
phpinfo()
函数,输出当前PHP环境的配置信息,方便我们测试PHP环境是否配置成功。
五、启动服务
现在我们已经编写好docker-compose.yml
和相关配置文件,可以使用以下命令启动所有的容器服务:
docker-compose up -d
解释:
docker-compose up
:启动docker-compose.yml
文件中定义的所有服务。-d
:表示服务将在后台运行。
启动服务的流程图
graph TD;
A[编写docker-compose.yml文件] --> B[创建Nginx配置文件]
B --> C[编写PHP测试页面]
C --> D[启动容器服务]
D --> E[访问localhost测试]
六、测试部署结果
服务启动后,打开浏览器访问http://localhost
,如果看到PHP的信息页面(包含PHP版本、已安装的扩展等),说明我们的环境部署成功了。以下是PHP信息页面的预期内容:
PHP Version 7.4.x
Configuration File (php.ini) Path
Loaded Configuration File
...
七、总结与优化建议
- 多容器集成开发环境:本次部署的环境包括Nginx、PHP、MySQL和Redis,适合大部分PHP项目的开发需求。
- 持久化数据:通过Docker卷将MySQL的数据保存到宿主机,确保数据库重启后数据不会丢失。
- 扩展性强:可以根据需要添加更多的服务,例如RabbitMQ、Elasticsearch等,以满足不同的开发需求。
八、可能的改进
- 添加PHP扩展:在实际开发中,可能需要安装额外的PHP扩展,可以通过编写自定义Dockerfile来扩展PHP镜像。
- 调整MySQL配置:根据需求调整MySQL的内存、连接数等参数,以提高数据库的性能。
- 部署SSL证书:为了确保数据传输安全,可以配置Nginx支持HTTPS。
小提示
- 使用Docker Compose管理多容器服务,不仅方便,而且可以提高开发与生产环境的一致性。
- 使用卷(volumes)来持久化重要数据,防止容器重启后数据丢失。
通过本文的介绍,相信您已经学会了如何使用Docker和Docker Compose来搭建一个基本的PHP开发环境,并理解了各个部分的配置与作用。希望这篇文章能够对您在后续的开发工作中提供帮助!
关于Docker搭建开发环境和Nginx+MySQL+PHP的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Centos 6.8编译安装LNMP环境(Nginx+MySQL+PHP)教程、Docker + node(koa) + nginx + mysql 开发环境搭建、Docker 20.10.8 搭建PHP+Mysql+phpmyadmin开发环境、Docker Ubuntu php nginx mysql redis开发环境部署教程等相关知识的信息别忘了在本站进行查找喔。
本文标签: