Docker 入门篇

🏝️ 博主介绍

大家好,我是一个搬砖的农民工,很高兴认识大家 😊 ~
👨‍🎓 个人介绍本人是一名后端Java开发工程师,坐标北京 ~
🎉 感谢关注 📖 一起学习 📝 一起讨论 🌈 一起进步 ~
🙏 作者水平有限,欢迎各位大佬指正留言,相互学习进步 ~

目录

  • 🏝️ 博主介绍
  • 一、什么是Docker?🚀
    • 🌈 1、背景
    • 🌈 2、Docker三要素
    • 🌈 3、Docker四个组成部分
  • 二、Docker安装步骤 🚀
    • 🌈 1、VM虚拟机下载
    • 🌈 2、centrOS 8下载
    • 🌈 3、安装docker
    • 🌈 4、安装docker - compose
    • 🌈 5、配置阿里云镜像加速器
    • 🌈 6、docker run 执行顺序
    • 🌈 7、docker和虚拟机比较
  • 三、docker常用命令 🚀
  • 四、docker镜像分层 🚀
  • 五、本地镜像发布到阿里云仓库 🚀
  • 六、容器卷 🚀

一、什么是Docker?🚀

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

  • ⭐ docker官网:https://docs.docker.com/
  • ⭐ Docker Hub官网: https://hub.docker.com/

🌈 1、背景

在docker出现之前,是把java代码打包成jar文件后,上传到测试或者生产环境。但是由于测试或者生产跟本地的开发环境不一致(jdk版本、mysql版本、redis版本等)。就很容易出现在本地能跑起来的项目,一上传到测试就跑不起来了。docker的出现就是为了解决这一问题,使用docker后会将你的代码、运行环境、配置文件、第三方插件等全部打包成一个镜像文件。一次镜像,处处运行,docker仅能在linux上面安装。

🌈 2、Docker三要素

  • ⭐ 仓库

仓库是集中存放镜像的地方,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。世界最大的公开仓库是Docker Hub,国内有阿里云、网易云等。

  • ⭐ 镜像

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件

  • ⭐ 容器

只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

🌈 3、Docker四个组成部分

  • Docker Client客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • Docker Container容器

如下图,Client是客户端,向Docker Daemon守护进程发送一个run命令,守护进程先查询本地有没有该image镜像文件,如果没有就去远程仓库拉取到本地,然后再生成Container容器
在这里插入图片描述

二、Docker安装步骤 🚀

🌈 1、VM虚拟机下载

VMware17安装包
链接:https://pan.baidu.com/s/1Dq5-IG8GuhVwgw5y0bfQyA
提取码:7zb0

🌈 2、centrOS 8下载

链接:https://pan.baidu.com/s/1k3z41SyqAfPGrtp41Q7R7g
提取码:6b6t

centos8报错:
Failed to download metadata for repo 'AppStream'
Error: Failed to download metadata for repo 'AppStream'
解决方案参考:
https://blog.csdn.net/lxcw_sir/article/details/140185068
https://blog.csdn.net/weixin_61690271/article/details/142177236

🌈 3、安装docker

🍨 1、确定使用CentOS7及以上镜像版本

cat /etc/redhat-release

🍨 2、卸载旧版本

如果之前有安装过docker,需要先卸载旧版再安装

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

🍨 3、yum安装gcc

yum -y install gcc
yum -y install gcc-c++

🍨 4、安装stable镜像仓库

yum install -y yum-utils

// 这里使用阿里的,如果从国外的仓库安装会超时

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

🍨 5、更新yum软件包索引

// centos7 命令
yum makecache fast
// centos8 命令
yum makecache

🍨 6、安装docker ce

yum install docker-ce docker-ce-cli containerd.io

🍨 7、启动docker

systemctl start docker

🍨 8、测试

docker version

// 本地找不到镜像会去仓库拉取,然后生成容器实例

docker run hello-world

🍨 9、卸载 docker

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf/var/lib/containerd

🌈 4、安装docker - compose

在这里插入图片描述

// 安装(这里是v2.27.3版本,可根据docker版本进行修改)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// 赋权
sudo chmod +x /usr/local/bin/docker-compose
// 查看是否安装成功
docker-compose --version
// 如果查看报错,可以删除后重装合适版本
sudo rm /usr/local/bin/docker-compose

