利用Docker简单搭建一个LNMP环境
- 首先安装docker
- AWS EC2 Docker安装方式
- 拉取docker镜像
- 简单说下nginx和mysql的安装
- 启动容器
- Docker配置PHP,Mysql,Nginx
- 附上nginx的配置,根据自己的项目自行调整
首先安装docker
1)升级本地yum包
yum update
2) 安装工具集
yum install -y yum-utils device-mapper-persistent-data lvm2
3)安装阿里云docker源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4)更新yum缓存
yum makecache fast
yum clean all
5)安装docker
yum -y install docker-ce
6)启动docker服务
service docker start
7)查看docker版本
docker -v
AWS EC2 Docker安装方式
1] 更新实例上已安装的程序包和程序包缓存
sudo yum update -y
2] 安装Docker Engine程序包
sudo amazon-linux-extras install docker
3] 启动 Docker 服务
sudo service docker start
4] 将 ec2-user 添加到 docker 组,以便您能够执行 Docker 命令,而无需使用 sudo
sudo usermod -a -G docker ec2-user
拉取docker镜像
这里我只拉取了一个php镜像,nginx和mysql都安装在外面了
//可以先search一下看看可用版本
docker search php
//然后再拉取镜像
docker pull php
查看镜像
docker images
简单说下nginx和mysql的安装
1、添加nginx的源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、安装nginx
yum install -y nginx
3、启动
systemctl start nginx.service
(1)、添加mysql的源
yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
(2)、安装mysql
这里可能会出现“All matches were filtered out by modular filtering for argument: mysql-community-server”错误,如果出现则先执行“yum module disable mysql”,再执行install
yum module disable mysql
yum -y install mysql-community-server
(3)、启动
systemctl start mysqld
(4)、mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个临时的默认密码。
cat /var/log/mysqld.log
(5)、进入mysql修改密码
mysql -u root -p
SET PASSWORD = PASSWORD('123456');
备注:
mysql 允许远程登录
mysql -u root -p
use mysql;
update user set host = '%' where user = 'root';
//刷新MySQL的权限相关表
FLUSH PRIVILEGES;
启动容器
docker run --restart=always -p 9000:9000 --name php73 -v /data/website:/data/website --privileged=true -d php:7.3-fpm
这里建议容器内文件夹和外面挂载的文件夹名称相同,这样配置nginx不容易出错
这里由于项目需要,我又安装了mysqli和gd拓展,简单说下安装过程
首先要进到容器里面
docker exec -it php73 /bin/bash
mysqli:
进入容器扩展安装目录并执行安装命令
cd /usr/local/bin
docker-php-ext-install mysqli
redis:
进入php容器执行下列命令
pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis
gd:
//更新软件源
apt update
//安装拓展库
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
//解压源码
docker-php-source extract
//进入gd源码文件夹
cd /usr/src/php/ext/gd
//准备编译
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2
//编译安装
docker-php-ext-install gd
//查看是否成功安装gd扩展
php -m | grep gd
安装成功重启容器即可
Docker配置PHP,Mysql,Nginx
这种就比较简单了
//拉取三种镜像
docker pull php
docker pull mysql
docker pull nginx
然后分别运行三种容器,并用–link进行关联
//运行PHP容器
docker run --restart=always --name php73 -v /data/website:/data/website --privileged=true -d php:7.3-fpm
//然后运行nginx并进行关联
docker run --restart=always --name nginx -p 80:80 -d -v /data/website:/usr/share/nginx/html:ro -v /data/soft/nginx/conf/conf.d:/etc/nginx/conf.d:ro --privileged=true --link php73:php nginx
/data/website 容器外挂载路径
/usr/share/nginx/html:ro nginx容器中项目路径 ro表示只读
/data/soft/nginx/conf/conf.d 容器外nginx配置文件路径
/etc/nginx/conf.d:ro nginx容器中配置文件路径 ro表示只读
//最后运行mysql
docker run --restart=always -p 3306:3306 --name mysql -v /data/soft/mysql/conf:/etc/mysql -v /data/soft/mysql/logs:/logs -v /data/soft/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true --link php73 mysql
注:这里需要 -e设置下环境变量(数据库登陆密码)MYSQL_ROOT_PASSWORD=123456
/etc/mysql 配置文件路径
/mysql_data 数据文件路径
/logs 日志文件路径
附上nginx的配置,根据自己的项目自行调整
server {
listen 80;
server_name localhost;
//如果容器内目录与挂载目录名称相同可以这样配置
root 项目地址;
location / {
//如两个名称不同则需要单独指定地址
root 容器外挂载目录
index index.php index.html index.htm;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
root 容器内项目目录
include fastcgi_params;
fastcgi_pass 172.17.0.2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
备注:
fastcgi_pass 172.17.0.2:9000;
IP地址不可以写成127.0.0.1,要写容器的IP
//通过下列命令查看
docker inspect 容器名称/ID
php容器如果不指定端口号,默认也是9000
//通过查看容器运行情况可以看到端口映射情况
docker ps