Docker - 搭建部署(Nginx+Mysql+Redis)应用服务和解决MacDocker0问题...
发布网友
发布时间:2024-09-27 04:44
我来回答
共1个回答
热心网友
时间:2024-09-27 20:55
使用docker搭建一个php、redis、mysql、nginx的常用实例,基础好的同学可直接跳过前面的基础讲解,直接开始实战,其中解决了Mac docker中实例间网络不通的问题,对docker宿主机的磁盘映射、网络通信有了更深层次的理解。
镜像操作
1.查看docker版本
2.获取镜像
一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变更而变化,内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest标记的镜像,镜像优先在本地查找如果没有就从dockerhub仓库里拉去。
pull子命令支持的选项主要包括:
3.查看镜像
使用docker images命令可以列出本地主机上已有镜像的基本信息。
TAG信息用于标记来自同一个仓库的不同镜像。例如ubuntu仓库中有多个镜像,通过TAG信息来区分发行版本,如18.04、18.10等。
另外,使用inspect命令查看详细信息。
4.存入和导出镜像
导出镜像:
存入镜像:
有不清楚的地方,可以执行帮助命令docker image help
5.删除镜像和实例
这里有一个地方要注意,docker rmi 删除的是镜像,rmi 代表的是images的意思, docker rm 删除的是docker的实例
容器操作
1.登陆容器
bash:以bash的形式进行交互模式
2.删除容器
默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器,强制删除参数加-f。
3.容器的导出与导入
导出镜像命令
导入镜像命令
4.查看容器
查看容器详情命令
查看容器内进程,b0b5a9371ce4是容器ID
查看docker状态
Docker数据管理
1.数据卷
数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux中的mount行为。
2.绑定数据卷
除了使用volume子命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
-mount选项支持三种类型的数据卷,包括:
下面使用training/webapp镜像创建一个Web容器,并创建一个数据卷挂载到容器的/opt/webapp目录:
上述命令等同于使用旧的-v标记可以在容器内创建一个数据卷:
另外,本地目录的路径必须是绝对路径,容器内路径可以为相对路径。如果目录不存在,Docker会自动创建。
3.数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
然后,可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷,例如创建db1和db2两个容器,并从dbdata容器挂载数据卷。
注意:使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。
端口映射与容器互联
1.从外部访问容器应用
在启动容器时加入映射端口 -p 宿主机端口:容器端口
2.互联机制实现便捷互访
使用--link参数可以让容器之间安全地进行交互。
实战 单独安装部署Mysql、Redis、PHP、Nginx 应用
执行命令,查看本地镜像,stark_lnmp:v1.0 是我之前集成了lnmp1.7的镜像,有需要的同学可以从我要镜像地址
执行命令:
登陆docker:
启动lnmp
mysql测试:
执行结果:
Mysql,redis
2.修改默认配置
3.启动redis
php+Nginx
2.运行
3.安装Nginx
Mac Docker宿主机与容器不能通信问题
问题说明:再容器安装成功后,我遇到一个问题,好久不能得到解答,前几天终于茅塞顿开,为此我在放假期间,特意学了一遍Docker,从数据卷、网络方面入手,我当时所困惑的问题是为什么用客户端从外网可以访问,但是我容器中的PHP代码不能访问呢?
lnmp的docker实例中,php和mysql就可以正常访问到,但是到了容器间通信的时候就链接不到了,但是用客户端软件链接时却可以正确访问到。
访问代码:
“Connection refused”报错信息,是因为没有开启服务端,或者网络不通。我想尽办法都还是不行。
后来知道了底层的网络原理,原因是这样的,Docker的通信默认是网桥,宿主机和容器不在同一个网桥里,Mac的网桥里少了Docker0网段,外部部署的网络之所以能通是因为访问服务时,网段进行了网络的Nat的自动转换,lnmp可以访问到是因为所有的服务都部署在了同一个容器中,原来是这样。
知道的原理确实是不一样的,之后我也遇见过类似的问题,便可轻松化解,下面我说一下这个问题的解决办法。
1. 使用 docker-connector,然后执行以下命令把 docker 的所有 bridge 网络都添加到路由中。
也可以手动修改 /usr/local/etc/docker-connector.conf 文件中的路由,格式是:
配置完成,直接启动服务(需要 sudo,路由配置启动之后仍然可以修改,并且无需重启服务立即生效)
查看容器,启动成功了,问题就解决了,访问时把容器Ip绑定在Dns上就可以了。
测试一下,Mysql、Redis都可以链接了!
...搭建部署(Nginx+Mysql+Redis)应用服务和解决MacDocker0问题
配置完成,直接启动服务(需要 sudo,路由配置启动之后仍然可以修改,并且无需重启服务立即生效)查看容器,启动成功了,问题就解决了,访问时把容器Ip绑定在Dns上就可以了。测试一下,Mysql、Redis都可以链接了!
Flutter搭建私有Pub仓库Docker部署
配置yaml文件信息brewtapmongodb/brew#4.4版本号brewinstallmongodb-community@4.4#启动服务brewservicesstartmongodb-community@4.4#查看已启动服务brewserviceslist2 检测命令brewtapmongodb/brew#4.4版本号brewinstallmongodb-community@4.4#启动服务brewservicesstartmongodb-community@4.4#查看已启动服务...
关于linux学习路线的问题 请教前辈
3. tomcat java应用服务/nginx配合tomcat服务部署及优化第十一阶段:MySQL DBA高级应用实践1. MySQL数据库入门基础命令2. MySQL数据库进阶备份恢复3. MySQL数据库深入事务引擎4. MySQL数据库优化SQL语句优化5. MySQL数据库集群主从复制/读写分离6. MySQL数据库高可用/mha/keepalved第十二阶段:高性能数据库Redis和Memcac...
linux操作系统 课程标准
1. http协议/www服务基础2. nginx web介绍及基础实践3. nginx web精讲结束4. lnmp环境部署/数据库异机迁移/共享数据异机迁移到NFS系统5. nginx负载均衡深入透彻6. keepalived高可用深入透彻第七阶段:Linux中小规模集群构建与优化(50台)1. 期中架构开战说明+期中架构部署回顾2. 全体昼夜兼程部署期中架构并完成上台述...
云计算主要学哪些课程?
2.基于云应用类软件产品的开发、测试、部署、维护等的云服务应用/开发工程师;3.推广销售云计算管理平台和服务器虚拟化软件及云应用软件系统的产品销售工程师;4.处理客户的技术咨询,解决常见产品技术问题的技术客服;5.为企业或政府搭建云计算管理平台,确保私有云平台顺利上线运行的云平台实施工程师。
做系统运维需要学习些什么?
运维学习内容第1阶段 零基础入门 第2阶段 Linux系统管理&shell编程 第3阶段 百万级访问量集群实战 第4阶段 千万级访问量核心集群实战 第5阶段 一切核心技术的底层支持:云计算集群 第6阶段 尚硅谷专有课程:大数据运维 第7阶段 Python自动化和毕业指导 linux学习路线 ...
linux学习重点有哪些
Linux的学习重点主要有以下几个阶段:首先嵌入式的学习大致分为三个阶段,其一为嵌入式系统开发基础理论阶段;其二为嵌入式系统开发核心;其三为嵌入式开发拓展与实践。系统的来讲主要是以下几点:熟练使用Linux操作系统 精通Linux下C语言编程 精通嵌入式Linux应用开发 掌握ARM处理器平台及其接口硬件开发 掌握...
做Linux运维要学哪些东西?什么顺序?主要需要什么能力?
部署在linux服务器上的应用的了解和维护,比如tomcat apache weblogic nagios cacti等。包括开发人员编写的软件,都需要去进行维护和调优建议,最好了解js和java语言。服务器的各种使用情况的监控,如磁盘,cpu,mem,io等。架构设计的了解,以及自动化运维的脚本编写。比如搭建集群或负载模式的架构等,实现...
云计算主要学习什么课程,跟java有关联吗?
2、云计算高级,包括Linux Shell脚本自动化编程、开源数据库MySQL DBA运维。学完这部分的内容,可以使用awk or sed在命令行中处理文本文件、实现服务器的初始化、批量传输文件、编写运维工具,可以搭建MySQL主从复制的架构实现数据实时备份、可以运维MySQL组建的集群、能够实现数据可视化操作。3、云计算项目,...
Linux课程主要讲什么内容?
第十阶段:Java Tomcat服务及防火墙Iptables 1. iptables防火墙精讲上 2. iptables防火墙精讲下 3. tomcat java应用服务/nginx配合tomcat服务部署及优化 第十一阶段:MySQL DBA高级应用实践 1. MySQL数据库入门基础命令 2. MySQL数据库进阶备份恢复 3. MySQL数据库深入事务引擎 4. MySQL数据库优化SQL语句...