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

容器化部署服务全流程

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、什么是容器?
  • 二、如何安装docker
  • 三、如何写dockerfile
  • 四、如何启动服务
  • 五、常见命令总结
  • 总结


前言

这篇文章,‌主要目的是通过容器化技术简化应用程序的部署、运行和管理,提高开发、测试和生产环境的一致性,以及资源的优化利用


一、什么是容器?

‌Docker是一种开源的容器化技术,主要用于简化应用程序的开发、部署和运行过程。‌它通过提供一个轻量级的虚拟化环境,使得开发者可以打包、分发和运行应用程序及其依赖环境。Docker将应用程序及其所有依赖项打包成一个“容器”,这个容器可以在任何支持Docker的系统上运行,而无需担心环境配置等差异的影响的问题。

Docker的核心概念包括容器、镜像、Dockerfile和镜像仓库。容器是Docker的基本部署单元,它是一个轻量级的、独立的运行时环境,包含应用程序及其相关依赖。镜像用于创建容器的模板,包含了一个完整的文件系统,包括应用程序运行所需的所有文件、依赖和配置信息。Dockerfile是一种文本文件,用于定义Docker镜像的构建过程。镜像仓库则用于存储和分发Docker镜像。

Docker相比传统的虚拟机具有更高的效率和灵活性。它利用Linux内核的命名空间和控制组技术,实现了隔离性和资源管理,使得应用程序在不同的容器中运行不会相互影响。此外,Docker的轻量性和可移植性使得开发人员可以更轻松地创建一个可靠的开发环境,快速部署应用程序。

二、如何安装docker

已centos系统为例:

sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
sudo yum install -y yum-utils sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo yum makecache fast
sudo yum install docker-ce docker-ce-cli containerd.io  yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/docker-ce-cli-19.03.9-3.el7.x86_64.rpm创建开机启动,与服务自启动
systemctl enable docker
systemctl restart dockerdocker version
docker run hello-world

安装报错

如果上述安装过程中报错,如何解决

