欢迎来到“雪碧聊技术”CSDN博客!
在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。
让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!
目录
一、部署MySQL
docker%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2MySQL-toc" style="margin-left:40px;">1、输入docker命令,一键部署MySQL
举例:
docker%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E3%80%81%E9%83%A8%E7%BD%B2MYSQL-toc" style="margin-left:120px;">①在linux控制台,输入上面的docker命令,一键安装、部署MYSQL
①先声明一个观点:
②什么是镜像?
③镜像的强大之处
④什么是容器?
3、镜像仓库
docker%E8%BF%90%E8%A1%8C%E7%9A%84%E6%B5%81%E7%A8%8B-toc" style="margin-left:40px;">4、docker运行的流程
二、命令解读
1、解读上述命令
docker%20run%20-d%EF%BC%9A%E5%88%9B%E5%BB%BA%E5%B9%B6%E8%BF%90%E8%A1%8C%E8%AF%A5%E5%AE%B9%E5%99%A8%EF%BC%88%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%3D%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E5%86%85%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%89%EF%BC%8C-d%E8%A1%A8%E7%A4%BA%E8%AE%A9%E5%AE%B9%E5%99%A8%E5%9C%A8%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E3%80%82-toc" style="margin-left:80px;">①docker run -d:创建并运行该容器(运行容器=运行容器内的进程),-d表示让容器在后台运行。
②--name mysql:给容器起一个名字(名字必须唯一)叫mysql(叫啥都行,也可以叫mysql123),方便我们区分不同的容器。
③-p 3306:3306:设置端口映射。将宿主机的端口3306,映射到容器的3306端口。
docker%E5%AE%98%E7%BD%91%E6%9F%A5%E7%9C%8B%E5%AF%B9%E5%BA%94%E9%95%9C%E5%83%8F%E9%9C%80%E8%A6%81%E5%93%AA%E4%BA%9B%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F-toc" style="margin-left:80px;">④-e KEY=VALUE:是设置环境变量。具体设置哪些环境变量,由镜像的制作者提供。我们做的就是去docker官网查看对应镜像需要哪些环境变量
⑤mysql:指定所运行镜像的名字。比如我们想运行mysql,此处就写mysql;我们想运行nginx,此处就写nginx。
举例:
3、总结
一、部署MySQL
docker%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2MySQL">1、输入docker命令,一键部署MySQL
先停掉虚拟机中的MySQL,确保你的虚拟机已经安装了Docker,且网络开通的情况下,执行下面命令即可安装MySQL:
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql
举例:
docker%E5%91%BD%E4%BB%A4%EF%BC%8C%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E3%80%81%E9%83%A8%E7%BD%B2MYSQL" style="background-color:transparent;">①在linux控制台,输入上面的docker命令,一键安装、部署MYSQL
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql
运行结果:
注意:如果报错,可能是我们配置的docker镜像源失效了,我们换一个就行。
举例:
# 创建目录
mkdir -p /etc/docker# 复制内容
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker
②使用navicat,连接刚才安装、部署好的mysql
可见此时成功连接到了Linux上的数据库。
2、镜像和容器
①先声明一个观点:
我们安装QQ时,安装完的最终结果,是得到了磁盘上关于QQ的一堆文件。
举例:我们安装完QQ,会得到以下磁盘文件.
那么此时我把这些文件打成压缩包发给你,你解压之后,就可以直接运行QQ。这就叫绿色免安装版。
②什么是镜像?
举例:Docker在安装MySQL时,就是从镜像仓库中,下载上述的那些磁盘文件,我们有了关于MySQL运行所需的磁盘文件,就可以直接运行MySQL。只不过在docker中,那些磁盘文件不叫磁盘文件,而是叫“镜像”。
因此,镜像的定义:当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用所需的环境、配置、系统函数库。
简单来说,镜像就是一个安装好的、配置好的、包含所需的环境、配置、系统函数库的一个包(绿色免安装的包,里面全是文件,下载后直接就能运行)。我们无需操心该软件的安装过程、所需的依赖、环境等,因为包里都有。
③镜像的强大之处
因为镜像不仅包含了应用本身所对应的文件,还包含了应用所需的环境、配置、系统函数库等。因此镜像能够忽略操作系统、环境的差异。根本原因就是,我使用docker安装该应用时,连同该应用所需的环境、配置、系统函数库也下载到了本地。
④什么是容器?
容器:Docker会在运行镜像时,创建一个隔离环境,这个隔离环境就称为“容器”。
也就是说,你运行起来的东西,它和其他的进程是相互隔离、互不干扰的。
举例:
因此我们多次利用docker启动mysql,分别指定不同的端口,就搭建了一个mysql的集群。每一个mysql都处于一个独立的容器,容器之间相互隔离、互不干扰。
3、镜像仓库
镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。
我们在这个镜像仓库中,可以寻找到各种软件的镜像(绿色免安装版,拿来磁盘文件,直接就运行应用)。
比如:我是一款游戏的开发者,我想让别人通过docker直接安装、部署我们的游戏,那么就可以将该游戏所对应的所有磁盘文件(磁盘文件就叫“镜像”),直接放到镜像仓库,这样别人就可以通过docker命令直接下载了。
docker%E8%BF%90%E8%A1%8C%E7%9A%84%E6%B5%81%E7%A8%8B">4、docker运行的流程
二、命令解读
1、解读上述命令
docker%20run%20-d%EF%BC%9A%E5%88%9B%E5%BB%BA%E5%B9%B6%E8%BF%90%E8%A1%8C%E8%AF%A5%E5%AE%B9%E5%99%A8%EF%BC%88%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%3D%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E5%86%85%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%89%EF%BC%8C-d%E8%A1%A8%E7%A4%BA%E8%AE%A9%E5%AE%B9%E5%99%A8%E5%9C%A8%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E3%80%82">①docker run -d:创建并运行该容器(运行容器=运行容器内的进程),-d表示让容器在后台运行。
②--name mysql:给容器起一个名字(名字必须唯一)叫mysql(叫啥都行,也可以叫mysql123),方便我们区分不同的容器。
③-p 3306:3306:设置端口映射。将宿主机的端口3306,映射到容器的3306端口。
docker%E5%AE%98%E7%BD%91%E6%9F%A5%E7%9C%8B%E5%AF%B9%E5%BA%94%E9%95%9C%E5%83%8F%E9%9C%80%E8%A6%81%E5%93%AA%E4%BA%9B%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F">④-e KEY=VALUE:是设置环境变量。具体设置哪些环境变量,由镜像的制作者提供。我们做的就是去docker官网查看对应镜像需要哪些环境变量
此处-e TZ=Asia/Shanghai \ 是设置时区为上海(东八区)。
-e MYSQL_ROOT_PASSWORD=123\ 是设置账号为root,密码为123。
⑤mysql:指定所运行镜像的名字。比如我们想运行mysql,此处就写mysql;我们想运行nginx,此处就写nginx。
注意:此时我们这个镜像名称不是完整的格式,完整的格式如下:
如果不声明镜像的版本号,那么就采用最新版本。
2、为什么要做宿主机—>容器的端口映射 ?
因为docker容器有自己的空间,是对外隔离的,我们ping该容器的ip根本ping不通,更别说找到该容器的3306端口了。
因此只能将该容器的3306端口,映射到Linux虚拟机的3306端口,此时我们找到linux虚拟机的3306端口,就相当于找到了docker容器的3306端口。
举例:如果docker的某个容器,运行的是Mysql应用,那么就占用该容器的3306端口,因为Mysql默认占用3306端口;同理,如果该容器运行的是nginx应用,那么就占用该容器的80端口,因为Nginx默认占用80端口。
举例:
此时我们创建、运行一个容器,叫mysql2.0,该容器运行的是mysql,该进程占用容器的3306端口号(这是固定的,因为mysql默认占用3306端口),此时我们将该容器的3306端口,映射到linux虚拟机的3307端口,这样一来,我们只需要连接192.168.1.100(虚拟机的ip)的3307端口,就能使用该mysql。
如下: