常用工具之docker

官方文档

什么是docker

Docker提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许您在给定的主机上同时运行多个容器。容器是轻量级的,包含运行应用程序所需的一切,因此您不需要依赖于主机上安装的内容。您可以在工作时共享容器,并确保与您共享的每个人都获得以相同方式工作的相同容器。
Docker提供工具和平台来管理容器的生命周期:
1、使用容器开发应用程序及其支持组件。
2、容器成为分发和测试应用程序的单元。
3、准备好后,将应用程序部署到生产环境中,作为容器或编排好的服务。无论您的生产环境是本地数据中心、云提供商还是两者的混合,这都是一样的。

隔离和安全的实现

Docker的隔离机制是借助Linux 内核技术Namespace实现的,凭借着Linux Namespaces机制提供的一种资源隔离方案。PID,IPC,Network等系统资源不再仅仅作为全局性的,而是可以属于某个特定的Namespace(可以对应用户权限理解)。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的Linux系统。

基于此,docker实现了一系列的分离:
The pid namespace:管理 PID namespace (PID: Process ID)
The net namespace: 管理网络namespace(NET: Networking)
The ipc namespace: 管理进程间通信命名空间(IPC: InterProcess Communication)
The mnt namespace:管理文件系统挂载点命名空间(MNT: Mount).
The uts namespace: Unix 时间系统隔离(UTS: Unix Timesharing
System).。

docker缓存

缓存是我们使用docker的一大便利,适当的使用缓存,可以提升构建效率。docker的缓存,分为两部分:一个是由上到下的,一旦未发生修改,在build时不会更新,另一个是docker提供的multi-stage选项。

由上到下的缓存

这个的好处自然不言而喻,确保了文档更新,缺点也是因为这点,微笑的改动也会导致更新。

multi-stage的缓存设置

真正的缓存可控,理论上可以永久缓存,build变为可选项。
可以通过写法,实现选择性的资源更新,非常好用!(当然,没忘的话)

docker的优缺点

优点(谁在夸我!)

1、轻量级,完全可以实现容器内只存在携带需要的内容,克服了传统虚拟机体积庞大的缺点。
2、操作简单,端口映射、文件共享的配置上,都相对虚拟机更为便捷。

缺点

隔离不彻底,

本质上,还是与宿主机共享内核。尽管可在容器里通过 Mount Namespace 单独挂载其他不同版本的os文件,比如 CentOS 或者 Ubuntu,但这并不能改变共享宿主机内核的事实!
所以不可能在Windows宿主机运行Linux容器或在低版本Linux宿主机运行高版本Linux容器。
而拥有硬件虚拟化技术和独立Guest OS的虚拟机,比如Microsoft的云计算平台Azure,就是运行于Windows服务器集群,但可在其上面创建各种Linux虚拟机

Linux内核很多资源无法被Namespace

最典型的比如时间。
若你的容器中的程序使用settimeofday(2)系统调用修改时间,整个宿主机的时间都会被随之修改,这并不符合用户预期。
而相比于在虚拟机里可自己随便折腾,在容器里部署应用时,“什么能做,什么不能做”,用户都必须考虑(有兴趣的可见相关参考,感觉这篇写的还行)。

相关参考:https://cloud.tencent.com/developer/article/1790199

常用命令

docker ps
docker image
docker run
docker exec
docker build

配合compose的有
docker compose up/down //可选参数  -d,后台运行,--build 重新构建

dockerfile实例

FROM python:3.11.7-alpine AS build

# RUN apt update && apt install -y librdkafka-dev

# RUN pip install confluent_kafka
COPY ./requirements.txt ./requirements.txt
RUN pip install httpx
RUN pip install redis
RUN pip install psycopg2-binary==2.9.9
RUN pip install -r requirements.txt


FROM build AS deploy

WORKDIR /app

COPY . .



需要帮助欢迎留言🤔

  • 50
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值