[添加链接描述](https://mirrors.aliyun.com/docker-ce/linux/centos/7.5/x86_64/edge/Packages/)yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/docker-ce-cli-19.03.9-3.el7.x86_64.rpmwget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install container-selinux -y 

下载centos7 镜像base镜像

下载docker
修改代理:https://hub.atomgit.com
[root@cluster-node-1 ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://hub.atomgit.com"]
}
重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
下载docker:centos 7.0镜像
docker pull centos:7
docker run -it centos:7 bash

三、如何写dockerfile

Dockerfile.runtime 如下(基于centos:7)实现

ARG Version=7FROM centos:${Version}
LABEL maintainer="davit <wangweifb@enn.cn>" project-url="enn vplatform" description="视频综合管理平台"# 备份现有的 YUM 源配置文件
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载新的 YUM 源配置文件
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理 YUM 缓存并更新
RUN yum clean all && yum makecacheRUN yum update -y
RUN yum install -y  \gcc \gcc-c++ \kernel-devel \kernel-headers \openssl \openssl-devel \git \wget \procps-ng \which \vim \sysvinit-tools \systemd \net-toolsWORKDIR /opt/
COPY APP.tar /opt
RUN tar xf APP.tarENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH TZ=Asia/Shanghai
WORKDIR /opt/APP
# 添加调试信息
RUN echo "Executing install mongo rpm package..."WORKDIR /opt/APP
COPY start.sh /opt/APP
RUN chmod +x start.sh
RUN echo "Executing build docker..."
CMD ["bash", "start.sh"]

start.sh 自启动脚本如下

#!/bin/bash
dstroot=/opt/APPcd $dstroot
checkAppStatusIsOk()
{
for module in service1 service2; dofor line in $(seq -w 2);domongodpid=`pidof $module`	if [[ -z $mongodpid ]];thenecho "please check the app status is OK $module!"bash start$module.sh &fisleep 1;        done
done
}
while true; docheckAppStatusIsOksleep 30 # 检查间隔0.5分钟
done

docker镜像生成与删除

根据dockerfile生成docker images
docker build -t vplatform -f Dockerfile.runtime .
如下name即-t后面跟着name,被定义为vplatform
如何删除镜像
docker rmi vplatform

在这里插入图片描述

四、如何启动服务

启动服务,即镜像名为vplatform,启动后容器命名为app-demo
docker run --name app-demo -d vplatform
启动后,查询容器是否正常
docker ps -a进入docker
docker exec -ti 4bb1e655d551 /bin/bash查看docker容器的运行日志
docker logs -f 4bb1e655d551停止docker镜像并删除
docker stop 4bb1e655d551
docker rm 4bb1e655d551

在这里插入图片描述

五、常见命令总结

docker ps -a
docker logs -f davit
docker start davit
docker stop davit
docker rm davit
docker images
docker image rm containerId 
docker version
docker run 
sudo docker attach containerId 
docker image rm 89dc951613c2
docker cp -rf davit:/opt/pipeline/sdk/ .启动docker命令
-i 交互式
-t 终端
-d 后台运行 结合command[/bin/bash]
--name 容器名称
--add-host db-static:86.75.30.9 添加host
-h 主机名hostname
-v 挂在主机目录到容器
-p 端口映射
--privileged=true 使容器拥有root权限(还不是很理解)
--netwok 是容器接入提前建立好的网络my-gridge-network中
daocloud.io/nginx 镜像地址:标签
/bin/bash command命令
--gpus 设备iddocker stop davit 
docker rm davit
docker exec -ti davit /bin/bash
docker run -p 19000:8000 -p 19001:8001 -p 19002:8002 --name davit -v /home/models:/models --gpus "device=6" -it trtis-dev:latest /opt/trtserver --log-verbose=2 --model-repository /models

总结

以上讲述了docker镜像常用方法,希望对你有所帮助。
授之以鱼不如授之以渔

相关文章:

容器化部署服务全流程

系列文章目录 文章目录 系列文章目录前言一、什么是容器&#xff1f;二、如何安装docker三、如何写dockerfile四、如何启动服务五、常见命令总结总结 前言 这篇文章&#xff0c;‌主要目的是通过容器化技术简化应用程序的部署、运行和管理&#xff0c;提高开发、测试和生产环境…...

Flutter DragTarget拖拽控件详解

文章目录 1. DragTarget 控件的构造函数主要参数&#xff1a; 2. DragTarget 的工作原理3. 常见用法示例 1&#xff1a;实现一个简单的拖拽目标解释&#xff1a;示例 2&#xff1a;与 Draggable 结合使用解释&#xff1a; 4. DragTarget 的回调详解5. 总结 DragTarget 是 Flutt…...

操作系统动态分区分配算法-首次适应算法c语言实现

目录 一、算法原理 二、算法特点 1.优先利用低址空闲分区&#xff1a; 2.查找开销&#xff1a; 3.内存碎片&#xff1a; 三、内存回收四种情况 1.回收区上面&#xff08;或后面&#xff09;的分区是空闲分区&#xff1a; 2.回收区下面&#xff08;或前面&#xff09;的…...

mybatis-plus自动填充时间的配置类实现

mybatis-plus自动填充时间的配置类实现 在实际操作过程中&#xff0c;我们并不希望创建时间、修改时间这些来手动进行&#xff0c;而是希望通过自动化来完成&#xff0c;而mybatis-plus则也提供了自动填充功能来实现这一操作&#xff0c;接下来&#xff0c;就来了解一下mybatis…...

Vite内网ip访问,两种配置方式和修改端口号教程

目录 问题 两种解决方式 结果 总结 preview.host preview.port 问题 使用vite运行项目的时候&#xff0c;控制台会只出现127.0.0.1&#xff08;localhost&#xff09;本地地址访问项目。不可以通过公司内网ip访问&#xff0c;其他团队成员无法访问&#xff0c;这是因为没…...

【星海随笔】删除ceph

cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献&#xff1a; https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…...

HarmonyOS NEXT实战:自定义封装多种样式导航栏组件

涉及知识点和装饰器 ComponentV2&#xff0c;Local&#xff0c; Builder&#xff0c;BuilderParam&#xff0c;Extend&#xff0c; Require &#xff0c;Param&#xff0c;Event等第三方库&#xff1a;ZRouter &#xff0c;如项目中本来就用了ZRouter路由库&#xff0c;案例中…...

大数据面试笔试宝典之Flink面试

1.Flink 是如何支持批流一体的? F link 通过一个底层引擎同时支持流处理和批处理. 在流处理引擎之上,F link 有以下机制: 1)检查点机制和状态机制:用于实现容错、有状态的处理; 2)水印机制:用于实现事件时钟; 3)窗口和触发器:用于限制计算范围,并定义呈现结果的…...

pytorch整体环境打包安装到另一台电脑上