🌈 5、配置阿里云镜像加速器

🍨 1、找到‘弹性计算’下面的‘容器镜像服务’

在这里插入图片描述

🍨 2、创建个人版

在这里插入图片描述

🍨 3、点击‘镜像加速器’,选择CentOs找到加速器命令

在这里插入图片描述
🍨 4、执行如下命令配置成功

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  // "registry-mirrors": ["https://85mem738.mirror.aliyuncs.com"]
  "registry-mirrors": ["使用自己生成的加速器url"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

如果加了阿里云镜像加速器还是超时,报错如下:
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
可以尝试下面的方法: 参考:
https://blog.csdn.net/weixin_46028606/article/details/142663559
https://blog.csdn.net/Liiiiiiiiiii19/article/details/142438122

🌈 6、docker run 执行顺序

在这里插入图片描述

在这里插入图片描述

🌈 7、docker和虚拟机比较

1、虚拟机(Hypervisor)除了在宿主操作系统上运行外,还需要依赖于一个镜像(比如在MVware上面运行虚拟机需要选择一个Centos镜像,这个镜像包括了整个操作系统需要的配置,一般好几个G)。
而docker是直接依赖宿主操作系统。因此在cpu、内存利用率上docker有明显优势
2、新建一个docker实例的时候,不需要像虚拟机一样加载一个操作系统内核,一般虚拟机加载OS是分钟级的,而docker直接利用宿主机OS仅需要几秒钟就能生成一个docker实例

在这里插入图片描述

在这里插入图片描述

三、docker常用命令 🚀

⚡ docker常用命令请参考另外一篇博客:Docker常用命令

四、docker镜像分层 🚀

🍨 1、什么是UnionFS

UnionFS (联合文件系统) : Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。 Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像) ,可以制作各种具体的应用镜像。

🍨 2、docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFSbootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system) ,在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu, Centos等等。

Docker镜像层都是只读的,容器层是可写的·当容器启动时,一个新的可写层被加载到镜像的顶部这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的改动-无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
在这里插入图片描述

🍨 3、镜像分层原理
Docker镜像分层,支持通过扩展现有镜像,创建新的镜像。类似于Java继承于一个Base基础类,自己再按需扩展。
在这里插入图片描述

🍨 4、示例

先,创建一个ubuntu实例,并创建一个a.txt文件,用vim命令进入编辑时,提示这个命令不存在。
在这里插入图片描述
然后,执行如下命令,在ubuntu容器上面安装vim

#先更新我们的包管理工具
apt-get update
#然后安装我们需要的
vimapt-get install vim

然后,安装完成后执行vi a.txt,编辑如下后保存退出:wq!
在这里插入图片描述
然后,将容器生成一个新的镜像,该镜像包含该容器所有文件。
语法:docker commit -m="[提交描述]" -a="[作者]" [容器ID] [镜像名]:[版本号]

在这里插入图片描述
最后,在ubuntu上面安装了一个vim生成了一个新的ubuntu。就相当于扩展了基础镜像。

🍨 5、镜像分层优点

  • 资源共享
  • 方便复制迁移

五、本地镜像发布到阿里云仓库 🚀

1.创建命名空间
在这里插入图片描述
2.创建镜像仓库
在这里插入图片描述3.根据提示提送本地镜像到阿里云仓库

在这里插入图片描述

六、容器卷 🚀

Docker容器卷是将容器的文件系统路径映射到主机文件系统路径的一种方法。它允许在容器和主机之间共享数据,使得数据的持久化存储和备份变得更加容易。
Docker容器卷有以下几个作用:

  1. 数据持久化:容器卷将数据存储在主机文件系统中,即使容器被删除或重新创建,数据也可以保留。
  2. 数据共享:容器卷允许主机和容器之间共享数据,这使得容器之间的数据共享变得更加容易。
  3. 备份和恢复:使用容器卷可以将容器中的数据备份到主机中,也可以从备份中恢复容器中的数据。

语法:docker run -v <主机目录>:<容器目录> <镜像id>:<镜像版本>

要实现Docker容器卷,可以使用以下命令来创建一个卷:

docker volume create myvolume

这将创建一个名为myvolume的卷。可以通过将-v选项添加到docker run命令中来将卷挂载到容器中:

