Docker--未完结

一.Docker是干什么的

在没亲自使用过之前,再多的术语也仅仅是抽象,只有写的人或者使用过的人能看懂。
所以,作为新手来说,只要知道Docker是用于部署项目就够了,下面展示如何用Docker部署项目及Docker常用命令。

二、安装Docker

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
#6 然后我们就可以启动docker了
systemctl start docker

关联知识点:Docker进程相关的命令

#1.启动docker服务
systemctl start docker
#2.停止docker服务
systemctl stop docker
#3.重启docker服务
systemctl restart docker
#4.查看docker服务状态
systemctl status docker
#5.设置开机启动docker服务
systemctl enable docker

三.用Docker部署应用

简单说就是先搜索镜像,然后再拉取(下载)镜像,最后再根据镜像创建容器。

1、部署MySQL

【1】搜索mysql镜像

docker search mysql

【2】拉取mysql镜像(这里拉取最新版)

docker pull mysql:latest

【3】创建容器

docker run --name mysql-server  -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306  -d mysql:latest

–name:容器的名字
-e 设置mysql密码,要记住你设置的密码
-p 3306:3306 将docker中的3306端口映射到宿主机的3306端口,外界要访问的就是3306端口
-d 根据什么镜像来创建的

【4】开始使用mysql

docker exec -it mysql-server bash
mysql -uroot -p

或者将两个命令合起来使用

docker exec -it mysql-server mysql -uroot -p

注:

(1)使用docker exec命令,可以在容器中启动一个新的进程,并且可以与该进程进行交互。(2)在Docker中,-it是两个选项的组合:-i-t
综合使用-it选项,可以在容器中运行交互式进程,并且通过终端与之进行交互,比如在终端中键入命令或者接收命令的输出。在上述命令中,docker exec -it mysql-server mysql -uroot -p打开了一个交互式的MySQL会话,可以使用MySQL的命令行工具与数据库进行交互。

【5】用datagrip连接mysql

除了常规的要设置腾讯云防火墙和linux的防火墙,连接时候还要将高级的选项除了useSSL要为false,allowPublicKeyRetrieval也要改为true。

2、部署redis

【1】搜索redis镜像

docker search redis

【2】拉取redis镜像

docker pull redis:5.0

【3】用该redis镜像创建容器运行

#从docker的6379端口映射到宿主机的6379端口,命名为c_redis
docker run -id --name=c_redis -p 6379:6379 redis:5.0

四.镜像和容器

1.概念

可以看到有两个非常重要的概念:镜像和容器。

【1】Docker 镜像可以看作是一个应用程序运行所需的所有文件和依赖项的打包版本。类比于照片,Docker 镜像就像是一张静态的照片,记录了应用程序的全部内容和状态。可以通过构建  Dockerfile 文件来创建镜像,也可以向 Docker Hub 等镜像仓库下载别人构建好的镜像。我们上面就是拉取别人的镜像。


【2】Docker 容器则是根据镜像创建的运行实例,其主要作用是隔离不同的应用程序或应用程序的不同版本,以便它们不会相互干扰。类比于卡通里的小木屋,Docker 容器就像是一个动态的小木屋,可以在其中运行应用程序并与外部系统交互。

为什么要隔离呢?比如有两个写好了两个springboot程序,一个运行在java8的环境,一个运行在java17的环境,那样的话如果没有docker或者虚拟机,那么两个程序肯定要有一个不能运行。
其他软件之间也可能会发生这种问题,不同的app所需的依赖会冲突,导致部分程序不能运行,这不是我们想看到的。

而Docker容器都有自己的文件系统和网络接口,(可以看成是类似于虚拟机)和其他容器以及宿主机完全隔离。

从logo我们可以看到,如果docker是那只鲸鱼,那么容器就是上面的集装箱。

2.相关命令

接下来介绍镜像和容器相关的命令:

与镜像相关:

#查看本地所有的镜像
docker images
##查看所用镜像的id
docker images -q
#搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
#拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号
#如果版本号不指定则是最新的版本,如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
#删除镜像:删除本地镜像
docker rmi 镜像id #删除指定本地镜像
docker rmi 'docker images -q' #删除所有本地镜像

与容器相关:

#查看容器
docker ps   #查看正在运行的容器
docker ps -a        #查看所有容器
#创建容器
docker run 参数
#进入容器,退出容器不会关闭
docker exec 参数
#停止容器
docker stop 容器名称/id
#启动容器
docker start 容器名称/id
#删除容器:如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称/id
#查看容器信息,如网络信息等
docker inspect 容器名称

docker run的参数说明:
-i:保持容器运行。通常与-t同时使用。加入it这两个参数后,容器创建后自动进入容器后,退出容器后,容器自动关闭。
-t:为容器重新分配一个伪输入终端,通常与-i同时使用。
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。退出后,容器不会关闭。
-name:为创建容器命名。

4.Dockerfile

【1】Dockerfile概念

Dockerfile是一个文本文件,包含了一条条指令,包含了一条条指令,每一条指令构建一层,属于基础镜像,最终构建出一个新的镜像。

