当前位置: 首页 > news >正文

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 容器卷


http://www.mrgr.cn/news/48060.html

相关文章:

  • cesium入门学习一
  • 数据结构经典算法总复习(下卷)
  • WPF TextBox 输入限制 详解
  • CentOS安装PostgreSQL
  • 代码随想录D28 贪心算法02 Python
  • 论文阅读:Deep Fusion Clustering Network With Reliable Structure Preservation
  • 【前端碎片记录】大文件分片上传
  • 【selenium】webdriver测试脚本
  • 常用的web服务器简述
  • ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。
  • go开发环境设置-安装与交叉编译
  • 【C++进阶】关联式容器map的使用
  • Ubuntu安装Apache教程
  • 排队论:根据λ(到达率)和 μ(服务率)的用户等待时间公式
  • 打开传奇提示connection closed是什么意思?怎么解决?
  • 动态爬虫管理平台构建与实现(论文+源码)_kaic
  • 小米开放式耳机好不好用?小米、南卡、倍思、飞利浦热门开放式耳机一周测评!
  • 工业4G路由R10提升物流仓储效率
  • 【系统架构设计师】案例专题六(8大系统架构设计之1): 信息系统架构设计考点梳理
  • TikTok代理IP哪里找?
  • 数据结构:快排
  • C语言基础语法——类型转换
  • 【文心智能体 | AI大师工坊】通过知识库优化智能体『万圣节之纸人还魂』:探索恐怖剧本杀的奇幻之旅
  • MySQL基本语法、高级语法知识总结以及常用语法案例
  • TON(二)编译中涉及的更多细节
  • 1234555