探索Docker:在本地开发与云端部署之间实现无缝切换

探索Docker:在本地开发与云端部署之间实现无缝切换

摘要: 在这个时代,我们都在寻找一种能够在本地和云端无缝切换的解决方案。我们的团队和一群【老六】一起,研究了如何使用Docker来实现这个目标。我们的研究成果将帮助IT开发人员更好地理解和利用Docker的强大功能。

正文:

在我们的日常工作中,我们经常需要在本地和云端之间切换。这是因为我们在本地开发应用,然后将其部署到云端。然而,这个过程并不总是那么顺利。我们的团队和一群【老六】一起,研究了如何使用Docker来解决这个问题。

我们发现,Docker的底层系统可以是任何Linux发行版,这取决于您选择的基础镜像。这意味着,无论您的容器内部运行的是Ubuntu操作系统,还是CentOS操作系统,都可以通过Docker实现无缝切换。

然而,我们在实践中发现,即使在Windows主机上,您也可以运行基于Ubuntu或CentOS的容器。这是因为Docker在Windows上使用Hyper-V创建一个Linux虚拟机来运行容器。这就是为什么Docker在Linux和Windows之间有一些差异,因为它们的内核不同。

在我们的研究中,我们还发现,在使用Docker时,需要注意apt-get源的问题。我们发现,在本地Windows系统中的Ubuntu-22.04里面,apt-get源配置文件是\wsl.localhost\Ubuntu-22.04\etc\apt\sources.list。然而,在阿里云服务器的CentOS系统中,是没有apt-get这源的,只有yum源。

为了解决这个问题,我们提出了一个解决方案。我们在容器中使用新的debian.sources文件来覆盖旧文件。新的/etc/apt/sources.list.d/debian.sources文件的内容如下:

Types: deb
URIs: http://mirrors.aliyun.com/debian
Suites: bookworm bookworm-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpgTypes: deb
URIs: http://mirrors.aliyun.com/debian-security
Suites: bookworm-security
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

您也可以通过在Dockerfile添加以下命令来让它实现该功能

RUN echo "deb http://mirrors.aliyun.com/debian bookworm main" > /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main" >> /etc/apt/sources.list

这样,无论我们在哪里使用Docker,都可以保证apt-get源的一致性。

主要问题:
【本地的windows中在docker的python容器中执行apt-get正常】
【云服务器centos中在docker的python容器中执行apt-get异常】

问题1:本地使用docker容器与使用阿里云服务器docker容器会有什么区别?
答:
本地Windows的docker容器环境是基于Ubuntu的底层系统,这意味着您的容器内部运行的是Ubuntu操作系统。
云服务器centos的docker容器是基于centos的底层系统,这意味着您的容器内部运行的是CentOS操作系统。
Docker容器的底层系统可以是任何Linux发行版,这取决于您选择的基础镜像。

尽管容器内部的操作系统可以不同,但它们都依赖于宿主机的内核。这就是为什么Docker在Linux和Windows之间有一些差异,因为它们的内核不同。
在Windows上,Docker使用Hyper-V创建一个Linux虚拟机来运行容器。
这就是为什么即使在Windows主机上,您也可以运行基于Ubuntu或CentOS的容器。
在Linux主机(如CentOS)上,Docker容器直接与主机内核交互,无需额外的虚拟化层。这就是为什么Docker在Linux上的性能通常优于Windows。

关于本地开发环境的说明:
1:我的本地环境,windows11,windows中安装docker都是需要安装wsl2的,所以本地的windows上也就是有Ubuntu这个系统了

windows中的ubuntu系统

2:查看本地windows系统中的Ubuntu-22.04里面的apt-get源配置文件

\\wsl.localhost\Ubuntu-22.04\etc\apt\sources.list

如下图图:sources.list文件是本地windows系统中的Ubuntu-22.04里面的apt-get源配置文件
在这里插入图片描述

Ubuntu上的apt-get源

那么容器中的【apt-get】命令有可能会是该源

关于云服务器的说明:
3:查看阿里云服务器中centos的源配置文件
使用的阿里云服务器,【centos系统】这个centos系统中是没有apt-get这源的,只有yum源
yum源文件记录在下面这个文件夹里面

/etc/yum.repos.d/

如下图:【yum.repos.d】文件中存放着yum源的配置

在这里插入图片描述

在centos系统中使用docker,是有部分底层核心使用centos系统中的东西的,但是很多docker镜像中的底层是使用debian类的,所在docker镜像解压出来的容器中执行apt-get命令时,需要查看容器中的apt-get源是什么
并且需要查看服务器中的网络是否能够访问链接这个源,是否能从该源中进行下载

3.1【查看云服务器中是否能过够链接ubuntu官网】
centos系统中测试是否能够连接apt-get源连接的测试,【使用ping命令来测试】

ping -c 5 archive.ubuntu.com

如下图:连接结果是能够连接的
在这里插入图片描述

3.2【启动容器,在容器中查看是否能够链接ubuntu官网】
在centos系统中启动 debian类的容器

docker run --rm --name pythons -v /home/luichun/luichuns/testfile:/home/testfile -it python:3.12.3-bookworm  bash

这里3.2中使用了一个挂载目录,【因为在第4步使用到了一个操作是宿主机复制文件到容器中】

