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
在这个网络中的容器就可以相互连接啦。
六.服务编排
相关文章:
Docker--未完结
一.Docker是干什么的 在没亲自使用过之前,再多的术语也仅仅是抽象,只有写的人或者使用过的人能看懂。 所以,作为新手来说,只要知道Docker是用于部署项目就够了,下面展示如何用Docker部署项目及Docker常用命令。 二、…...
string的使用和模拟实现
💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…...
基础算法---区间合并
直接上题目,不废话! 题目 给定 n 个区间 [l,r],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n 行&am…...
C++(day4)
思维导图 封装Mystring #include <iostream> #include<cstring>using namespace std;class Mystring{ public://无参构造函数Mystring():size(10){strnew char[size];strcpy(str,"");cout<<"无参构造函数"<<endl;}//有参构造函数…...
docker 部署 node.js(express) 服务
1、在 express 项目根目录下新增 Dockerfile 文件,内容如下: 创建服务容器的方法,可以根据自己的情况选择: 1、以下示例为宿主机没有安装 node 环境的写法; 2、先在本地构建包含 node 和 express 的基础镜像࿰…...
商城系统开发,如何确保用户数据的安全性?
确保用户数据的安全性是商城系统开发中至关重要的一项任务。随着数字化时代的到来,用户的个人信息和交易数据已成为黑客和不法分子的重要目标,因此保护用户数据的安全性对于商城系统的成功运营至关重要。在开发商城系统时,以下几个方面是确保…...
黑客必备工具Kali Linux,安装与使用教程全包含,从入门到精通,全网最详细全面的Kali Linux教程
Kali Linux是一个高级渗透测试和安全审计Linux发行版,目前可以说是网络安全人员的专用系统。 Kali Linux功能非常强大,能够进行信息取证、渗透测试、攻击WPA / WPA2保护的无线网络、离线破解哈希密码、将android、Java、C编写的程序反编译成代码等等&am…...
2024滴滴校招面试真题汇总及其讲解(二)
4.【基础题】HashMap了解吗?介绍一下它对应的线程安全版本。 HashMap 是 Java 中一种键值对映射的集合,它使用哈希表来存储键值对。HashMap 具有插入和删除元素效率高的优势,但不是线程安全的。 ConcurrentHashMap 是 Java 中一种线程安全的 HashMap,它使用分段锁来保证线…...
嵌入式-C语言中的if语句
目录 一.if语句介绍 二.案例实操 2.1C语言运行模板代码 2.2运行方法 2.3案例 一.if语句介绍 if判断语句是一种用于根据条件来进行条件分支的控制流语句。通过判断一个条件的真假来决定执行不同的代码块。if语句的基本语法如下:if (条件表达式) {// 如果条件为…...
组合数 rust解法
组合数。 编写函数,参数是两个非负整数n和m,返回组合数 C n m C_n^m Cnm,其中m≤n≤25。 例如,n25,m12时答案为5200300。 解法: fn c(n: u32, m: u32)->u64 {let m if m > n-m {n-m}else{m};le…...
【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 案例一(获取类与方法上的注解值) 1.4.2 案例二࿰…...
MyEclipse 用tomcat部署SSM项目后,项目名称和当前项目不一致
MyEclipse 用tomcat部署SSM项目后,项目成功启动,但是访问所有接口报404 从这里可以看到,部署的项目名为accurate_sugar_control_yc_api,但实际我们项目名字应该为accurate_sugar_control_otc_api 解决办法 在本地找到项目的根目…...
来喽!!炒鸡详细的“数据在内存中的存储”真的来喽!
目录 1. 整数在内存中的存储 1.1 ⼆进制介绍 1.1.1 2进制转10进制 1.1.2 10进制转2进制 1.1.3 2进制转8进制 1.1.4 2进制转16进制 1.2 原码、反码、补码 2. ⼤⼩端字节序和字节序判断 2.1 什么是⼤⼩端? 2.2 为什么有⼤⼩端? 2.3 练习 …...
【面试经典150 | 双指针】验证回文串
文章目录 写在前面Tag题目来源题目解读解题思路方法一:筛选判断方法二:原地判断 知识回顾回文串双指针字符串操作 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分…...
sql存储引擎
-- 查询建表语句 --可以查看引擎 show create table account; -- 可以看到默认引擎 InnoDB ENGINEInnoDB -- 查看当前数据库支持得存储引擎 show engines ; # InnoDB 默认 存储引擎 # MyISAM sql早期默认 存储引擎 # MEMORY 存储在内存中 用来做临时表和缓存 存储引擎 …...
Visual Studio 2022安装SVN插件教程
1. 第一步:避免踩坑,超级重要!!!关闭Visual Studio 2022应用程序;(不然插件装不上,一直转圈!) 2.第二步:下载Visual Studio 2022版本对应的SVN插件…...
【PyCharm Community Edition】:串口开发
串口开发 安装模块:pyserial端口检查:uartDevice自定义文件:SerialMonitor.py导入自定义文件:SerialMonitor.py延伸阅读 安装模块:pyserial Pyserial 是 Python 中使用串口通信的一个第三方库,使用它可以方…...
亲测可用!!!Centos7安装chrome+chromedriver以便实现selenium自动化详细教程
网上很多教程都是在线安装chrome,这样安装了最新稳定的chrome,可惜我遇到chromdriver的版本跟上 chrome,为了早日实现在centos服务selenium自动化,不可能去等待 chromdriver 更新,只能 chrome进行降版本来离线安装。花…...
spring cloud、gradle、父子项目、微服务框架搭建---cloud gateway(十)
总目录 https://preparedata.blog.csdn.net/article/details/120062997 文章目录 总目录一、简介二、order、pay服务 配置context-path三、新建gateway网关服务(1) 启动类添加 SpringCloudApplication 即可(2) application.yml 配…...
AD22使用笔记+积累库
一、前言 使用AD9习惯了,但是需求逐渐上来了就不够用了,好多快捷的新功能要新版本软件才能用,所以升级使用AD22 目录 1.添加层之后中间层无法布线 2.新增快捷方式CtrlW布线,不用点图标了 二、环境 AD22 三、正文 1.添加层之…...
20230912在ubuntu18.04下使用pigz来提高tar命令压缩解压缩的速度
20230912在ubuntu18.04下使用pigz来提高tar命令压缩解压缩的速度 2023/9/15 22:19 https://blog.csdn.net/wb4916/article/details/128447298 20221226编译Toybrick的TB-RK3588X开发板的Android12系统2-SDK预处理 4、单线程压缩。 建议使用:pigz多线程压缩…...
python-xpath语法-爬取彼岸图4k高清动漫壁纸
安装 pip install lxml导入 from lxml import etreexpath使用路径表达式提取html文档中的元素或元素集,然后元素通过沿路径path或步steps来选取数据 XPath常用语法格式 表达式描述div选取div元素的所有子元素/div选取根元素divul//li选取ul元素下的所有li子元素…...
韩信点兵:求韩信一共有多少兵
任务描述 本关任务:求韩信一共有多少兵。 韩信有一队兵,他想知道有多少人,便让士兵排队报数。 按从 1 至5报数,最末一个士兵报的数为 1; 按从 1 至 6 报数,最末一个士兵报的数为 5; 按从 1 …...
10个简单但超级有用的Python装饰器
装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…...
DataGrip 2023 年下载、安装教程、亲测可用
文章目录 前言1. 下载2. 安装3、DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境,支持 MySQL 和 PostgreSQL,Microsoft SQL Server 和 Oracle,Sybase,DB2,SQLite,还有 Hy…...
6.SpringEL与List,Map
SpringEL与List,Map 文章目录 SpringEL与List,Map介绍Spring EL以注解的形式Spring EL以XML的形式 介绍 使用SpEL与 Map 和 List 的工作方式与Java是完全一样的 //get map whete key MapA Value("#{testBean.map[MapA]}") private String mapA;//get first value …...
【Oracle】使用 SQL Developer 连接 Oracle 数据库
文章目录 前言一、准备工作1、安装 SQL Developer2、安装 Oracle 数据库 二、连接 Oracle 数据库1、打开 SQL Developer2、连接数据库3、访问数据库 三、SQL 开发功能1、SQL Worksheet2、对象浏览器3、数据库管理 四、总结 前言 SQL Developer 是 Oracle 官方推出的一款免费的…...
PostgreSQL 事务并发锁
文章目录 PostgreSQL 事务大家都知道的 ACID事务的基本使用保存点 PostgreSQL 并发并发问题MVCC PostgreSQL 锁机制表锁行锁 总结 PostgreSQL 事务 大家都知道的 ACID 在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系…...
CANoe-Model Editor无法修改ARXML文件的问题、E2E在SOME/IP通信中的使用问题
1、Model Editor无法修改ARXML文件的问题 在CANoe 15软件版本中,Communication Setup导入arxml文件后,可以在model editor中打开arxml并修改配置。关闭model editor后再打开,可以看到修改的配置被保存了。 但是,当我把arxml文件从Communication Setup中移除后,再导入。此…...
Conan安装第三方依赖库时SSL验证失败解决办法
背景 c跨平台项目使用conan进行三方库依赖管理是比较通用的方案,更换开发环境后突然发现conan无法安装三方库了,报错如下: zlib/1.2.12: Not found in local cache, looking in remotes... zlib/1.2.12: Trying with conan-center... ERROR…...
贵州一帆建设工程有限公司网站/软文写作的三个要素
函数 为何要用函数? 如果不使用函数,写程序时将会遇到这三个问题: 1.程序冗长 2.程序的扩展性差 3.程序的可读性差 如何使用函数 先定义函数,后调用。 定义函数:def 函数名(param1、param2):""&q…...
网站建设有哪些基本流程/百度平台我的订单
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。 常规的用法大家都知道,现在来讨论它的一些高级的用法。 1、CommaText 2、Delimiter &DelimitedText 3、Names &Values &ValueFromIn…...
哈尔滨 网站开发/网络营销推广流程
上一篇介绍了springboot简单整合mybatis的教程。这一篇是介绍springboot简单整合jpa的教程。 由于jpa的功能强大,后续会继续写关于jpa的介绍已经使用,本文只是简单介绍一下它与springboot的整合。 jpa不需要像mybatis一样创建表,首先给大家看…...
宜宾网站建设网站/网站优化排名操作
关于形而上学与形而下学之区别及关系《易.系辞》说:“形而上者谓之道;形而下者谓之器”。对此,朱子解释为:“形而上者,无形无影是此理。形而下者,有情有状是此器”。而冯友兰解释是:“我们所谓形…...
北京公司注册地址多少钱一年/王通seo赚钱培训
解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题参考文章: (1)解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题 (2)https://www.cnblogs.com/Bo…...
雪锐琴网站建设/东莞网站建设方案外包
外部样式表调用:页面内嵌法:就是将样式表直接写在页面代码的head区。 如: <style type”text/css”><!– body { background : white ; color : black ; } –> </style> 外部调用法:将样式表写在一个独立的.cs…...