【后端】Docker一本通

news2025/3/3 13:01:47

长期更新补充,建议关注收藏点赞


目录

  • Docker概述
  • 安装部署Docker
  • 基本操作
  • 使用docker部署tomcat
  • 使用docker部署mysql

Docker概述

  • docker是⼀个应⽤级隔离的虚拟化技术
  • docker三大核心概念
    镜像:是具有源的所有特征的⼀个标记⽂件
    仓库:存放镜像⽂件的⽬录
    容器:docker驱动根据镜像⽂件恢复出来⼀个具体环境
  • docker与虚拟机区别
  1. 安装虚拟机软件如:VMware,在此虚拟机软件上安装操作系统(下载),把操作系统的虚拟机文件备份,随时复制并启动该操作系统。
  2. 在Linux上安装Docker软件,从镜像仓库拉取(Pull)操作系统或应用环境,基于该镜像文件创建一个容器(运行环境),备份容器以供下次使用(直接export容器,将容器提交(Commit)为本地镜像)。
  3. 虚拟机环境直接完全模拟一套全新的硬件环境,Docker环境不虚拟硬件,直接使用宿主机资源(Docker默认下不限制CPU,内存资源),也可以直接指定分配某个容器的CPU或内存资源。
  4. 虚拟机可以直接与宿主机或局域网连接,分配IP地址(Brige桥接方式,NAT方式),Docker容器无法获取IP地址(跟随于宿主机的IP地址)。
  5. 镜像相当于是容器的模板,通过镜像创建容器,容器修改后也可提交为镜像,删除容器并不会删除镜像,删除镜像则无法创建容器。
  • 容器使用注意事项:
  1. 尽量让一个容器做一件事情,或启动一个服务。
  2. 尽量使用挂载的方式将数据文件挂载到容器中,容器里面尽量不要保存数据。
  3. 尽量让容器按照Docker化的要求来使用容器,而不是安装一个虚拟机。
  4. 尽量不使用交互模式来直接操作容器,而是在宿主机上执行命令,或者使用Docker File。
  5. 只要能解决问题,高效地解决问题,无论怎么用,都行。

安装部署Docker

  • 安装docker
  1. 安装网络相关命令:yum install net-tools
  2. 安装实用工具:yum install -y yum-utils device-mapper-persistent-data lvm2
  3. 添加yum镜像:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 更新yum缓存:yum makecache fast
  5. 安装docker-ce:yum -y install docker-ce
  6. 启动docker服务:systemctl start docker, 对应的还有stop, restart等
  7. 查看docker信息:docker info
  8. 查找centos可用镜像:docker search centos
  9. 镜像仓库地址:https://hub.docker.com https://hub.daocloud.io
  10. 注意事项:建议在CentOS 7版本上安装Docker,确保有足够的硬盘空间,确保内存和CPU资源足够。
  11. 查看Docker服务,systemctl list-unit-files | grep docker, 如果显示disabled, 说明Docker服务不会随操作系统的启动而自动启动。systemctl enable docker docker随系统自启动
    12.Docker命令及参数使用大全:https://www.w3cschool.cn/docker/docker-command-manual.html

