【部署运维】docker:入门到进阶

0 前言

部署运维博客系列一共有三篇:

拥抱开源,将工作中的经验分享出来,尽量避免新手踩坑。

【部署运维】docker:入门到进阶

【部署运维】kubernetes:容器集群管理掌握这些就够了

【部署运维】python+redis+celery+docker:实时异步访问的深度学习应用实战

 1 docker的原理和优势

1.1 docker的原理

招聘要求中的提到的容器化技术指的就是docker相关的东西。确切地说,容器是一种对进程进行隔离的运行环境;进程的隔离,主要是通过Namespace和Cgroup两大机制实现的。在生产环境中,容器基本都是运行在linux上的。

1.2 docker的优势

  • 更高效的利用系统资源

        docker对系统资源的利用率更高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机往往可以运行更多数量的应用。

  • 更快速的启动时间

        传统的虚拟机技术启动应用服务往往需要数分钟,而docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试,部署的时间。

  • 一致的运行环境

        开发过程中常见的一个问题是环境一致问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中发现。而docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码在我机器上没问题”这类问题。

  • 持续支付和部署

        对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。(定制应用镜像来实现集成、持续支付、部署。开发人员可以通过dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署)。而且使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

  • 更轻松的迁移

        由于docker确保了执行环境的一致性,使得应用的迁移更加的容易。docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

  • 更轻松的维护和拓展

        docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

2 docker是如何工作的

  • Docker客户端:Docker客户端是用户与Docker交互的工具,它可以通过命令行或图形界面来操作Docker。Docker客户端负责接收用户输入的命令,并将其发送给Docker守护进程。
  • Docker守护进程:Docker守护进程是Docker的核心组件,它运行在Docker主机上,负责创建、运行和分发容器。Docker守护进程与Docker客户端之间通过REST API进行通信。
  • Docker主机:Docker主机是运行Docker守护进程的物理或虚拟机器。Docker主机可以安装在Linux、Windows或Mac OS上。
  • Docker Registry是一个用于存储和分发Docker镜像的服务器端应用程序。它是一个开源项目,使用Apache许可证。您可以在GitHub上找到它的源代码。

3 docker命令实操

在实操之前需要明白镜像和容器的区别:

        镜像就是一系列文件和配置的组合,它是静态的,只读的,不可修改的。

        而容器是镜像的实例化,它是可操作的,是动态的,可修改的。

3.1 安装docker

先在本机安装docker客户端,一般都是生产环境,本文主要针对ubuntu系统进行阐述。

3.1.1 设置仓库
sudo apt update # 更新源
sudo apt install ca-certificates curl gnupg lsb-release # 安装依赖
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 将官方Docker存储库的GPG密钥添加到系统
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 设置稳定的仓库。
3.1.2 安装docker-ce和配套
sudo apt update # 上一步设置仓库后,要更新源
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin # 安装docker-ce和配套
如果程序需要gpu的话,则需要进一步安装Nvidia-Docker,即3.1.3 ,不需要可忽略。

安装Nvidia-Docker的先决条件:

  1. GNU/Linux x86_64 with kernel version > 3.10
  2. Docker >= 1.12
  3. NVIDIA GPU with Architecture > Fermi (2.1)
  4. NVIDIA drivers ~= 361.93 (untested on older versions)
3.1.3 安装nvidia-docker2(非必须)
sudo apt update # 更新源
sudo apt install -y nvidia-docker2 # 安装nvidia-docker
sudo systemctl restart docker # 重启docker
重启后测试一下,有版本信息说明安装成功
docker --version
3.1.3 docker换源
  • /etc/docker/daemon.json中写入下面镜像源(换源后仍可能会慢,有必要时可以科学上网)

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}
  • 执行命令使得添加镜像源生效,并重启docker

sudo systemctl daemon-reload && sudo systemctl restart docker

 3.2 使用docker命令

3.2.1 对镜像操作
  • docker search 镜像名(查询镜像)
  • docker pull 镜像名(拉取镜像)
  • docker run (运行镜像生成容器)
  • docker build -t 镜像名:标签 .(通过Dockerfile构建镜像)
  • docker push (发布镜像到镜像仓库)
3.2.2 对容器操作
  • docker start 容器id(启动容器)
  • docker restart 容器id (重启容器)
  • docker stop 容器id (停止容器)
  • docker ps(查看正在运行的容器)
  • docker commit (将操作过的容器,比如配置过环境,安装过一些依赖等,可以通过该条命令将容器打包为镜像,固化为静态文件,下次启动镜像生成容器时环境依旧存在)
  • docker cp 主机目录 容器目录(主机copy文件到容器目录)
  • docker rm 容器id(删除镜像)
3.2.3 重要的命令说明
  • docker run
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -P: 随机端口映射,容器内部端口随机映射到主机的端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

  • --volume , -v: 绑定一个卷

常用的参数通过一条执行命令指出

sudo docker run -it --gpus all -v /home/usr/project:/workspace -p 0.0.0.0:7865:8082 sd:v1 /bin/bash

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

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

相关文章

软件测试:超详细的Jmeter基础教程

JMeter 介绍: 一个非常优秀的开源的性能测试工具。 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来。 从性能工具的原理划分 Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分: &#xff…

python基础教程:动态参数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python的动态参数有两种,分别是*args和**kwargs, 这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别&#…

二分查找之红蓝二分查找

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

每日一题 1457. 二叉树中的伪回文路径(中等,DFS)

