Docker入门
Docker
一、何为Docker
Docker是一个开源的应用容器引擎,基于GO语言并遵循从Apache2.0协议开源。
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后在发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用这可以之间使用这个镜像。运行中的这个镜像称为容器,容器启动是非常快速的。
二、Docker核心概念
docker镜像(Images):Docker镜像适用于创建Docker容器的模板。
docker容器(Container):容器时独立运行的一个或一组应用。
docker客户端(Client):客户端通过命令行或者其他工具使用Docker。
API(https://docs.docker.com/reference/api/docker_remote_api)与Docker的守护进程通信。
docker主机(Host):一个物理或者虚拟的机器用于执行Docker守护进程和容器。
docker仓库(Registry):Docker仓库用来保存镜像,可以理解为代码控制中心的代码仓库。DockerHub(https://hub.docker.com)提供了庞大的镜像集合供使用。
使用Dockers的步骤:
1)、安装Docker;
2)、去Docker仓库找到这个软件的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个容器;
4)、对容器的启动停止就是对软件的启动停止;
三、安装Docker
查看Contos版本
uname -r
$$
Docker要求Contos系统的内核版本高于3.1.0
$$
升级软件包及内核;(选做)
yum update
安装Docker
yum install docker
启动Docker
systemctl start docker --启动Docker备注: 此处启动可能会报错,解决方法参考文末常见问题
将Docker设为开机启动项
[root@localhost ~]# systemctl enable docker返回结果为: Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
四、常用操作
***Docker的仓库 (Docker Hub)
1、镜像操作
操作 | 命令 | 说明 |
检索 | docker search 关键字 eg:docker search redis | 我们经常去docker hub 上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag 是可选的,tag表示标签,多为软件的版本,默认是latest(最新的)。 |
列表 | docker images | 查看所有本机镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像 |
检索信息详情
INDEX | NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMA |
索引 | 镜像的名称,一般只需要看/后面的内容 | 说明 | 关注人数k | 是否是官方 | 是否自动配置 |
2、容器操作
操作 | 命令 | 说明 |
运行 | docker run -name container -name -d image-name eg:docker run name myredis -d redis | -naem:自定义容器名 -d:后台运行 image-name:指定镜像模板 |
列表 | docker ps (查看运行中 的容器) | 加上-a;可查看所有容器 |
启动 | docker start container-name/container-id | 启动容器 |
停止 | docker stop container-name/container-id | 停止当前你所运行的容器 |
删除 | docker rm container-id | 删除指定的容器 |
端口映射 | -p 3306:3306 eg:docker run -d -p 3306:3306 --name myreids docker.io/redis | -p:主机端口(映射到)容器内部的端口 |
容器日志 | docker logs container-name/container-id | |
更多命令 | https://docs.docker.com/engine/reference/commandline/docker/ | 集体操作以官网仓库操作步骤为主 |
docker ps 或者 docker ps -a 显示的内容:
CONTAINER ID #容器ID
IMAGE #镜像名称
COMMAND #执行的cmd
CREATED #创建了多久
STATUS #容器的status:Up(正在运行) or Exited(不在运行)
PORTS #端口映射情况,默认tcp
NAMES #容器别名
2、安装Tomcat
1、docker search tomcat; ----在Docker仓库检索Tomcat
2、docker pull tomcat; -----从Docekr公共仓库拉取Tomcat(默认版本:latest,最新版)3、docker images; ----查看本地镜像仓库
4、docker run -d --name MyTomcat_8888 -p 8888:8080 image-name/image-id ----配置端口映射,启动Tomcat容器(使用浏览器访问:ip+端口号访问,如遇'404',参考文末可能遇到的问题第三条)
3、安装MySQL(不要在正式环境中使用docker安装mysql)
1、docker search mysql; ----在Docker仓库检索mysql
2、docker pull mysql; -----从Docekr公共仓库拉取mysql(默认版本:latest,最新版)3、docker images; ----查看本地镜像仓库
4、docker run -d --name mysql-3308 -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 image-name/image-id ----启动mysql容器(连接数据库,我使用的是IDEA自带的:++正常情况是用不了的++,参考文末可能遇到的问题第三条)
需要使用到的命令:
查看安装的镜像: docker images
查看启动的容器: docker ps
查看所有容器: docker ps -a
查看容器日志: docker logs
容器id启动mysql(参考Docker仓库中MySQL参考文档): docker run --name mysql01 -e MYSQL_ROOT_PASSWORD= 123456 -d mysql
启动mysql并进行端口映射(可以外部访问): docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
可能遇到的问题:
1、启动Docker时报错
1、报错信息:Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.问题原因:因为使用命令: yum install docker下载时, 默认下载的是Docker的最新版本, 但是内核版本低的话可能不兼容新版本Docker, 所以有可能出现如上错误。解决方法:卸载Docker,更新Linux系统内核。具体操作:1、卸载Docker命令:yum remove docker-*2、更新Linux系统内核命令:yum update 3、重启命令:reboot**2、报错信息:Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist问题原因:CentOs Linux 8 从 2021.12.31 号后已经停止维护,所以之后更新镜像需要通过 vault.centos.org来获取更新。所以需要修改软件源mirrors 地址,具体操作如下:修复具体操作:# 进入yum.repos.d 目录下cd /etc/yum.repos.d/# 修改源链接sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*# 要将之前的mirror.centos.org 改成 vault.centos.orgsed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
2、Tomcat做了端口映射之后,访问时报'404'
网页反馈报错信息:HTTP Status 404 – 未找到Type Status Report消息 Not found描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。Apache Tomcat/9.0.34问题原因:Docker启动的Tomcat容器中的webapps文件夹下的#ROOT#,文件夹缺失导致的。(如果需要多个容器,每个都需要设置)解决方法:找到你本地的Tomcat中的webapps下的ROOT文件夹,再通过Xftp发送的Linux的某个路径下,然后通过命令将ROOT文件拷贝只需要的容器中。具体操作:1、找到你本地的Tomcat中的webapps下的ROOT文件夹;2、再通过Xftp发送的Linux的某个路径下;3、然后通过命令将ROOT文件拷贝只需要的容器中[root@localhost /]# docker cp /usr/local/myTomcat/apache-tomcat-9.0.35/webapps/ROOT 151176e3682e:/usr/local/tomcat/webapps/
3、MySQL启动之后,不能调用,用命令调用也提示找不到MySQL
网页反馈报错信息:[08001] Could not create connection to database server. Attempted
reconnect 3 times. Giving up.
java.net.ConnectException: Connection refused: connect.问题分析:```shell[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES (说明)a55f4a089865 mysql "docker-entrypoint..." 6 seconds ago Up 4 seconds 33060/tcp, 0.0.0.0:3308->3306/tcp mysql-3308 (MySQL是启动成功的,但是还不能使用)8f422d552e8d mysql "docker-entrypoint..." 17 hours ago Up 27 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-3306 (MySQL启动成功,并配置成功,可以使用的)151176e3682e 927899a31456 "catalina.sh run" 20 hours ago Up 14 minutes 0.0.0.0:8888->8080/tcp MyTomcat_test```需要将root用户添加到设置中解决方法:需要将root用户添加到设置中(如果需要多个容器,只需要设置一次)具体操作:#启动docker run --name mysql-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456! -d mysql#进入容器docker exec -it mysql bash#登录mysqlmysql -u root -pALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#添加(新的)远程登录用户 (这一步可以省略)CREATE USER 'bog'@'%' IDENTIFIED WITH mysql_native_password BY '123456';GRANT ALL PRIVILEGES ON *.* TO 'bog'@'%';#退出(需要退出两次,第一次退出应用,第二次退出容器)exit(或者快捷键:Ctrl+D)# 重新使用数据库客户端工具就可以连接到了。
方法仅供参考,具体解决方法根据情况而定情况
相关链接:
菜鸟教程|Docker教程: https://www.runoob.com/docker/docker-tutorial.htmlDocker 官网:https://www.docker.comDocker仓库 官网:https://hub.docker.comGithub Docker 源码:https://github.com/docker/docker-ce
相关文章:
Docker入门
Docker一、何为DockerDocker是一个开源的应用容器引擎,基于GO语言并遵循从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后在发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使…...