基本操作

  1. 搜索镜像:docker search hello-world
  2. 拉取镜像:docker pull hello-world,默认情况下,会拉取最新版本镜像(latest),如果需要拉取指定版本,则必须指定TAG标签。
  3. 创建运行容器:docker run hello-world == docker create+ docker start
  4. 查看镜像:docker images
  5. 创建容器:docker create hello-world:latest docker create --name hello-docker hello-world
    –name 自定义容器名
    -p : 映射端口号,宿主机端口:容器端口
    -d :将进程置于后台执行
    -it:前台运⾏交互模式
    -v :挂载外部⽬录, 语法: -v 主机⽬录:容器⽬录
    -e : 设置环境变量, 语法: -e 变量名=值
  6. 查看容器:docker ps 查看运行的容器, docker container ls -a 查看所有的容器
  7. 启停容器:docker start/stop/restart hello-world(容器名)
  8. 查看容器⽇志的命令: docker logs 容器名
  9. 删除容器:docker rm 容器名 (可通过container ls -a查看)
  10. 删除镜像:docker rmi hello-world
  11. 使用交互模式进入容器:docker exec -it tomcat-8.0 bash
    -i : 使用交互模式 -t:指定一个终端
    bash 解释命令所⽤的解释器
    推出容器:exit
  12. 在宿主机上直接操作容器:dcoker exec -t mysql-5.6 ip a
    这条命令是在 执行容器内的命令,并且是一次性运行的,不需要额外分步执行。
    它会直接在容器内运行 ip a 命令,并输出容器内的网络接口信息。没有必要手动进入容器后再执行 ip a,因为 docker exec 会自动为你在容器中执行该命令。
    如果你希望进入容器并交互式执行多个命令,你可以使用 docker exec -it mysql-5.6 bash 进入容器的终端,然后手动执行 ip a 或其他命令。
  13. 把容器导出到本地保存
    docker export -o test.tar 容器名
  14. 将本地的容器文件上传到docker服务作为镜像,存放在镜像仓库中
    docker import test.tar 镜像名:TAG
    :TAG 是 镜像的标签,用来指定该镜像的版本或标识符。
    TAG:是镜像的版本标签,通常用于标识镜像的不同版本。例如,latest、v1.0 或任何你自己设定的标签。如果没有指定 TAG,默认的标签是 latest。
  15. 在宿主机和容器之间拷⻉⽂件
    docker cp 宿主机的路径 容器名:容器中的⽬标路径
    如果要从容器⾥⾯拷⻉⽂件出来,交换路径的位置
    注意事项:容器的路径需要带上容器名
    拷⻉⽬录的时候,不需要加 -r这类的参数
  16. 直接将容器上传作为本地镜像文件
    docker commit 容器名 镜像名:TAG
    docker commit -p -a "作者名字" -m"描述" 容器编号 镜像名:版本号
    例如:docker commit -p -a “lency” -m"my_rabbit" e28f77161d0d my_rabbit:v1
    把容器提交为镜像,便于传递
    注意:执⾏命令前,停⽌相应的容器
  17. 导出镜像,将镜像文件保存到本地存储
    docker save -o test.tar 镜像名:TAG
  18. 导入镜像,将本地镜像文件上传到docker服务镜像中,镜像仓库中
    docker load --input test.tar

使用docker部署tomcat

  1. 先到国内镜像市场去搜索对应的tomcat镜像版本
  2. 拉取镜像:
    在这里插入图片描述
    docker pull 复制拉取的命令
  3. 查看拉取镜像
    docker images
    在这里插入图片描述
  4. 创建并启动容器
    docker run --name 容器名 -p 宿主机端口:容器端口 -d 镜像名:标签
    如:docker run --name tomcat-8.0 -p 8081:8080 -d 镜像名:tag
    –name :指定容器名
    -p : 映射端口号,宿主机端口:容器端口
    -d :将进程置于后台执行
    -it:前台运⾏交互模式
    -v :挂载外部⽬录, 语法: -v 主机⽬录:容器⽬录
    -e : 设置环境变量, 语法: -e 变量名=值
  5. 查看Tomcat容器是否启动
    输入:docker ps
    在这里插入图片描述
    -a :如果不加-a,只能看到运⾏成功容器,加了-a可以到所有的容器
  6. 在浏览器输入宿主机IP+映射端口,访问验证
    如果不能访问,则查看防火墙状态,关闭防火墙再次确认
    在这里插入图片描述
    打开浏览器,输入:宿主机IP:宿主机映射端口,按回车确认能否打开tomcat首页
    在这里插入图片描述

使用docker部署mysql

1.到镜像市场搜索mysql指定版本的镜像(5.6)

2.拉取镜像
使用:docker pull 镜像拉取文件
在这里插入图片描述

3.创建并启动容器
docker run --name 容器名 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=密码 -d 镜像名:标签
如:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d daocloud.io/mysql:tag
注:如果端口冲突,怎么解决?
查看端口是否冲突:netstat -tunlp[-anp]| grep 端口
在这里插入图片描述
解决办法:
1.kill -9 进程ID 杀死进程
2.主动关闭该服务 systemctl stop 服务名
3.在映射端口的时候避免跟该端口重复

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

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

相关文章

基于Spring Boot和Vue的餐饮管理系统设计与实现

大家好,今天要和大家聊的是一款基于Spring Boot和Vue的餐饮管理系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于Spring Boot和Vue的餐饮管理系统设计与实现的主要使用者分为管理员、员工和用户。没有授权的用户无…

如何快速的解除oracle dataguard

有些时候,我们为了使oracle dg的standby库另做他用,需要解除oracle dataguard数据同步。我本地因为standby库存储出现故障,导致dg存在问题,故需要解除。今天,我们通过使用部分命令,实现dg的快速解除。 1&a…

C语言【指针篇】(四)

前言:正文1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么?2.2 数组指针变量怎么初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 两段有趣的代码4.3.1 typedef关键字 5. 函数指针数组6. 转移表 总结 前言&am…

Python基于Django的网络课程在线学习平台【附源码】

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

vscode集成DeepSeek

vscode 扩展 安装 Cline Meet Cline,一个可以使用你的CLI和编辑器的AI助手。 得益于 Claude 3.5 Sonnet的代理编码功能,Cline 可以逐步处理复杂的软件开发任务。借助让他创建和编辑文件、探索大型项目、使用浏览器和执行终端命令(在您授予权限后)的工具&…

