Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)
概述
使用docker搭建一个php、redis、mysql、nginx的常用实例,基础好的同学可直接跳过前面的基础讲解,直接开始实战。
基础知识
镜像操作
1.查看docker版本
docker-compose --version
docker version
2.获取镜像
一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像。
docker pull php:7.4.25-fpm-buster
pull子命令支持的选项主要包括:
-a, --all-tags=true|false:是否获取仓库中的所有镜像,默认为否;
--disable-content-trust:取消镜像的内容校验,默认为真。
3.查看镜像
使用命令可以列出本地主机上已有镜像的基本信息。
➜ docker docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest b05128b000dd 5 days ago 516MB
php 7.4.25-fpm-buster 918ac8229863 4 weeks ago 405MB
redis latest 7faaec683238 5 weeks ago 113MB
nginx latest 87a94228f133 6 weeks ago 133MB
TAG信息用于标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过TAG信息来区分发行版本,如18.04、18.10等。
另外,使用inspect命令查看详细信息。
docker docker image inspect 192.168.0.177:5000/gzcp:1.3
4.存入和导出镜像
导出镜像:
docker save -o ~/gzcp.tar 192.168.0.177:5000/gzcp:1.3
存入镜像:
docker load -i gzcp.tar
有不清楚的地方,可以执行帮助命令
docker image help
5.删除镜像
docker rmi 15117995393/gzcp_dev:gzcp_dev
容器操作
1.登陆容器
bash:以bash的形式进行交互模式
docker exec -it d1854ecb30df bash
2.删除容器
docker rm
默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。
3.容器的导出与导入
导出镜像命令
docker export -o ~/lnmp1.7.tar 804c161615c3
导入镜像命令
docker import ~/lnmp1.7.tar -t lnmp
4.查看容器
查看容器详情命令
docker inspect stark_lnmp:v1.0
查看容器内进程,b0b5a9371ce4是容器ID
docker top b0b5a9371ce4
查看docker状态
docker stats
Docker数据管理
1.数据卷
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
docker volume create -d local test test
2.绑定数据卷
除了使用volume子命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
-mount选项支持三种类型的数据卷,包括:
- -mount选项支持三种类型的数据卷,包括:
- bind:绑定数据卷,映射到主机指定路径下;
- tmpfs:临时数据卷,只存在于内存中。
下面使用training/webapp镜像创建一个Web容器,并创建一个数据卷挂载到容器的/opt/webapp目录:
docker run -d -P --name web --mount type=bind,source=/webapp, destination=/opt
上述命令等同于使用旧的-v标记可以在容器内创建一个数据卷:
docker run -d -P --name web -v /webapp:/opt/webapp training/webapp bash
另外,本地目录的路径必须是绝对路径,容器内路径可以为相对路径。如果目录不存在,Docker会自动创建。
3.数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
docker run -it -v /dbdata --name dbdata alpine
然后,可以在其他容器中使用–volumes-from来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷。
docker run -it --volumes-from dbdata --name db1 alpine
注意:使用–volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。
端口映射与容器互联
1.从外部访问容器应用
在启动容器时加入映射端口 -p 宿主机端口:容器端口
docker run -it -d -p 6379:6379 redis bash
2.互联机制实现便捷互访
使用–link参数可以让容器之间安全地进行交互。
docker run -it --link redis-test:74-fpm b6086f719fea bash
实战 单独安装部署Mysql、Redis、PHP、Nginx 应用
执行命令,查看本地镜像,stark_lnmp:v1.0 是我之前集成了lnmp1.7的镜像,有需要的同学可以从我要镜像地址
➜ Docker docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
stark_lnmp v1.0 279e576fa083 4 weeks ago 5.43GB
执行命令:
docker run -d -i -t --privileged=true --name lnmp -p 90:80 -p 453:443 -p 6389:6379 -p 11221:11211 -p 3316:3306 -v /Users/stark/ChangPei/Docker/lnmp/wwwroot:/home/wwwroot stark_lnmp:v1.0 bash
登陆docker:
docker exec -it 21e94b048331 bash
启动lnmp
[root@7d63a5989e81 default]# lnmp
+-------------------------------------------+
| Manager for LNMP, Written by Licess |
+-------------------------------------------+
| https://lnmp.org |
+-------------------------------------------+
Usage: lnmp {start|stop|reload|restart|kill|status}
Usage: lnmp {nginx|mysql|mariadb|php-fpm|pureftpd} {start|stop|reload|restart|kill|status}
Usage: lnmp vhost {add|list|del}
Usage: lnmp database {add|list|edit|del}
Usage: lnmp ftp {add|list|edit|del|show}
Usage: lnmp ssl add
Usage: lnmp {dnsssl|dns} {cx|ali|cf|dp|he|gd|aws}
Usage: lnmp onlyssl {cx|ali|cf|dp|he|gd|aws}
mysql测试:
$link = mysqli_connect('127.0.0.1', 'root', '12345678','test');$sql = "select `id`,`page_name` from `t_page` limit 0,5";$result = mysqli_query($link,$sql);while ( $row=mysqli_fetch_array($result,MYSQLI_ASSOC) ) {echo "id:".$row['id'].",page_name:".$row['page_name'].PHP_EOL;
}
执行结果:
[root@7d63a5989e81 default]# php mysql.php
id:1,page_name:公司简介
id:2,page_name:企业荣誉
id:3,page_name:发展历程
id:4,page_name:联系我们
id:5,page_name:人才招聘
安装服务
之前安装遇到了很多问题,我猜想是没有网络互联到php程序??!!
Mysql,
docker pull mysql:5.6docker run -itd --name mysql1 -p 3326:3306 -e MYSQL_ROOT_PASSWORD=rootroot mysql:5.6
redis
docker pull redis:6.2.6
2.修改默认配置
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问protected-mode no #默认yes,开启保护模式,限制为本地访问daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败databases 16 #数据库个数(可选),我修改了这个只是查看是否生效。。dir ./ #输入本地redis数据库存放文件夹(可选)appendonly yes #redis持久化(可选)
3.启动redis
docker run -p 6399:6379 --name redis1 -v /Users/stark/ChangPei/Docker/redis/redis1.conf:/etc/redis/redis.conf -v /Users/stark/ChangPei/Docker/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes
php+Nginx
docker pull php:7.4-fpm
2.运行
docker run --name phpfpm1 -v /Users/stark/ChangPei/Docker/nginx/www:/www -d php:7.4-fpm
3.安装Nginx
docker run --name runoob-php-nginx -p 8083:80 -d \-v /Users/stark/ChangPei/Docker/nginx/www:/usr/share/nginx/html:ro \-v /Users/stark/ChangPei/Docker/nginx/conf/conf.d:/etc/nginx/conf.d:ro \--link phpfpm1:php \nginx:1.20
遗留问题
在PHP脚本里链接不上redis服务,但是软件上可以?!?!?!?!
怎么安装PHP所需要的扩展?!?!?!?!
Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)相关推荐
- (三)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - Nginx环境搭建
因为在网上发现系统性.严谨(特别是在安全方面)的Linux部署方面的参考文章很少,于是整理以下六篇Linux环境部署的系列性文章,其为本人在实践中,完整的搭建一个基于Linux系统上Centos+Ng ...
- (六)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - 常用命令总结
因为在网上发现系统性.严谨(特别是在安全方面)的Linux部署方面的参考文章很少,于是整理以下六篇Linux环境部署的系列性文章,其为本人在实践中,完整的搭建一个基于Linux系统上Centos+Ng ...
- (四)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - 安装Tomcat和JDK 以及 Nginx与Tomcat整合
因为在网上发现系统性.严谨(特别是在安全方面)的Linux部署方面的参考文章很少,于是整理以下六篇Linux环境部署的系列性文章,其为本人在实践中,完整的搭建一个基于Linux系统上Centos+Ng ...
- Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...
Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...
- monit mysql_monit配置监控启动nginx php mysql redis mongodb 服务器
-----nginx php mysql redis mongodb 配置 完美OK------– # nginx check process nginx withpidfile /usr/local ...
- 快速部署PHP Web环境(docker nginx php mysql redis)
注:此项目已升级成 通用 docker 项目自动化部署脚本工具 先看最终效果,如下: 使用方式 debian/ubuntu/deepin: sudo wget -O /tmp/src.tar.gz h ...
- ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx
一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...
- 全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memc
http://segmentfault.com/blog/fish/1190000000606752 用了一年的Mac OS X了,之前不熟悉这个系统,用的是系统自带的PHP 以及DMG包安装的MyS ...
- 全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memcache ... ... (LNMP开发环境)
文章来源:https://segmentfault.com/a/1190000000606752 OS X Mavericks 重新安装系统,在苹果商店下载好OS X Mavericks安装文件,然后 ...
最新文章
- 编程实现WCF客户端调用
- Android 点击跳转到蓝牙设置界面
- shell中字符串操作【转】
- 写sql语句的经验之谈
- bzoj1024 [SCOI2009]生日快乐 结论+dfs
- 再等等!iPhone 11和iPhone SE还会继续降价
- 中关村在线 测试软件,主观测试软件:ZOL Monitor LCD 简介
- 台大李宏毅Machine Learning 2017Fall学习笔记 (3)Bias and Variance (v2)
- CAJ VIEWER 7.2 已停止工作(正确的处理方法,最快最正确的方法,网上的其他方法也就是看看,很难找到问题的正确办法)
- 软件构造-线程安全性
- 2007中国优秀无线站点TOP50
- 2021第一届网刃杯网络安全大赛-签到题
- 对数据中心动环监控系统的认识
- 计算机财务管理复利现值的公式,财务管理公式汇总
- Three.js加载OBJ模型或FBX模型
- python批量爬取校花网图片
- iso国家代码 三位字母_ISO 2字母语言代码
- php为网页更改颜色,php如何设置网页颜色?
- 里氏代换原则、依赖倒转原则
- Ranger 简介与安装