因为容器中没有ping命令,但是又curl这个命令,所以使用curl命令代替ping命令来进行测试链接

curl -I http://archive.ubuntu.com

如下图:连接结果是能够连接的

在这里插入图片描述

3.3【查看容器中apt-get命令是否能用】
查看容器中apt-get命令是否能用

apt-get

如下图所示,云服务器中的centos系统中的docker容器里面apt-get的源只有单一的一个

在这里插入图片描述

3.4【执行apt-get更新命令,查看是否能链接更新】
执行apt-get更新命令

apt-get update

效果如下图:不能连接网络【不能更新,那么使用apt-get安装插件就会报错】

在这里插入图片描述

如何解决开发环境与部署环境的兼容性问题:

4:解决【apt-get更新的方法】
在容器中使用新的debian.sources文件来覆盖旧文件
新的【 /etc/apt/sources.list.d/debian.sources】文件的内容,覆盖后,就能正常执行【apt-get命令了】

Types: deb
URIs: http://mirrors.aliyun.com/debian
Suites: bookworm bookworm-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpgTypes: deb
URIs: http://mirrors.aliyun.com/debian-security
Suites: bookworm-security
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

复制挂载目录中的debian.sources文件到容器中的apt-get源配置中

cp /home/testfile/debian.sources /etc/apt/sources.list.d/debian.sources

如果你不想使用复制的方式来覆盖【apt-get】源的操作,可以在Dockerfile中添加该源的命令
Dockerfile中添加以下命令:

RUN echo "deb http://mirrors.aliyun.com/debian bookworm main" > /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main" >> /etc/apt/sources.list

更改之后,执行【apt-get update】更新命令
如下图:成功执行了【apt-get update】更新命令

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

错误、调试和测试

在程序运行过程中,总会遇到各种各样的错误。 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。 有的错误是用户输入造成的,比如让用户输入email地…

【k8s】kubernetes更新操作详解--kubectl apply(patch、replace)

1. 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment / StatefulSet 等控制器,但 OpenKruise 提供了更多的增强功能如:优雅原地升级、发布优先级/打散策略、多可用区workload抽象管理、…

C#知识|上位机子窗体嵌入主窗体方法(实例)

哈喽,你好啊,我是雷工! 上位机开发中,经常会需要将子窗体嵌入到主窗体, 本节练习C#中在主窗体的某个容器中打开子窗体的方法。 01 需求说明 本节练习将【账号管理】子窗体在主窗体的panelMain容器中打开。 账号管理子窗体如下: 主窗体的panelMain容器位置如图: 02 实现…

AI试卷怎么解答问题?分享4款AI答题助手

AI试卷怎么解答问题?在数字化与智能化的双重推动下,AI试卷解答问题正逐步成为教育领域的新宠。这一技术不仅为学生们提供了全新的学习途径,更让他们在面对试卷难题时,能够迅速找到解题思路,减少时间浪费。AI的精准解答…

主流短视频评论采集python爬虫(含一二级评论内容)

声明 仅用于学习交流,不用于其他用途 正文 随着主流短视频评论采集更新需要登录,由于不懈的努力,攻破这一难点,不需要登录采集作品所有评论信息 话不多说上代码看效果: 输入作品id: 这样就拿到评论信息了&#xff…

标题:轻松掌握Python列表拼接:方法、示例与最佳实践

在Python编程中,列表(List)是一种非常常用的数据结构,用于存储一系列有序的元素。在日常编程中,我们经常需要将两个或多个列表拼接起来形成一个更长的列表。本文将详细介绍如何在Python中实现列表的拼接,包…

深入理解 Spring 循环依赖之三级缓存(附源码分析)

前言: 学过 Spring 的都知道 Spring 利用三级缓存解决了循环依赖问题,那你知道什么是循环依赖?什么又是三级缓存?本篇将从源码层面分析 Spring 是怎么去利用三级缓存帮我们解决循环依赖问题。 深入理解 Spring IOC 底层实现机制…

element 表格滚动条滑动,表格错位

解决办法(主要是根据滚动条的宽度决定的,可自行调整) 1、.el-table__header-wrapper { width: 99.3% !important; } 2、.el-table__header-wrapper { padding-right: 10px!important; }

Git—常用命令

官方 Git - Book (git-scm.com) 常用命令 命令作用git config --global user.name 用户名设置用户作者git config --global user.email 邮箱设置用户邮箱 git init初始化本地仓库git status查看本地仓库状态 git add 文件名 添加到暂存区git commit -m "提交日志…

【气象常用】时间序列的线性拟合

效果图: 主要步骤: 1. 数据准备:下载Hadley Centre observations datasets的HadSST数据 可参考【气象常用】时间序列图-CSDN博客 2. 数据处理:计算线性拟合 3. 图像绘制:绘制折线及拟合线,并添加文本 …

数据分析案例-印度美食数据可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

硕博电子 叉车电控 叉车控制器 叉车显示屏

硕博电子叉车电控系统以高效能、多功能和广泛的适应性为核心优势,它的设计与应用优化改变了传统的人工搬运模式,顺应了物流仓储行业对于节能、智能操控的迫切需求。该系统不仅大幅提升了叉车能源利用率,还改善了工作环境,减轻了工…