文章目录
- 一、Docker环境安装
- 二、快速构建lnmp环境
- 1、下载镜像(image)
- 2、生成容器(container)
- 3.连接容器(Connect)
- 4、容器启动与停止
- 5、配置文件说明
- 6、故障处理
- 三、挂载目录构建LNMP
- 1、下载镜像
- 2、构建容器
- 3、进入容器
一、Docker环境安装
- 卸载老版本docker
yum remove docker docker-common docker-selinux docker-engine
- 安装需要的软件包
yum -y install yum-utils device-mapper-persistent-data lvm2
- 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
##部分网络可能上面的源会卡可使用阿里源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 查看docker版本
yum list docker-ce --showduplicates|sort -r
- 安装docker(不指定版本默认选择最新版进行安装)
yum -y install docker-ce
- 启动Docker
sudo systemctl enable docker
sudo systemctl start docker
- 测试安装
docker run hello-world
如输出如下提示则说明安装成功
二、快速构建lnmp环境
为了快速构建,本次项目采用dockerhub上的镜像
这是传送门 2233466866/lnmp
- 下载前请切换国内docker镜像地址请参考【docker更换国内镜像】(不然速度惨目忍睹)
1、下载镜像(image)
【镜像】 可以理解为操作系统的镜像文件如
iso
、gho
文件
docker pull 2233466866/lnmp
2、生成容器(container)
【容器】 可形象理解为操作系统吧!
【启动容器】 可理解为安装操作系统 该操作系统把我们主要的应用都集成了
- 快速构建容器环境(操作系统安装后会自动开启了)
docker run -dit \
-p 9999:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
--privileged=true \
--name=lnmp \
2233466866/lnmp
注: -p [宿主机端口]:[容器端口]
-d 如果使用了 -d 参数运行容器 此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。
–name 是给容器起个名称 方便后面使用
3.连接容器(Connect)
连接容器 可以理解为通过终端登录进系统了 如
xshell
或crt
连接linux
#容器名称与上一步保持一致
- 注意登录前后主机名区别(说明我们进入容器里面来了,此时你可以把他理解为一个独立的linux环境)
- 在这里你可以使用linux的一些基本命令
- 测试效果(在浏览器输入宿主机ip:端口号访问)
如果出现如下显示则说明换件安装成功至此环境已经搭建完成
具体配置修改可以进入容器修改,然后就像linux下操作完全一样了
如遇配置问题可以参考【LNMP环境搭建】
4、容器启动与停止
容器停止命令docker container stop [容器名称]
容器启动命令docker container start [容器名称]
- 容器停止命令
在宿主机上执行如下命令
docker container stop lnmp
- 容器启动命令
docker container start lnmp
5、配置文件说明
#进入容器中查看如下配置(可自己修改)
# PHP配置文件
/usr/local/php7/lib/php.ini
/usr/local/php7/etc/php-fpm.conf
/usr/local/php7/etc/php-fpm.d/www.conf
#nginx配置文件
/usr/local/nginx/conf/nginx.conf
# mysql配置文件位置
/etc/my.cnf
6、故障处理
- 端口被占用
docker: Error response from daemon: driver failed \
programming external connectivity on endpoint lnm1p \
(75654aff31376dbf030941c1278a62dbbbc246843bec07525d2980c81a088f2c): \
Bind for 0.0.0.0:9000 failed: port is already allocated.
使用 netstat -onutpl
查看端口占用情况并关闭占用程序
- 容器名称已存在处理
提示如下
docker: Error response from daemon: Conflict. \
The container name "/lnm1p" is already in use by container\ "546478d9f9ad5eba83caa33e9cd3fae451ff\
3aa05ce14424dfb57644f0e780a6". \
You have to remove (or rename) \
that container to be able to reuse that name.
See 'docker run --help'.
出现这种情况说明这个容器名称已经有了,你可以通过 docker ps -a
查看所有容器,你可以选择删除重名的容器或将你的容器重命名
删除容器命令 docker rm -f [容器名称或id]
- 然后再重新构建容器即可
docker run -dit \
-p 9999:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
--privileged=true \
--name=lnmp \
2233466866/lnm1p
- 站点无法访问
容器环境已经构建成功了但是无法通过网络访问。您需要做如下操作
- 进入宿主机关闭防火墙或者开放指定端口
services iptables stop
- 如果是云服务器需要配置安全策略(可参照各云服务器厂商配置说明)
- 数据库密码初始化
在容器中执行如下命令然根据初始化密码登录后修改数据库密码
cat /var/log/mysqld.log|grep 'A temporary password'
三、挂载目录构建LNMP
1、下载镜像
已经下载的用户可以跳过此步骤。
docker pull 2233466866/lnmp
2、构建容器
使用此方法将项目目录挂载在宿主机的指定位置方便业务部署
# 高级用法(Advanced usage)
docker run -dit \
-p 9999:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /data/docker-lnmp/www:/www \
--privileged=true \
--name=lnmp2 \
2233466866/lnmp
3、进入容器
docker exec -it lnmp2 bash
查容器中的/www
目录发现该目录下已经存在 index.html
说明挂载文件没问题。
我们在宿主机中编辑 /data/docker-lnmp/www/index.html
录入如下内容
访问效果
同样我们可以输出 phpinfo
信息
我们在宿主机中新建 /data/docker-lnmp/www/index.php
文件
<?php
/**
* User : 扣丁曼
* Email : caimh0223@163.com
* Blog : http://52qcg.cn
* QQ : 876146977
* 微信 : caimh0223
* Date : 2020-04-03
* Time : 10:55
* Description : ********
*/
echo phpinfo();
访问效果如下
END
好吧!今天就到这里。