Linux操作系统5-进程信号3(信号产生总结与核心转储)

上篇文章:Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)-CSDN博客 本篇Gitee仓库:myLerningCode/l25 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点:核心…

家用可燃气体探测器——家庭燃气安全的坚实防线

随着社会的发展和变迁,天然气为我们的生活带来了诸多便利,无论是烹饪美食,还是温暖取暖,都离不开它的支持。然而,燃气安全隐患如影随形,一旦发生泄漏,可能引发爆炸、火灾等严重事故,…

【学习笔记】网络设备(华为交换机)基础知识 9 —— 堆叠配置

提示:学习华为交换机堆叠配置,含堆叠的概念、功能、角色、ID和优先级;堆叠的建立过程以及注意事项;包含堆叠的配置命令,以及堆叠的配置案例 一、前期准备 1.已经可以正常访问交换机的命令行接口 Console口本地访问教…

【Linux】Linux的进程控制

目录 1. 学习思维导图 2.进程创建(fork) 2.1 fork创建进程失败 3.进程终止 3.1 进程退出情况 3.1.1main函数 3.1.2 退出码 3.2 exit/_exit函数 1. exit() 函数 2. _exit() 函数 4.进程等待 4.1 实现进程等待的方法 wait/waitpid方法 区别&a…

电子电气架构 --- 汽车行业技术变革

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

【告别双日期面板!一招实现el-date-picker智能联动日期选择】

告别双日期面板!一招实现el-date-picker智能联动日期选择 1.需求背景2.DateTimePicker 现状图3.日期选择器实现代码4.日期选择器实现效果图5.日期时间选择器实现代码6.日期时间选择器实现效果图 1.需求背景 在用户使用时间查询时,我们经常需要按月份筛选…

利用 Python 爬虫进行跨境电商数据采集

1 引言2 代理IP的优势3 获取代理IP账号4 爬取实战案例---(某电商网站爬取)4.1 网站分析4.2 编写代码4.3 优化代码 5 总结 1 引言 在数字化时代,数据作为核心资源蕴含重要价值,网络爬虫成为企业洞察市场趋势、学术研究探索未知领域…

Pycharm中怎么加快下载三方包速度

Pycharm中怎么加快下载三方包速度 使用命令行下载,-i pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ 在Windows系统的PyCharm中使用Python 3.12环境时,可通过以下几种方式配置不同镜像源来加快下载包的速度。 方式一:在PyCharm界面中直接配置镜…

Unity中动态切换光照贴图的方法

关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)

本文将将扩展上一篇文章完成的 langgraph 链,继续使用基于 langgraph 链 ,对结构化数据库 SQlite 进行查询的方法。该系统建立以后,我们不需要掌握专业的 SQL 技能,可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…

从0开始的IMX6ULL学习篇——裸机篇之分析粗略IMX6ULL与架构

目录 简单的说一下Cortex-A7架构 讨论ARMv7a-cortex系列的运行模式 寄存器 后言 让我们到NXP的官网上扫一眼。 i.MX 6ULL应用处理器_Arm Cortex-A7单核,频率为900 MHz | NXP 半导体 我们先看CPU Platform,这个是我们的核心。 这里我们的芯片是基于Ar…

面向实时性的超轻量级动态感知视觉SLAM系统

一、重构后的技术架构设计(基于ROS1 ORB-SLAM2增强) #mermaid-svg-JEJte8kZd7qlnq3E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JEJte8kZd7qlnq3E .error-icon{fill:#552222;}#mermaid-svg-JEJte8kZd7qlnq3E .…

C#贪心算法

贪心算法:生活与代码中的 “最优选择大师” 在生活里,我们常常面临各种选择,都希望能做出最有利的决策。比如在超市大促销时,面对琳琅满目的商品,你总想用有限的预算买到价值最高的东西。贪心算法,就像是一…

SQL命令详解之数据的查询操作

目录 1 简介 2 基础查询 2.1 基础查询语法 2.2 基础查询练习 3 条件查询 3.1 条件查询语法 3.2 条件查询练习 4 排序查询 4.1 排序查询语法 4.2 排序查询练习 5 聚合函数 5.1 一般语法: 5.2 聚合函数练习 6 分组查询 6.1 分组查询语法 6.2 分组查询…

序列化选型:字节流抑或字符串

序列化既可以将对象转换为字节流,也可以转换为字符串,具体取决于使用的序列化方式和场景。 转换为字节流 常见工具及原理:在许多编程语言中,都有将对象序列化为字节流的机制。例如 Python 中的 pickle 模块、Java 中的对象序列化…