可以统一开发测试运维的环境,为整个团队提供一个完全一致的开发环境,实现应用的无缝移植。

【2】案例:用dockerfile部署springboot容器

(1)idea中用maven的package命令打包,如果之前打包过可能要用clear命令一下。

(2)用ssh工具,例如finalshell上传到服务器(我是创建个单独的文件夹docker-files文件夹来存储)

(3)编写dockerfile--不用记,重点知道关键字是什么意思

FROM java:17
MAINTAINER flyingpig <1839976096@qq.com>
ADD uuAttendance-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 9090
WORKDIR /app
CMD java -jar app.jar > /app/hello.log

然后就编辑完毕,退出使用使用编写好的dockerfile构建镜像:

docker build -f ./springboot_dockerfile -t app .

各个步骤的解释【自己根据实际情况进行修改】:

#指定父镜像,指定dockerfile基于那个image构建
FROM java:17
#定义作者信息,用来标明这个dockerfile谁写的 
MAINTAINER flyingpig <1839976096@qq.com>
#将jar包添加到镜像中(生成镜像)
#其中uuAttendance-0.0.1-SNAPSHOT.jar是原来jar包的名称,app.jar是添加到容器后的jar包
ADD uuAttendance-0.0.1-SNAPSHOT.jar app.jar
#指定容器内部的工作目录 如果没有创建则自动创建,
#这里自己定义,就知道在哪里,不用用find指定去寻找hello.log日志
WORKDIR /app
#定义容器启动执行的命令
CMD java -jar /app/hello.log通过dockerfile构建镜像:docker bulid -f dockerfile的文件路径 -t 镜像名称:版本
不写版本表示最新版
docker build -f ./springboot_dockerfile -t app .

【3】遇到的问题

然后你运行你的springboot项目,如果说你的项目没调用到数据库,那么一点问题都没有。如果说你有用到mysql数据库,那么的话程序就无法正常运行,打开日志,发现报错:

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

接下去我们讲讲docker的网络问题。这是不是顺其自然的学习下面这个知识点了,O(∩_∩)O哈哈~。

五.Docker网络--Docker如何处理容器的网络访问

【1】会出现上面问题的具体原理这里不讲,想了解的话去看狂神的视频:
34、Docker0网络详解_哔哩哔哩_bilibili

【2】然后讲讲怎么解决上述的问题:
最简单的解决方法就是在每次docker run的时候添加--net=host,直接用host作为网络。
如果这样写的话端口映射就可以删了,没用。

例如:

docker run --name mysql-server --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker run -id --net=host --name=c_redis redis:5.0

’这样就可以实现不同容器之间使用host网络,从而可以直接使用localhost访问。

【3】但是这样并不推荐,更好的方法是建立一个网络

1.运行以下命令来创建一个自定义网络:

#创建一个网络命名为my_network
docker network create my_network

2.创建网络后,你可以在启动容器时将其连接到该网络。例如:

docker run -id --net=my_network --name=c_redis -p 6379:6379 redis:5.0

在这个网络中的容器就可以相互连接啦。

六.服务编排

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冠达管理:庄家最怕的8个方法?

在股票商场上&#xff0c;庄家总是短时刻内操控价格&#xff0c;并在一定的时刻内进出股市&#xff0c;以赚取巨额赢利。 假如想在股票商场上盈余&#xff0c;那么就必须站在庄家的对立面&#xff0c;把握一些防护和反击的办法。这里就来介绍一些庄家最怕的办法。 一、技能剖析…

【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

restful是web编程里重要的概念 – 一种接口规范也是一种接口设计风格 设计接口&#xff1a; 要考虑&#xff1a;数据返回、接收数据的方式、url、方法 统一风格 rest–表现层状态转移 web–每一类数据–资源 资源通过http的动作来实现状态转移 GET、PUT、POST、DELETE path…

使用Docker构建轻量级Linux容器

Docker是一个开源的容器化平台&#xff0c;可以帮助用户快速创建、部署和管理应用程序的轻量级Linux容器。通过Docker&#xff0c;用户可以将应用程序及其所有依赖项打包成一个独立的容器镜像&#xff0c;并在各种环境中运行&#xff0c;无需担心环境差异和依赖冲突。下面将详细…

R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Box's M检验可视化...

全文链接&#xff1a;https://tecdat.cn/?p33609 Reaven和Miller&#xff08;1979&#xff09;研究了145名非肥胖成年人的葡萄糖耐量和胰岛素血液化学指标之间的关系。他们使用斯坦福线性加速器中心的PRIM9系统将数据可视化为3D&#xff0c;并发现了一个奇特的图案&#xff0c…

h5开发网站-页面内容不够高时,如何定位footer始终位于页面的最底部

一、问题描述&#xff1a; 在使用h5开发页面时&#xff0c;会遇到这个情况&#xff1a;当整个页面高度不足以占满显示屏一屏&#xff0c;页脚不是在页面最底部&#xff0c;影响用户视觉。想让页脚始终在页面最底部&#xff0c;我们可能会想到用&#xff1a; 1.min-height来控…

VMware16安装ghost版win7