docker run -d -v myvolume:/path/to/mount myimage

这将从主机文件系统的myvolume路径挂载到容器中的/path/to/mount路径。现在容器和主机之间可以共享数据了。
另外,Docker还支持将主机文件系统的路径直接挂载到容器中。例如,要将主机文件系统的/path/on/host路径挂载到容器中的/path/to/mount路径:

docker run -d -v /path/on/host:/path/to/mount myimage

这将从主机文件系统的/path/on/host路径挂载到容器中的/path/to/mount路径。

需要对Docker容器卷有更深的理解,请参考: 深入理解 Docker 容器卷

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

05 django管理系统 - 部门管理 - 修改部门

04我们已经实现了新增部门的功能&#xff0c;下面开始修改部门模块的实现。 按道理来说&#xff0c;应该是做成弹框样式的&#xff0c;通过ajax悄咪咪的发数据&#xff0c;然后更新前端数据&#xff0c;但是考虑到实际情况&#xff0c;先用页面跳转的方式实现&#xff0c;后面…

106页PPT企业管控模式方案:战略、产业与职能管理体系核心规划

企业集团管控模式的设计方案是一个复杂而系统的过程&#xff0c;其核心规划涉及到战略、产业与职能管理体系。以下是对这三个方面的详细规划&#xff1a; 一、战略规划 明确集团战略目标&#xff1a;集团应根据市场环境和自身优势&#xff0c;明确战略发展方向和目标&#xf…

Tailwind Starter Kit 一款极简的前端快速启动模板

Tailwind Starter Kit 是基于TailwindCSS实现的一款开源的、使用简单的极简模板扩展。会用Tailwincss就可以快速入手使用。Tailwind Starter Kit 是免费开源的。它不会在原始的TailwindCSS框架中更改或添加任何CSS。它具有多个HTML元素&#xff0c;并附带了ReactJS、Vue和Angul…

JavaScript 网页设计案例:使用 Canvas 实现趣味打气球小游戏

JavaScript 网页设计案例&#xff1a;使用 Canvas 实现趣味打气球小游戏 在网页设计中&#xff0c;交互性和趣味性是吸引用户的重要因素。借助 JavaScript 和 HTML5 的 canvas 元素&#xff0c;我们可以轻松实现各种动画效果&#xff0c;今天将带你打造一个有趣的 打气球小游戏…

Metasploit渗透测试之攻击终端设备和绕过安全软件

概述 在之前&#xff0c;重点讨论了针对服务器端的利用。但在当下&#xff0c;最成功的攻击都是针对终端的&#xff1b;原因是&#xff0c;随着大部分安全预算和关注都转向面向互联网的服务器和服务&#xff0c;越来越难找到可利用的服务&#xff0c;或者至少是那些还没有被破…

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置

大规模多传感器滑坡检测数据集&#xff0c;利用landsat&#xff0c;哨兵2&#xff0c;planet&#xff0c;无人机图像等多种传感器采集数据共2w余副图像&#xff0c;mask准确标注滑坡位置 大规模多传感器滑坡检测数据集介绍 数据集概述 名称&#xff1a;大规模多传感器滑坡检测…

云计算第四阶段-----CLOUND二周目 04-06

cloud 04 今日目标&#xff1a; 一、Pod 生命周期 图解&#xff1a; [rootmaster ~]# vim web1.yaml --- kind: Pod apiVersion: v1 metadata:name: web1 spec:initContainers: # 定义初始化任务- name: task1 # 如果初始化任务失败&#…

计算机网络:数据链路层 —— 共享式以太网

文章目录 共享式以太网CSMA/CD 协议CSMA/CD 协议 的基本原理 共享式以太网的争用期共享式以太网的最小帧长共享式以太网的最大帧长共享式以太网的退避算法截断二进制指数退避算法 共享二进制以太网的信道利用率使用集线器的共享式以太网10BASE-T 共享式以太网 共享式以太网是当…

安宝特方案 | AR技术在轨交行业的应用优势

随着轨道交通行业不断向智能化和数字化转型&#xff0c;传统巡检方式的局限性日益凸显。而安宝特AR眼镜以其独特的佩戴方式和轻便设计&#xff0c;为轨道交通巡检领域注入了创新活力&#xff0c;提供了全新的解决方案。 01 多样化佩戴方法&#xff0c;完美适应户外环境 安宝特…

