概述

使用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)相关推荐

  1. (三)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - Nginx环境搭建

    因为在网上发现系统性.严谨(特别是在安全方面)的Linux部署方面的参考文章很少,于是整理以下六篇Linux环境部署的系列性文章,其为本人在实践中,完整的搭建一个基于Linux系统上Centos+Ng ...

  2. (六)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - 常用命令总结

    因为在网上发现系统性.严谨(特别是在安全方面)的Linux部署方面的参考文章很少,于是整理以下六篇Linux环境部署的系列性文章,其为本人在实践中,完整的搭建一个基于Linux系统上Centos+Ng ...

  3. (四)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - 安装Tomcat和JDK 以及 Nginx与Tomcat整合

    因为在网上发现系统性.严谨(特别是在安全方面)的Linux部署方面的参考文章很少,于是整理以下六篇Linux环境部署的系列性文章,其为本人在实践中,完整的搭建一个基于Linux系统上Centos+Ng ...

  4. Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...

    Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...

  5. monit mysql_monit配置监控启动nginx php mysql redis mongodb 服务器

    -----nginx php mysql redis mongodb 配置 完美OK------– # nginx check process nginx withpidfile /usr/local ...

  6. 快速部署PHP Web环境(docker nginx php mysql redis)

    注:此项目已升级成 通用 docker 项目自动化部署脚本工具 先看最终效果,如下: 使用方式 debian/ubuntu/deepin: sudo wget -O /tmp/src.tar.gz h ...

  7. ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

    一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...

  8. 全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memc

    http://segmentfault.com/blog/fish/1190000000606752 用了一年的Mac OS X了,之前不熟悉这个系统,用的是系统自带的PHP 以及DMG包安装的MyS ...

  9. 全新安装Mac OSX 开发者环境 同时使用homebrew搭建 PHP,Nginx ,MySQL,Redis,Memcache ... ... (LNMP开发环境)

    文章来源:https://segmentfault.com/a/1190000000606752 OS X Mavericks 重新安装系统,在苹果商店下载好OS X Mavericks安装文件,然后 ...

最新文章

  1. 编程实现WCF客户端调用
  2. Android 点击跳转到蓝牙设置界面
  3. shell中字符串操作【转】
  4. 写sql语句的经验之谈
  5. bzoj1024 [SCOI2009]生日快乐 结论+dfs
  6. 再等等!iPhone 11和iPhone SE还会继续降价
  7. 中关村在线 测试软件,主观测试软件:ZOL Monitor LCD 简介
  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (3)Bias and Variance (v2)
  9. CAJ VIEWER 7.2 已停止工作(正确的处理方法,最快最正确的方法,网上的其他方法也就是看看,很难找到问题的正确办法)
  10. 软件构造-线程安全性
  11. 2007中国优秀无线站点TOP50
  12. 2021第一届网刃杯网络安全大赛-签到题
  13. 对数据中心动环监控系统的认识
  14. 计算机财务管理复利现值的公式,财务管理公式汇总
  15. Three.js加载OBJ模型或FBX模型
  16. python批量爬取校花网图片
  17. iso国家代码 三位字母_ISO 2字母语言代码
  18. php为网页更改颜色,php如何设置网页颜色?
  19. 里氏代换原则、依赖倒转原则
  20. Ranger 简介与安装

热门文章

  1. 遥测、遥信、遥控、遥调的简要说明
  2. SimMatch 论文分享
  3. 2种方式获取StreamingAssets下音频
  4. 算法工程 # 深度学习算法落地最后一公里:工业界中的大规模向量检索
  5. java SE小练习
  6. Centos7新开一个终端并在新终端中执行命令
  7. Java学习日记 2022.7.4
  8. #智能宿舍门禁 esp8266+RC522模块+DFPlay Mini Mp3模块实现宿舍智能门锁//NFC//物联网
  9. ICPC 2022西安回顾
  10. 第三代电力电子半导体:SiC MOSFET学习笔记(一)SiC兴起