文章目录 准备工作GHO 文件装机工具 新建虚拟机配置虚拟机还需要一个 CD/DVD PE 安装步骤分区还原挂载 CD/DVD开始还原 还原之后 准备工作 GHO 文件 可以去百度搜索这种文件&#xff0c;我这里是从系统之家下载的deepin win7 ghost 系统 装机工具 因为下载的 ghost 版的 w…

【Vue】vue2使用pdfjs预览pdf文件,在线预览方式一,pdfjs文件包打开新窗口预览pdf文件

系列文章目录 【Vue】vue2预览显示quill富文本内容&#xff0c;vue-quill-editor回显页面&#xff0c;v-html回显富文本内容 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程 【Vue】vue2使用pdfjs预览pdf文件&#xff0c;在线预览方式一&#xff0c;pdfjs文件包…

计算机丢失mfc140u.dll怎么办,mfc140u.dll丢失的解决方法分享

随着科技的飞速发展&#xff0c;计算机已经成为了人们日常生活和工作中不可或缺的工具。然而&#xff0c;在使用计算机的过程中&#xff0c;用户可能会遇到各种问题&#xff0c;其中计算机丢失 mfc140u.dll 无法运行的问题就是一个比较常见的困扰。小编将从以下几个方面对这个问…

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器&#xff1f; 为什么需要液冷&#xff1f; 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷&#xff0c;区别在哪&#xff1f; 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…

postman导入json脚本文件(Collection v1.0、Collection v2.0)

1. 以postman v8.5.1 版本为例 2. 在postman v5.0.2 低版本中导出json脚本文件, 请选择Collection v2.0 Export - Collection v2 3. 在postman v8.5.1 版本 导入 json脚本文件 Import - Collection v2 - Export - Import

redis缓存穿透、击穿、雪崩介绍

缓存穿透 概念 缓存穿透指某一特定时间批量请求打进来并访问了缓存和数据库都没有的key&#xff0c;此时会直接穿透缓存直达数据库&#xff0c;从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险&#xff1b; 解决方案 一、通过布隆过滤器解决 原理&#xff1a;将…

React 全栈体系(七)

第四章 React ajax 一、理解 1. 前置说明 React本身只关注于界面, 并不包含发送ajax请求的代码前端应用需要通过ajax请求与后台进行交互(json数据)react应用中需要集成第三方ajax库(或自己封装) 2. 常用的ajax请求库 jQuery: 比较重, 如果需要另外引入不建议使用axios: 轻…

vue 使用canvas 详细教程

Vue.js 中使用 Canvas Vue.js 是一个流行的 JavaScript 框架&#xff0c;用于构建用户界面。它提供了一种简洁的方式来管理和渲染数据&#xff0c;同时也支持与其他库和工具的集成。要在 Vue.js 中使用 Canvas&#xff0c;您可以按照以下步骤进行操作&#xff1a; 在 Vue.js …

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…

.netcore对传输类设置区分大小

.Net Core中内置了对Json的转化与解析 可将PropertyNameCaseInsensitive false 设置为区分大小写。

竞赛选题 基于机器视觉的行人口罩佩戴检测

简介 2020新冠爆发以来&#xff0c;疫情牵动着全国人民的心&#xff0c;一线医护工作者在最前线抗击疫情的同时&#xff0c;我们也可以看到很多科技行业和人工智能领域的从业者&#xff0c;也在贡献着他们的力量。近些天来&#xff0c;旷视、商汤、海康、百度都多家科技公司研…

国家网络安全周 | 保障智能网联汽车产业,护航汽车数据安全

9月13日上午&#xff0c;2023年国家网络安全宣传周汽车数据安全分论坛在福州海峡国际会展中心正式举办。本次分论坛主题是“护航汽车数据安全&#xff0c;共促产业健康发展”&#xff0c;聚焦汽车数据安全、个人信息保护、密码安全、车联网安全保险等主题。 与此同时&#xff…

辊轧机液压系统泵站比例阀放大器

液压系统主要由液压泵、电机、液压缸、油箱、高压软管等组成。 液压泵将机油从油箱吸入&#xff0c;通过高压软管送至液压缸中&#xff0c;完成动力转换。液压泵的驱动由电机通过皮带或轮齿传动完成。 液压折弯机的液压油流动路线主要分为液压油箱、吸油过滤器、液压泵、主控…

《C和指针》笔记23: 指针的指针

int a 12; int *b &a;现在有了第三个变量c c &b;c的类型是什么&#xff1f;显然它是一个指针&#xff0c;但它所指向的是什么&#xff1f;变量b是一个“指向整型的指针”&#xff0c;所以任何指向b的类型必须是指向“指向整型的指针”的指针&#xff0c;更通俗地说…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 七)

PersistentStorage&#xff1a;持久化存储UI状态 前两个小节介绍的LocalStorage和AppStorage都是运行时的内存&#xff0c;但是在应用退出再次启动后&#xff0c;依然能保存选定的结果&#xff0c;是应用开发中十分常见的现象&#xff0c;这就需要用到PersistentStorage。 Pe…