鸿蒙NEXT开发-知乎评论小案例(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

盘点超好用的 Windows 录屏软件,轻松记录屏幕精彩

在当今数字化信息高速流转的时代&#xff0c;屏幕录制已经成为我们日常工作、学习和娱乐中不可或缺的一项技能。如果你是微软电脑&#xff0c;正好我今天想要介绍的就是windows怎么录屏相关工具的操作&#xff0c;感兴趣就继续往下看吧。 1.FOXIT录屏大师 链接直达&#xff1…

鸿蒙开发实战项目【硅谷租房】--- 项目介绍

目录 一、简述 二、项目资料 2.1 UI设计稿 2.2 服务器 2.3 Apifox接口JSON文件 使用 Apifox 测试接口 一、简述 这是一个基于 鸿蒙 API12 开发的移动端租房 App&#xff0c;用户可以使用该应用搜索租房列表、查看房屋详情、预约租房等。 该项目的tabbar包含五部分&…

Ubuntu系统下的用户管理

Ubuntu系统下的用户管理 一、ubuntu介绍1.1 ubuntu简介1.2 主要特点 二、创建新用户2.1 查看当前Ubuntu版本2.2 创建新用户2.3 修改密码2.4 查看用户id 三、新建用户组3.1 新建用户组3.2 查询用户组3.3 加入某个用户组 四、赋予sudo权限4.1 将用户添加到 sudo 组4.2 查看admin用…

NFTScan | 10.07~10.13 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.10.07~ 2024.10.13 NFT Hot News ​01/ 数据&#xff1a;9 月份加密市场大多数指标均出现下降&#xff0c;链上总交易量下降 13% 10 月 7 日&#xff0c;据 The Block 研究总监 la…

【C#网络编程】基础概念2

文章目录 网络、数据包和协议网络数据包协议TCP、UDP 地址客户端和服务器套接字 网络、数据包和协议 计算机网络通过通信通道互连的机器组成&#xff0c;通常把这些机器称为主机和路由器&#xff0c;主机是是运行应用程序&#xff08;如 Web 浏览器&#xff09;的计算机。路由器…

同三维T80001HK4 四路4K30HDMI H.264编码器

4路同时编码&#xff0c;带4路3.5外置音频 同三维T80001HK4四路4K30HDMI H.264编码器 同三维T80001HK4用于高清视频信号&#xff08;4K30Hz&#xff09;编码及网络传输的硬件设备&#xff0c;采用最新高效H.264高清数字视频压缩技术&#xff0c;具备稳定可靠、高清晰度、低码率…

CyberRt实践之Hello Apollo(Apollo 9.0版本)

apollo9.0环境安装参考官方网站 apollo.baidu.com/community/Apollo-Homepage-Document?docBYFxAcGcC4HpYIbgPYBtXIHQCMEEsATAV0wGNkBbWA5UyRFdZWVBEAU0hFgoIH0adPgCY%2BADwCiAVnEAhAILiAnABZxEgOzK1Y%2BQA51M3ROUnJBsbK2WZoyUdkBhcXoAMhlwDFlARnUXZdzE9AGY%2BbFINADYpUhCEFW…

JavaEE 多线程第二节 (多线程的简单实现Thread/Runable)

1. 创建线程&#xff08;继承 Thread 类&#xff09;步骤&#xff1a; 继承 Thread 类&#xff1a; 创建一个类并继承 Thread 类&#xff0c;然后重写 run() 方法&#xff0c;在该方法中写入线程执行的代码 class MyThread extends Thread {Overridepublic void run()…

SpringBoot 之 配置 RestTemplate + 跳过https 验证

上截图 目录文件结构 在配置文件下创建下面两个文件 文件内容 HttpsClientHttpRequestFactory.java package org.fri.config;import org.apache.http.ssl.SSLContexts; import org.apache.http.ssl.TrustStrategy; import org.springframework.context.annotation.Configur…

重学SpringBoot3-安装Spring Boot CLI

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-安装Spring Boot CLI 1. 什么是 Spring Boot CLI&#xff1f;2. Spring Boot CLI 的安装2.1. 通过 SDKMAN! 安装2.2. 通过 Homebrew 安装&#xff08;适…