时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)
时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序) 目录 时间序列分析 | CNN-LSTM卷积长短期记忆神经网络时间序列预测(Matlab完整程序)预测结果模型输出基本介绍完整程序参考资料预测结果 模型输出 layers = 具有以下层的 151 Layer 数组:...

【蒸滴C】C语言结构体入门?看这一篇就够了
目录 一、结构体的定义 二、结构的声明 例子 三、 结构成员的类型 结构体变量的定义和初始化 1.声明类型的同时定义变量p1 2.直接定义结构体变量p2 3.初始化:定义变量的同时赋初值。 4.结构体变量的定义放在结构体的声明之后 5.结构体嵌套初始化 6.结构体…...

第十三届蓝桥杯
这里写目录标题一、刷题统计(ceil函数返回的是等值于某最小整数的浮点值,不强制转换回int就wa,没错就连和int整数相加都wa二、修剪灌木(主要应看清楚会调转方向三、统计子矩阵(前缀和滑动窗口⭐)四、[积木画…...
消息队列mq
应用场景: 1、解耦 2、削峰填谷 3、异步处理 4、消息通讯 工作模式: 一个消息只能被消费一次(订阅模式除外),消费者接受到消息会回调业务逻辑,消费逻辑写在回调函数里面。 1、简单模式:一个生产…...

[学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程
文章目录视频资料:一、Spark基础入门(环境搭建、入门概念)第二章:Spark环境搭建-Local2.1 课程服务器环境2.2 Local模式基本原理2.3 安装包下载2.4 Spark Local模式部署第三章:Spark环境搭建-StandAlone3.1 StandAlone…...
git push和 git pull的使用
git push与git pull是一对推送/拉取分支的git命令。git push 使用本地的对应分支来更新对应的远程分支。$ git push <远程主机名> <本地分支名>:<远程分支名>*注意: 命令中的本地分支是指将要被推送到远端的分支,而远程分支是指推送的目标分支&am…...

首发,pm3包,一个用于多组(3组)倾向评分匹配的R包
目前,本人写的第二个R包pm3包已经正式在CRAN上线,用于3组倾向评分匹配,只能3组不能多也不能少。 可以使用以下代码安装 install.packages("pm3")什么是倾向性评分匹配?倾向评分匹配(Propensity Score Match…...

基于Canal的数据同步
基于Canal的数据同步 一、 系统结构 该数据同步系统由Spring Boot和Canal共同组成。 Spring Boot 是一个流行的 Java Web 框架,而 Canal 则是阿里巴巴开源的 MySQL 数据库的数据变更监听框架。结合 Spring Boot 和 Canal,可以实现 MySQL 数据库的实时数…...

vuetify设置页面默认主题色
前言 最近工作中接到一个任务: 项目中分light和dark两种主题色a、b页面默认为dark其他页面默认为light 项目前端环境: vue2jsyarnvuexvuetifyelement ui 解决思路 routerjs中配置路径时进行默认主题设置 在左侧aside点击菜单时,进行主题切…...
【Python入门第二十三天】Python 继承
Python 继承 继承允许我们定义继承另一个类的所有方法和属性的类。 父类是继承的类,也称为基类。 子类是从另一个类继承的类,也称为派生类。 创建父类 任何类都可以是父类,因此语法与创建任何其他类相同: 实例 创建一个名为…...
C#中,读取一个或多个文件内容的方法
读取一个或多个文件内容的方法 在C#中,可以使用File.ReadAllLines方法一次读取多个文件中的所有行内容。例如,以下代码读取了两个文件中的所有行内容,然后将它们合并在一起: string[] file1Lines File.ReadAllLines("file1…...

1 基于神经辐射场(neural Radiance Fileds, Nerf)的三维重建- 简介
Nerf简介 Nerf(neural Radiance Fileds) 为2020年ICCV上提出的一个基于隐式表达的三维重建方法,使用2D的 Posed Imageds 来生成(表达)复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域,也…...

水果FLStudio21.0.0中文版全能数字音乐工作站DAW
FL Studio 21.0.0官方中文版重磅发布纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换!Mac版新增对苹果M2/1家族芯片原生支持。编曲、剪辑、录音、混音,20余年的技术积淀和实力研发,FL Studio 已经从电音…...

【GlobalMapper精品教程】055:GM坐标转换器的巧妙使用
GM软件提供了一个简单实用的坐标转换工具,可以实现地理坐标和投影坐标之间的高斯正反算及多种转换计算。 文章目录 一、坐标转换器认识二、坐标转换案例1. 地理坐标←→地理坐标2. 地理坐标←→投影坐标三、在输出坐标上创建新的点四、其他转换工具的使用一、坐标转换器认识 …...
C语言之中rand()函数是如何实现的
rand()函数是一个C标准库中的随机数生成函数,用于生成一个范围在0到RAND_MAX之间的伪随机数。RAND_MAX是一个常量,它是随机数的最大值,通常被定义为32767。 rand()函数的实现原理可以概括为以下几个步骤: 初始化随机数生成器 在…...

winform控件PropertyGrid的应用(使运行中的程序能像vistual studio那样设置控件属性)
上周在看别人写的上位机demo代码时,发现创建的项目模板是"Windows 窗体控件库"(如下图) 生成的项目结构像自定义控件库,没有程序入口方法Main,但却很神奇能调试,最后发现原来Vistual Studio启动了一个外挂程序UserContr…...

SBUS的协议详解
SBUS 1.串口配置: 100k波特率, 8位数据位(在stm32中要选择9位), 偶校验(EVEN), 2位停止位, 无控流,25个字节, 2.协议格式: [startbyte] [data1][data2]……...

【PyTorch】教程:torch.nn.Hardshrink
torch.nn.Hardshrink CLASS torch.nn.Hardshrink(lambd0.5) 参数 lambd ([float]) – the λ\lambdaλ 默认为 0.5 定义 HardShrink(x){x,if x>λx,if x<−λ0,otherwise \text{HardShrink}(x) \begin{cases} x, & \text{ if } x > \lambda \\ x, & \text{…...

JavaScript 函数参数
JavaScript 函数对参数的值(arguments)没有进行任何的检查。JavaScript 函数参数与大多数其他语言的函数参数的区别在于:它不会关注有多少个参数被传递,不关注传递的参数的数据类型。函数显式参数与隐藏参数(arguments)在先前的教程中,我们已…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...