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.rhkb.cn/news/133243.html

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

相关文章

ajax day4

1、promise链式调用 /*** 目标&#xff1a;把回调函数嵌套代码&#xff0c;改成Promise链式调用结构* 需求&#xff1a;获取默认第一个省&#xff0c;第一个市&#xff0c;第一个地区并展示在下拉菜单中*/let pname axios({url: http://hmajax.itheima.net/api/province,}).t…

DataGrip 2023 年下载、安装教程、亲测可用

文章目录 前言1. 下载2. 安装3、DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境&#xff0c;支持 MySQL 和 PostgreSQL&#xff0c;Microsoft SQL Server 和 Oracle&#xff0c;Sybase&#xff0c;DB2&#xff0c;SQLite&#xff0c;还有 Hy…

【SpringMVC】自定义注解与AOP结合使用

目录 一、SpringMVC之自定义注解 1.1 Java注解简介 1.2 为什么要用注解 1.3 注解的分类 ⭐ 1.3.1 JDK基本注解 1.3.2 JDK元注解 1.3.3 自定义注解 1.4 自定义注解三种使用案例 1.4.1 案例一&#xff08;获取类与方法上的注解值&#xff09; 1.4.2 案例二&#xff0…

JS的执行过程

一&#xff1a;错略可分为三个过程&#xff1a; 分词/词法分析阶段解析/语法分析阶段代码执行阶段 二&#xff1a;详细过程 分词/词法分析阶段&#xff08;Tokenizing/Lexing&#xff09;&#xff1a;首先&#xff0c;Javascript引擎会将代码按照空格、标点、运算符等分成一个…

Windows关闭zookeeper、rocketmq日志输出以及修改rocketmq的JVM内存占用大小

JDK-1.8zookeeper-3.4.14rocketmq-3.2.6 zookeeper 进入到zookeeper的conf目录 清空配置文件&#xff0c;只保留下面这一行。zookeeper关闭日志输出相对简单。 log4j.rootLoggerOFFrocketmq 进入到rocketmq的conf目录 logback_broker.xml <?xml version"1.0&q…

数据结构与算法:树

目录 树 定义 结构 二叉树 定义 结构 形式 满二叉树 完全二叉树 存储 链式存储结构 数组 孩子节点 父节点 应用 查找 维持相对顺序 遍历 深度优先遍历 前序遍历 中序遍历 后序遍历 广度优先遍历 层序遍历 二叉堆 定义 自我调整 操作 插入加点 删…

深度解析shell脚本的命令的原理之rm

rm 是 Unix/Linux 系统中的一个基本命令&#xff0c;用于删除文件或目录。以下是对这个命令的深度分析&#xff1a; 基本操作&#xff1a;rm 命令删除一个或多个文件或目录。这是通过从文件系统中移除链接来完成的。在 Unix/Linux 中&#xff0c;文件是通过链接&#xff08;可以…

SpringMVC-----JSR303以及拦截器

目录 JSR303 什么是JSR303 JSR303的作用 JSR303常用注解 入门使用 拦截器是什么 拦截器的工作原理 拦截器的作用 拦截器的使用 JSR303 什么是JSR303 JSR303是Java为Bean数据合法性校验提供给的标准框架&#xff0c;已经包含在JavaEE6.0中1。 JSR303通过在Bean属性中标…

PostgreSQL 事务并发锁

文章目录 PostgreSQL 事务大家都知道的 ACID事务的基本使用保存点 PostgreSQL 并发并发问题MVCC PostgreSQL 锁机制表锁行锁 总结 PostgreSQL 事务 大家都知道的 ACID 在日常操作中&#xff0c;对于一组相关操作&#xff0c;通常要求要么都成功&#xff0c;要么都失败。在关系…

html实现邮件模版布局-flex布局table布局-demo

邮件模版布局 flex - 布局简单方便 兼容性差 table - 优点 就是兼容性好&#xff0c;其他没有优点 注&#xff1a;使用图片需要png最好&#xff0c;使用svg图google邮箱会出现不能使用的情况 效果图 flex布局 <!DOCTYPE html> <html lang"en" xmlns:th&qu…

Mojo 语言官网

Mojo面向 AI 开发者的新型编程语言&#xff0c;无缝支持CPU、GPU&#xff0c;兼容Python&#xff0c;跟Python类似的语法&#xff0c;但是比Python快68000倍。目前Mojo仅支持Ubuntu&#xff0c;暂不支持Windows和Mac&#xff0c;可以在Mojo Playground先体验一下。 Mojo 语言…

JVM类加载和双亲委派机制

当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把类加载到JVM&#xff0c;本文主要说明类加载机制和其具体实现双亲委派模式。 一、类加载机制 类加载过程&#xff1a; 类加载的过程是将类的字节码加载到内存中的过程&#xff0c;主要包括…

Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知

Outlook用户使用场景&#xff1a; 在企业中&#xff0c;会议和活动的顺利举行对于业务运转和团队协作至关重要。然而&#xff0c;计划的变动总是无法避免&#xff0c;这可能会导致其他人的计划受到影响&#xff0c;打乱原有的安排。为了解决这个问题&#xff0c;许多企业开始使…

前端面试要点

0914 JScript深拷贝和浅拷贝&#xff08;js解构赋值算哪个&#xff1f;&#xff09; 深拷贝和浅拷贝 回流和重绘 回流和重绘 webpack打包流程 Webpack打包 虚拟DOM 虚拟DOM git合并分支 git合并分支 CSS盒子模型 CSS盒子模型 0911 WebPack分包 webpack分包 ts泛型 ts泛型 优化…

基于Python计算PLS中的VIP值(变量投影重要性分析法)

sklearn中PLS回归模型并没有计算VIP值的方法,但VIP又是很重要的筛选变量方法。下附代码思路与完整代码。 计算公式: 其中: VIPj:对应于第j个特征的VIP值;p:预测变量的总数;A:PLS成分的总数;R矩阵:A个PLS成分中,每个成分a都对应一套系数wa将X转换为成分得分,系数矩…

spring boot 使用AOP+自定义注解+反射实现操作日志记录修改前数据和修改后对比数据,并保存至日志表

一、添加aop starter依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>二&#xff1a;自定义字段翻译注解。&#xff08;修改功能时&#xff0c;需要显示如…

亚马逊关于在澳大利亚销售儿童玩具和游戏的政策合规标准是什么?

亚马逊关于在澳大利亚销售儿童玩具和游戏的政策 在亚马逊澳大利亚商城中&#xff0c;设计用于或明确表示专供 14 岁及以下儿童玩耍用的所有商品或材料均视为儿童玩具。 商品根据以下标准确定为“儿童商品”&#xff1a; 预期用途&#xff1a; ASIN 是否可供儿童使用&#xff…

JAVA面向对象(OOP)总结----宏观的程序设计

类&#xff1a;使用关键字class&#xff0c;抽象的概念集合。例如人类&#xff0c;具有共性的产物。 对象&#xff1a;具有自己独立属性&#xff0c;具有个性的个体。 类中可以定义的内容&#xff1a; 成员变量&#xff08;属性&#xff09;&#xff1b;成员方法&#xff08;…

torch.where()两种用法

参考官方文档。 官方文档中只给了第一种用法。根据条件condition&#xff0c;从input,other中选择元素f返回。如果满足条件&#xff0c;则返回input元素。若不满足&#xff0c;返回other元素。 还有一种用法是通过where返回张量中满足条件condition的坐标&#xff0c;以二维张…

【自动化测试】如何在jenkins中搭建allure

相信大家在做自动化测试过程中&#xff0c;都会用到自动化测试环境&#xff0c;目前最常见的就是通过容器化方式部署自动化测试环境&#xff0c;但对于一些测试小白&#xff0c;不是很会搭建持续集成环境&#xff0c;特别是从0-1的过程&#xff0c;需要自行搭建很多依赖环境&am…