GVKun编程网logo

Docker搭建开发环境(Nginx+MySQL+PHP)(docker搭建开发环境)

12

在本文中,我们将为您详细介绍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搭建开发环境)

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)教程

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 + 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开发环境

Docker 20.10.8 搭建PHP+Mysql+phpmyadmin开发环境

Hi 小伙伴们大家好,

因为Mac每次升级都会搬迁我的拓展库,最后都要手动再去搞一次环境,其次每个coder本质都是懒人,所以准备试试docker,看是否能一劳永逸的解决这个问题。

安装php:

首先先在dockerhub上寻找自己想要的版本。tips:这里最好不要用latest的tag,因为不稳定。这里我用的php-7.4
https://hub.docker.com/_/php?...
image.png
安装:
1.登陆dockerhub:docker login -u 用户名 -p

2.docker pull php:7.4.24:fpm(拉取景象)

3.docker images(看是否拉取成功)
image.png

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地址
image.png

然后从镜像下载的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在用)
image.png

最后安装phpmyadmin:
dockerhub地址:https://hub.docker.com/r/phpm...
用最新的就行:
image.png

一般在概述中都会有安装步骤:(能力不好的同学可以用google翻译,直接翻译网页,怎么翻墙自己多搜索一下)
image.png
操作:
docker pull phpmyadmin/phpmyadmin:latest
docker run -d --name myadmin --link mysql5.7:db -p 8080:80 phpmyadmin/phpmyadmin
打完收工!
image.png

Docker Ubuntu php nginx mysql redis开发环境部署教程

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开发环境部署教程等相关知识的信息别忘了在本站进行查找喔。

本文标签: