利用Docker简单搭建一个LNMP环境

首先安装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');
//mysql5.7
update mysql.user set authentication_string=password('123456') where user='root';

备注:
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值