1. 为什么使用
我们的业务需要使用公司内部的一个平台做报表展示,公司内部的一个平台支持的数据库都是正式环境或者IDC环境,这使得我们的业务逻辑也需要部署到正式环境或者IDC环境。自从自研资源上云后,鹅厂内部使用IDC资源时不再推荐使用方单独申请IDC资源,而是推荐使用容器服务进行资源的申请和使用。具体来说,就是我们需要把我们的业务先在测试环境上使用做成镜像,再把镜像上传到镜像仓库,再从容器服务中把我们的镜像给启动起来。因此,我们就有了使用的诉求。
2. 是什么
是一个开源平台,它允许用户快速构建、测试和部署应用程序。通过将软件及其依赖项打包到轻量级、可移植的容器中来实现这一目标。这些容器是独立的、可执行的软件包,它们包含了运行应用程序所需的所有内容,包括代码、运行时、库、环境变量和系统工具。
的一个重要特点是它可以屏蔽环境差异。这意味着,只要应用程序及其依赖项被打包到容器中,那么无论应用程序运行在哪个环境中,它的行为都是一致的。这消除了“在我的环境上可以运行”的问题,并实现了“build once, run ”的目标。
的另一个优势是快速部署。由于容器启动速度非常快,并且只要确保一个容器中的程序正确运行,就可以确信无论在生产环境部署多少个容器都能正确运行,因此非常适合用于快速部署应用程序。
的关键组件包括文件、映像和容器。文件是一个包含命令的脚本,用于组装映像并定义其中的内容。映像是一个只读的模板,用于创建容器。容器是从映像启动的运行实例。
被广泛使用,因为它简化了应用程序的部署过程,并为开发人员提供了可移植性、一致性和效率。的创新性在于它将程序的所有依赖项一起打包,从而简化了运行环境管理的繁琐步骤。
3. 怎么使用.的安装
在不同操作系统上,的安装命令不同,我们这次以系统为例来说明如何安装。下面的各个步骤都是来源于混元大语言模型的返回:
在系统上安装,你可以按照以下步骤操作:
1.更新软件包索引:
sudo apt-get
2.安装依赖项:
sudo apt-get apt–https ca- curl —
3.添加官方GPG密钥:
curl -fsSL | sudo gpg — -o /usr/share//–.gpg
4.设置稳定版本的存储库:
echo “deb [arch=$(dpkg –print-) -by=/usr/share//–.gpg] $( -cs) ” | sudo tee /etc/apt/.list.d/.list > /dev/null
5.更新软件包索引:
sudo apt-get
6.安装:
sudo apt-get -ce -ce-cli .io
7.验证是否已成功安装:
sudo —
按照混元大模型给出来的步骤执行安装,问题出现在了第4-6步。环境中的执行报错:
(most call last):
File “/usr/bin/”, line 25, in
: No named ”
这个错误解决了半天也没有搞定,最后通过绕道而搞定。按照道理,第四步的目的是指定当前系统的稳定版本,这里可以通过下面的命令替代:
=$(cat /etc/os- | grep “” | cut -d “=” -f 2)
把的值替换到第4步中的$( -cs),再执行第6步就能成功了。如果还是执行失败的话,可以新建个文件:/etc/apt/.list.d/.list,并且把第4步的前半部分,即:
deb [arch=amd64 -by=/usr/share//–.gpg]
写入到文件中,其中“”就是前面提到的。注意,这个命令要写对,一定要以deb开头,在前一定要有值。
3.2 生成镜像3.2.1 创建
生成镜像的第一步是创建一个。在我这里,参考着官方文档,使用混元平台生成了一个大致可用的,我跟混元的对话如下(当然第一次没把需求提的这么清楚,经过多轮对话我的要求优化为):
写一个,满足下面的要求:
0、创建一个镜像
1、在中安装
2、使用.txt安装依赖
3、把ehp、cess和三个文件夹拷贝到中
4、写一个start.sh,在脚本中分别使用来启动ehp、cess和三个文件夹中的main.py,每个脚本的执行记录都写到日志文件中,且每个程序保持在后台运行
5、使用start.sh作为的启动命令
混元的返回是:
# 0. 创建一个镜像
FROM :
# 设置工作目录
/app
# 1. 在中安装
RUN apt-get &&
apt-get -y -pip
# 2. 使用.txt安装依赖
COPY .txt .
RUN pip3 -r .txt
# 3. 把ehp、cess和三个文件夹拷贝到中
COPY ehp cess /app/
# 4. 写一个start.sh,在脚本中分别使用来启动ehp、cess和三个文件夹中的main.py,每个脚本的执行记录都写到日志文件中,且每个程序保持在后台运行
RUN echo ‘#!/bin/bash’ > start.sh &&
echo ‘ /app/ehp/main.py > /app/ehp.log 2>&1 &’ >> start.sh &&
echo ‘ /app/cess/main.py > /app/cess.log 2>&1 &’ >> start.sh &&
echo ‘ /app//main.py > /app/.log 2>&1 &’ >> start.sh &&
chmod +x start.sh
# 5. 使用start.sh作为的启动命令
CMD [“/app/start.sh”]
经过测试,这个他是可用的。从一个侧面也说明了大语言模型对我们工作效率的提升还是比较有效的。
3.2.2 镜像仓库
在正式创建镜像前,我们先来说下镜像仓库。
3.2.2.1 镜像仓库是什么
镜像仓库是一种存储、分发和检索软件镜像(即镜像)的集中化服务。以下是为什么需要使用镜像仓库的一些原因:
便捷性:镜像仓库允许用户在不构建本地镜像的情况下,快速获取并运行预构建的镜像。这样可以节省时间和资源,提高开发效率。
版本控制:镜像仓库可以帮助用户跟踪和回溯软件的版本历史,并且可以轻松地将软件回滚到以前的版本。这对于在生产环境中进行故障排查和修复问题时非常有用。
安全性:镜像仓库可以帮助用户集中管理和控制对镜像的访问权限。这可以防止未经授权的访问和潜在的恶意攻击。
协作:镜像仓库支持多人合作开发同一个项目。通过将镜像存储在仓库中,团队成员可以轻松地共享和同步软件镜像,从而提高团队协作效率。
可扩展性:镜像仓库可以轻松地支持大量用户和镜像。这对于大型组织和企业在全球范围内分发和部署软件镜像非常有用。
综上所述,镜像仓库可以帮助用户更快速、安全、便捷地管理和分发软件镜像,从而提高开发效率和团队协作水平。
3.2.2.2 常用的镜像仓库
常用的仓库包括以下几种:
1、 Hub:官方提供的公共仓库,包含了大量的官方和社区维护的镜像,用户可以通过 pul命令从 Hub获取镜像。
2、私有仓库:可以在本地或私有网络中搭建的私有仓库,用于存储和管理自定义的镜像。常见的私有仓库包括 、等。
3、第三方仓库:除了 Hub和私有仓库,还有一些第三方的仓库,提供了特定领域或特定用途的镜像。例如,Gogle Cloud 、AWS 等。
4、其他公共仓库:除了 Hub,还有一些其他的公共仓库,例如Quay.io、Azure 等,它们提供了各种不同的镜像和服务。
这些仓库为用户提供了方便、安全、高效的镜像存储和分发解决方案,帮助用户更好地管理和部署应用程序。
3.2.3使用创建镜像
在生成了之后,就是使用来生成镜像了。如果只是在本地测试,那么使用 build命令就可以了:
sudo build -t my-image .
如果我们想要把镜像存入到镜像仓库中,我们在创建镜像时,就需要使用把镜像的名字生成的“讲究”、漂亮一些。具体来说,如果我们想把镜像存入到镜像仓库中以备后续在容器服务中使用的话,我们为镜像起名字时要把我们后续需要使用的镜像仓库地址以、个人文件夹写入到镜像名字中。建议先创建一个个人的镜像来做测试。在创建好自己的仓库地址后,在build镜像时需要指定仓库的地址为镜像的名称,即:
sudo build -t /: .
其中,为仓库的tag。在创建好镜像后,可以通过下面的命令来查看镜像是否创建成功(结果就不贴了,是否成功一目了然):
sudo
3.3 启动镜像
在创建好镜像后,可以通过下面的命令来启动镜像:
sudo run -d -p 80:80 –name test- /
其中test-为镜像启动后的容器名称。在启动后,可以通过下面的命令来判断当前容器的运行情况:
sudo ps -a
返回的格式如下:
建议使用ps -a而不是ps,使用ps -a能够看到全量的包括历史上运行已经停止了的容器的情况。
3.3.1 容器运行状态
上面提到了使用ps -a命令能看到容器当前的运行情况,其中这一列说明了不同容器当前的运行状态。可能的值包括:Up、、、、和Dead。这些值的具体含义如下:
Up: 容器正在运行。
: 容器已退出,通常表示容器内的主进程已完成并正常退出。
: 容器已创建,但尚未启动。
: 容器正在重启。
: 容器正在被删除。
Dead: 容器已死亡,通常表示容器内的主进程已崩溃或被终止。
3.1.1.1 命令
上面的值可能会因为版本和操作系统的不同而有所不同。要获取更详细的信息,你可以使用 命令查看容器的详细信息。例如:
命令的返回值是个json文件,包含对象的所有属性和配置,一些常见的字段包括:“Id”、“Name”、“State”、“”、“”等值。这里就不展开说明,感兴趣的小伙伴们可以自己试试。
3.1.1.2 原因解析
继续说回中的状态,这个状态的不同值能反应容器退出的原因,当 ps命令的列显示为时,表示容器已经退出。后面的数字表示容器退出时的状态码。状态码0表示容器正常退出,而非0的状态码表示容器异常退出。
非0的状态码通常表示容器在执行过程中遇到了错误,以下是一些常见的非0状态码及其含义:
1:一般性未知错误
2:不适用的shell或者语法错误
126:命令不可执行
127:未找到命令
128:无效的退出参数
128+n:通过信号n终止的程序
130:通过Ctrl+C终止的程序
255:退出状态码超出有效范围
需要注意的是,这些状态码并不是唯一的,具体的状态码可能会因应用程序的不同而有所不同。
3.1.1.3 logs命令
在实际使用中,建议查看容器的日志以获取更多关于错误的详细信息。如果容器运行起来后就处于状态,我们除了可以通过命令来查看当前退出可能的原因外,我们也可以通过 logs命令来查看容器运行起来时的日志,具体的命令如下:
sudo logs
其中“”为。在实际应用中,我使用logs命令发现了我的进程异常退出的原因:
@VM-77-147-:~$ sudo logs
start.sh: line 7: ture: not found
脚本写错了,把true写成了ture(这是在混元返回的基础上自己写的少量代码之一,这也说明了人没那么靠谱?)。LOL。
另外,建议在启动脚本中,启动应用时,以nohup启动并将程序的运行日志重定向到文件中。如果脚本中只是启动一个守护进程,可以在启动脚本后面增加一个循环语句或者wait命令,让镜像能持续的运行。
3.4 进入容器
可以使用下面的命令进入到容器中:
sudo exec -it “ ID” /bin/sh
其中 ID为上面 ps命令返回的第一列。进入到容器后,可以像在本地的系统一样进行调试,可以通过启动脚本或者其他命令来查看我们想要执行的命令是否正确。
3.5 关闭容器
一般来说,在本地调试时,可以通过下面的命令来进行关闭容器:
sudo stop “ ID”
其中 ID为上面 ps命令返回的第一列。在使用stop命令后,可以再次调用ps -a命令查看当前的进程情况
3.6 推送镜像
在本地测试通过后,可以通过下面的命令将生成的镜像推送到镜像仓库中:
sudo push /:
这时在3.2.3中提到的-t的创建镜像时指定名称就起作用了,在这里指定好镜像的命令,进行推送。推送成功后,仓库中就能见到目录下的标签是的镜像了。
3.7 更新镜像
在测试的过程中遇到了一些环境问题(这里举例说明如何更新镜像,后来环境问题通过其他方式解决了),比如我们需要使用 3.12,而现在的官网上并未正式的支持.12,我们不能通过apt-的方式进行安装,并且使用下面的命令在执行时也失败了:
sudo add-apt- ppa:/ppa
ppa安装失败。花了一些功夫没有解决掉。这时候想到了一个可以绕道的办法,像在本地安装.12这样,下载.12的安装文件夹,把这个文件夹拷贝到镜像中,使用3.4中提到的方法进入到容器中,再进入到.12的路径下通过./,mak -j和make 的方式进行安装。安装成功后的结果:
这时退出容器,通过的方法把刚才的操作给存起来,我们从 –help能看到 的释义:
a new image from a ‘s
从这个能看出来,的作用是把现在容器中的变化给存储起来。具体的命令是:
sudo /:v2
其中“”是前面提到的“ ID”。提交成功后,再push到镜像仓库中。
3.8 删除容器
在3.3中提到了如何启动容器,在3.4中提到了如何进入到容器中。除了这两点外,我们还可以使用 ps -a命令查看当前的容器运行情况,在命令的返回结果中我们能看到容器的名字,如果我们想要删除某些容器,可以使用下面的命令来删除:
sudo rm
其中是容器的名字。
3.9 删除镜像
在前面3.2.3中我们看到可以使用 来查看当前的镜像的状态,如果我们有些镜像不用了,需要删除掉这些镜像,我们可以使用下面的命令来进行删除:
sudo rmi
其中是镜像的id。
4. 镜像部署
在把镜像上传到仓库后,就可以在自己的容器配置平台进行镜像部署了。由于大家的镜像部署环境和平台都不相同,大家可以参考自己的平台配置指引进行部署,这里就不给大家举例子了。
5. 拓展阅读
本篇文章只是以一个新手能快速的上手,构建自己的镜像并在容器服务上运行起来的一个操作手册,没有深入的介绍的运行原理,的高级用法,甚至对中常用的命令介绍的也不全。各位小伙伴们如果想更深入了解,可以考虑阅读更多相关技术文章。
说明:本文中的主体内容,包括第2节和第3节中的绝大部分内容都是通过和混元大语言模型交互得到的内容。也欢迎大家体验混元。
腾讯混元模型是由腾讯研发的一种大型预训练模型,旨在通过大规模数据和算力来提升模型的性能和泛化能力。该模型采用了先进的深度学习技术,具备自然语言处理、计算机视觉等多种能力,可以广泛应用于各种场景,如智能问答、内容生成、自动驾驶等,。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666