步骤一&#xff1a;安装conda-pack 首先利用 pip list 指令检查conda环境安装在哪里&#xff0c;在系统环境&#xff08;base&#xff09;下&#xff0c;于是我是使用的conda指令完成的。 # 使用Conda安装&#xff08;如果已安装conda&#xff09; conda install conda-pack …...

PostgreSQL 数据库连接

title: PostgreSQL 数据库连接 date: 2024/12/29 updated: 2024/12/29 author: cmdragon excerpt: PostgreSQL是一款功能强大的开源关系数据库管理系统,在现代应用中广泛应用于数据存储和管理。连接到数据库是与PostgreSQL进行交互的第一步,这一过程涉及到多个方面,包括连…...

【算法】复杂性理论初步

六、算法复杂性初步 重要的复杂性类 P P P 的定义 多项式时间内可解的问题 若 L ∈ P L∈P L∈P&#xff0c;则存在确定性多项式时间的图灵机 M M M&#xff0c;使得 M ( x ) 1 ⟺ x ∈ L M(x)1⟺x∈L M(x)1⟺x∈L N P NP NP 的定义 多项式时间内可验证验证解的正确性 &…...

HarmonyOS NEXT应用开发实战:免费练手的网络API接口分享

学习一项技能&#xff0c;最好也最快的办法就是直接动手实战。在实战中不断的总结经验和收获成就感。这里分享些好用且免费的网络API练手接口&#xff0c;这对于想要提升自己网络开发能力的开发者来说&#xff0c;无疑是极大的福音。今天&#xff0c;我将详细介绍一个API接口集…...

C++的第一个程序

前言 在学习c之前&#xff0c;你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到&#xff0c;仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序&#xff0c;似乎有所变化 C的…...

Java 中 Stream 流的使用详解

Java 中 Stream 流的使用详解 什么是 Stream&#xff1f; Stream 是 Java 8 引入的一种全新的操作集合的方式。它支持通过声明性方式对集合进行复杂的数据操作&#xff08;如过滤、排序、聚合等&#xff09;&#xff0c;避免使用大量的 for 循环&#xff0c;提高代码的可读性…...

【UE5.3.2】生成vs工程并rider打开

Rider是跨平台的,UE也是,当前现在windows上测试首先安装ue5.3.2 会自动有右键的菜单: windows上,右键,生成vs工程 生成的结果 sln默认是vs打开的,我的是vs2022,可以open with 选择 rider :Rider 会弹出 RiderLink是什么插...

ssh免密码登陆配置

ssh 命令本身不支持直接在命令中带上密码&#xff0c;出于安全考虑&#xff0c;SSH 协议不允许将密码明文写在命令中。直接在命令行中输入密码是一种不推荐的做法&#xff0c;因为它会暴露密码&#xff0c;增加安全风险。 如果你希望实现自动化登录而不手动输入密码&#xff0…...

Hive之import和export使用详解

在hive-0.8.0后引入了import/export命令。 Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置&#xff0c;并且导出数据可以被移动到另一个hadoop集群或hive实例&#xff0c;并且可以通过import命令导入数据。 当导出一个分区表&#xff0c;原始数据可能在hdf…...

数据库锁的深入探讨

数据库锁&#xff08;Database Lock&#xff09;是多用户环境中用于保证数据一致性和隔离性的机制。随着数据库系统的发展&#xff0c;特别是在高并发的场景下&#xff0c;锁的机制变得尤为重要。通过使用锁&#xff0c;数据库能够防止并发操作导致的数据冲突或不一致。本文将深…...

【每日学点鸿蒙知识】沉浸式状态栏、类似ref 属性功能属性实现、自定义对话框背景透明、RichEditor粘贴回调、自动滚动列表

1、HarmonyOS 沉浸式状态栏&#xff1f; 实现沉浸式状态栏功能时&#xff0c;能够实现&#xff0c;但是目前每个自定义组件都需要padding top 状态栏的高度才行&#xff0c;有办法实现统一设置吗&#xff1f;不需要每个自定义组件中都padding top 状态栏的高度&#xff1f; 暂…...

Hive刷分区MSCK

一、MSCK刷分区 我们平时通常是通过alter table add partition方式增加Hive的分区的&#xff0c;但有时候会通过HDFS put/cp命令或flink、flum程序往表目录下拷贝分区目录&#xff0c;如果目录多&#xff0c;需要执行多条alter语句&#xff0c;非常麻烦。Hive提供了一个"…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...