一句话,深度搜索所有路径,判断路径是否伪回文 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right clas…

AI 视频 | Stable Video Diffusion 来了!(附体验地址)

1. 介绍 11 月 21 日,Stability AI 推出了 Stable Video Diffusion,这是 Stability AI 的第一个基于图像模型 Stable Diffusion 的生成式视频基础模型。 目前 Stability AI 已经在 GitHub 上开源了 Stable Video Diffusion 的代码,在 Huggin…

基于springboot实现乒乓球预约管理系统项目【项目源码】

基于springboot实现乒乓球预约管理系统演示 系统的开发环境 浏览器:IE 8.1(推荐6.0以上) 开发使用语言:JAVA JDK版本:JDK_8 数据库管理系统软件:Mysql 运行平台:Windows 7 运行环境&#…

外贸分享|如何从外贸小白成长为大咖?这10件事值得你坚持做

外贸成功不是一朝一夕的事,而是需要有充分的准备和持续的努力。作为一位有着丰富经验的外贸人员,我总结了成功的秘诀,分享了一个优秀的外贸人应该做好的10项工作。 1 找不到客户怎么办? 有很多各种各样的原因值得思考&#xff1a…

机器学习-线性回归

线性模型是一类用于建模输入特征与输出之间线性关系的统计模型。这类模型的基本形式可以表示为: 其中: 是模型的输出(目标变量)。 是截距(常数项,表示在所有输入特征都为零时的输出值)。 是权重…

禁止指定电脑程序运行的2种方法

你可能要问了,为什么要禁止电脑程序运行呢,因为有的公司要净化公司的工作环境,防止某些刺头员工在公司电脑上瞎搞。也有部分家长,是为了防止自己家的孩子利用电脑乱下载东西。 今天就分享2种禁止指定电脑程序运行的方法&#xff1…

教你IDEA解决GIT冲突

前言 GIT基本上贯穿我们的开发生涯,之所以要使用git也是有很多优点的 🌹🌹🌹🌹🌹🌹🌹🌹 1.通俗易懂点,保存代码不丢失:防止因内存,操…

pulseaudio是如何测试出音频延迟的

通常专业的音频设备生产厂商都有专业的设备来测试精确的音频链路延时。 那么没有专业设备怎么测试出音频延迟呢?如下图,我们可以看到pulseaudio可以测试出硬件音频延迟。 那么,他是怎么测试出硬件延迟的呢?他的理论依据是什么呢?接下来我带大伙一起探索一下。 /*占位…

一篇文章让你入门python集合和字典

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、集合: 增加 add 删除 del 删除集合 discard(常用)删除集合中的元素 ,删除一个不存在的元素不会报错 remove 删除一个不存在的元素会报错 pop随…

Spine深入学习 —— 数据

atlas数据的处理 作用 图集,描述了spine使用的图片信息。 结构 page 页块 页块包含了页图像名称, 以及加载和渲染图像的相关信息。 page1.pngsize: 640, 480format: RGBA8888filter: Linear, Linearrepeat: nonepma: truename: 首行为该页中的图像名称. 图片位…

【点云surface】Poisson表面重建

1 介绍 Poisson表面重建算法是一种用于从点云数据生成平滑曲面模型的算法。它基于Michael Kazhdan等人在2006年发表的论文《Poisson surface reconstruction》。该算法通过将点云数据转换为体素表示,并利用Poisson方程来重建曲面。 该算法的基本原理是将点云数据转…

python教程:正常shell与反弹shell

嗨喽,大家好呀~这里是爱看美女的茜茜呐 正常shell需要先在攻击端开机情况下开启程序,然后攻击端运行程序,才能连接 反弹shell,攻击端是服务端,被攻击端是客户端 正常shell,攻击端是客户端,被攻击端是服务端 反弹shell,先启用服务端,再启用客户端 反弹shell的好处…

2022年09月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 运行下列程序后,结果为120的是? A: B: C: D: 答案:C 本题考察阶乘知识,12345的结果为120. <

【Python自学】七个超强学习网站,你值得拥有!

学习Python最主要的还是要动手&#xff0c;去找一些自己感兴趣的脚本&#xff0c;代码去练习&#xff0c;练的越多&#xff0c;对于一些英语单词&#xff0c;特殊符号要比死记硬背要容易记得些。 以下这些网站&#xff0c;虽说不上全方位的满足你的需求&#xff0c;但是大部分也…

基于springboot实现高校食堂移动预约点餐系统【项目源码】

基于springboot实现高校食堂移动预约点餐系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备…

城市NOA加速落地,景联文科技高质量数据标注助力感知系统升级

当前&#xff0c;自动驾驶技术的演进正在经历着从基础L2到L3过渡的重要阶段&#xff0c;其中NOA&#xff08;自动辅助导航驾驶&#xff09;扮演着至关重要的角色。城市NOA&#xff08;L2.9&#xff09;作为城市场景下的NOA&#xff0c;被看作是车企向更高阶自动驾驶迈进的必经之…

汽车业务增长乏力!又被法雷奥告上法庭,英伟达有点「难」

随着智能汽车进入「降本增效」的关键周期&#xff0c;对于上游产业链&#xff0c;尤其是芯片的影响也在持续发酵。 本周&#xff0c;英伟达发布截至2023年10月29日的第三季度财报数据&#xff0c;整体业务收入为181.2亿美元&#xff0c;比去年同期增长206%&#xff0c;比上一季…