首页 > 其他分享 >开发与部署项目依赖管理之旅:Docker和venv区别

开发与部署项目依赖管理之旅:Docker和venv区别

时间:2024-10-12 22:21:56浏览次数:9  
标签:venv 隔离 之旅 Python 环境 依赖 Docker

Docker与venv的区别

Docker和虚拟环境(venv)都是用于管理依赖关系和隔离环境的工具,但它们服务的目的和特点有所不同。下面是它们的详细比较。

虚拟环境(venv)

目的

  • 特定于Python:venv专为Python项目设计,用于管理依赖关系并创建隔离环境。
  • 依赖管理:用于在项目中管理Python包的安装,不影响全局Python安装或其他项目。

主要特点

  • 隔离性:创建一个拥有独立Python解释器和已安装包的环境。
  • 轻量:与Docker相比,venv相对轻量,因为它不涉及容器化。
  • 简单性:易于设置和使用,可以通过命令python -m venv myenv创建环境,通过source myenv/bin/activate激活。
  • 无操作系统层:不提供独立的操作系统层,只隔离Python依赖。

使用场景

  • 本地开发。
  • 测试Python应用程序。
  • 管理项目特定的依赖关系。

示例

python -m venv myenv
source myenv/bin/activate
pip install requests

Docker

目的

  • 应用打包:Docker用于将应用程序及其依赖项打包成容器,使其在不同环境中可移植。
  • 环境隔离:提供完整的应用环境隔离,包括操作系统、库和依赖项。

主要特点

  • 可移植性:容器可以在任何安装了Docker的机器上运行,确保在不同环境中行为一致。
  • 隔离性:相较于venv,提供更高层次的隔离,包含整个操作系统层。
  • 资源效率:与完整虚拟机相比,使用更少的资源,因为它共享主机系统的内核。
  • 版本管理:Docker镜像可以版本化,便于轻松回滚和部署应用程序的不同版本。

使用场景

  • 将应用程序部署到不同环境(开发、测试、生产)。
  • 确保在不同操作系统上具有一致的行为。
  • 微服务架构中需要在隔离环境中运行多个服务。

示例
创建一个Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

构建和运行容器:

docker build -t myapp .
docker run -it myapp

主要区别

方面venvDocker
目的管理Python依赖应用打包和部署
隔离级别仅Python环境完整的操作系统、库和依赖
可移植性限于Python环境在任何Docker启用的环境中均可运行
资源使用轻量中等(容器运行时开销)
使用场景本地开发、测试部署、生产、微服务
设置难易度简单(少量命令)更复杂(Dockerfile、构建、运行)

总结

  • venv:适合于在本地开发环境中管理Python依赖。它更简单且更轻量。
  • Docker:适合于将应用打包和部署到一致、隔离的环境中,跨不同操作系统和部署目标。它提供更高层次的隔离和可移植性。

这两种工具各有其优点,可以相辅相成。在许多项目中,开发者可能会使用venv进行本地开发,而使用Docker进行部署。

标签:venv,隔离,之旅,Python,环境,依赖,Docker
From: https://blog.csdn.net/2301_80892630/article/details/142826826

相关文章

  • 第105天:权限提升-Linux系统&Docker挂载&Rsync未授权&Sudo-CVE&Polkit-CVE
    演示案例Linux-Rsync未授权访问覆盖-本地Linux-Docker组用户挂载目录-本地Linux-Sudo(CVE-2021-3156)-本地Linux-Polkit(CVE-2021-4034)-本地Rsync(未授权访问)Rsync是linux下一款数据备份工具,默认开启873端口https://vulhub.org/#/environments/rsync/common/借助Linux默认......
  • 记一次docker overlay2目录空间占用过高问题
    背景最近需要频繁本地构建镜像以及调试POD,导致磁盘空间告警分析查看当前磁盘使用情况#df-h发现这个目录下占用了不少空间docker常见的造成磁盘告警的原因有,知道原因之后就可以开始清理工作了/var/lib/docker/containers#容器/var/lib/docker/volumes#数据卷......
  • 修改Docker镜像和容器的默认存储目录(迁移原有数据)
    docker根目录占用的磁盘空间太大,将其迁移到新的磁盘上,后续的镜像和容器存储空间将在新的磁盘上1、查看docker现有的存储目录dockerinfo在打印的信息中查看DockerRootDir,即为当前的根目录,默认是/var/lib/docker,如下图:2、查看docker的service位置systemctlstatusdocker.s......
  • Docker中Mysql容器内如何执行SQL文件?
    Docker中Mysql容器内如何执行SQL文件?查看当前运行的容器dockerps拷贝sql文件到mysql容器中sudodockercp/root/sqlfile/423d23129a6b:/home/temp将sqlfile文件夹下的init.sql数据库拷贝到【423d23129a6b容器】下的/home/temp/文件夹下。进入mysql容器内部dockerex......
  • docker入门(二)之容器命令及私有仓库的部署(本地和harbor)
    容器命令:1.启动容器接下来演示在docker下运行一个ubuntu系统,从中学习各容器命令。--name="容器新名字"为容器指定一个名称(不指定的话会随机分配一个名字)。-d:后台运行容器并返回容器ID,也就启动守护式容器(后台运行)-i:以交互模式运行容器,通常与-t同时使用-t:为......
  • centos7安装docker和docker-compose
    1.卸载已有Dockeryumremovedockerdocker-commondocker-selinuxdocker-engine 2.安装wget后面会用yuminstallwget 3.配置yum源注意,yum源文件在/etc/yum.repos.d,改源之前一定要备份原来的源cd/etc/yum.repos.dmkdirbackmv./*.repoback#下面配置的是阿......
  • ubuntu 安装 docker
    Ubuntu安装Docker1.更新系统首先,确保系统更新到最新状态:sudoaptupdatesudoaptupgrade2.安装依赖项Docker依赖于一些软件包,先安装这些依赖项:sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common3.添加Docker的GPG密钥为了确......
  • docker容器化.NET程序
    C#使用docker容器化程序创建dockerfile单项目应用:如果你的应用只有一个.csproj文件,建议将Dockerfile放在该.csproj文件所在目录,这样更加简单、清晰,且易于维护。多项目解决方案:如果你的项目有多个子项目,并且你希望构建整个解决方案或特定的子项目,建议将Dockerfile......
  • k8s和docker关系
    Docker首先诞生于2013年,它引入了现代容器化技术的概念,使得开发者能够将应用程序及其依赖项一起打包,以便在不同环境中实现一致性和可移植性。Docker的出现极大地简化了应用程序的部署和管理过程。随着Docker的普及,容器化应用程序的数量不断增加,人们开始需要一个有效的方法来管......
  • docker 存储管理
    docker存储管理docker持久化方案docker提供三种持久化存储方案:volumes:卷存储提供了名为volumes的机制,其本质是存储在宿主机的文件夹,但是能够通过docker命令管理,同时能够通过volumes的别名方便挂载bindmounts:绑定挂载tmpfs:仅存储在宿主机的内存中,而不会写入宿主机......