没有项目描述

zenv-cli的Python项目详细描述


zenv:zen env

zenv是专门为开发人员创建的备用docker cli。 zenv的主要目标是简化在容器中运行控制台应用程序的过程,就像在本机(主机)应用程序中一样

Nativ commandCommand executed inside container
^{}->^{}

用法

> zenv init
Zenv created!

> # run `ls` command inside contaner
> ze ls

动机

作为开发人员,在本地设置项目时,我通常需要在系统上安装其他应用程序。当然,像poetry、pipenv、npm、cargo、ext这样的现代包管理器可以完美地解决大多数依赖于单个技术堆栈的问题。但它们不允许解决系统库的安装问题。如果有许多项目需要不同版本的系统库,则会出现问题

在生产中,这个问题长期以来都是通过容器保温来解决的,通常是Docker。因此,我的许多同事使用docker images和docker compose,不仅可以在生产环境中运行服务,还可以在本地计算机上开发和调试程序

不幸的是,这一过程中有几个问题:

  • 您熟悉的一些实用程序可能未预先安装在容器中
  • 如果在安装过程中尝试安装软件包,则会遇到缺少必要权限的情况
  • 忘记用print
  • 调试
  • 最主要的是失去了平常的体验,您无法使用自己喜爱的定制外壳

当然,上面描述的问题是通过创建一个docker映像来解决的,这个映像专门用于开发一个特定的项目,zenv只是帮助创建这样的容器非常简单

功能

  • 简化:与容器的所有交互都只需一个简短的命令:ze

  • zenv自动将当前目录转发到具有相同pwd的容器

  • zenv自动将当前用户id、组id转发到容器

    因此,在容器中创建的文件与在本机控制台中创建的文件具有相同的权限,您还可以使用sudo获取权限

    > sudo ze <command>
    

    > sudo !!
    
  • zenv可以按本机方式转发环境变量

    > MYVAR=LIVE!!!! ze env
    
  • 当然,您可以在unix管道中组合本机命令和容器化命令

    > ze ls | head -7 | ze tail -5
    
  • 性能影响最小

  • 自定义:您还可以使用zenvfile控制容器参数

安装

  1. 确保安装了最新版本的Docker
  2. 对于Linux,确保您有用户的rights are allowed与Doker进行交互
  3. 确保您的python版本为3.6或更高版本
  4. 执行:
    > sudo pip install zenv-cli
    # or
    > sudo pip3 install zenv-cli
    

工作原理

本质上,zenv是官方docker cli上的一个小型自动化层

初始值

命令zenv init在当前目录中创建Zenvfile。此文件描述与Docker映像和容器的关系,这些映像和容器将被创建以执行独立的命令。

默认情况下,使用的图像是ubuntu: latest。 但是您可以通过设置-i标志来更改它。例如:

> zenv init -i python:latest

或手动编辑Zenvfile

执行

命令zenv exec <COMMAND>或它在容器环境中拍摄别名ze <COMMAND>运行<COMMAND>。运行命令时:

  • zenv检查当前容器状态(运行、停止、删除),如果需要,则向上检查容器。
  • 容器使用命令sleep infinity运行。因此它将很容易接近
  • 运行命令的uid和gid被推入容器中。因此您可以使用sudo ze <COMMAND>
  • 执行该命令时,zenvfile所在路径中的目录将作为当前pwd转发到容器。因此,您可以运行ze从相对于zenvfile的深层目录
  • 环境变量也被抛出到conta中。作为一个本地人。
    > MYVAR=SUPER ze env
    

为了避免主机变量和容器变量之间的冲突,在创建zenvfile时,所有已安装的系统变量都会被置于黑名单中,从黑名单中可以删除编辑操作

其他命令

> zenv --help
Usage: zenv [OPTIONS] COMMAND [ARGS]...

  ZENV(Zen-env): Containers manager for developer environment

  Usage:

  > zenv init -i centos:latest & ze cat /etc/redhat-release

Options:
  --help  Show this message and exit.

Commands:
  exec      Call some command inside the container
  info      Show current container info
  init      Initialize Environment: create Zenvfile
  rm        Remove container (will stop the container, if need)
  stop      Stop container
  stop-all  Stop all zenv containers

示例安装jupyter笔记本

> mkgir norebooks
> cd notebooks
> zenv init -i python:3.7.3

编辑ZenVFile以分解笔记本端口后。更新ports = []ports = ["8888:8888"]

> sudo ze pip install jupyter numpy scipy matplotlib

运行笔记本

> sudo ze jupyter notebook --ip 0.0.0.0

使用url启动浏览器:http://localhost:8888

zenvfile

[docker]image="docker:dind"container_name="zenv-zenv-cli"[run]volumes=[ "`pwd`:`pwd`:rw",]ports=[]blacklist_environment=[ "TMPDIR", "__CF_USER_TEXT_ENCODING", "SHELL", "HOME"]autoremove=falsenetwork="bridge"command="sleep infinity"init_commands=["useradd -m -r -u `id -u` -g `id -gnr` `id -unr`",]init_user_commands=[][environment]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript从另一个web应用服务器端打开web应用   java客户端中的while循环有什么问题?   java哪个类在运行时实现接口的方法   java如何显示提醒或提醒用户用户名已存在   java如何在两个消费群体之间进行Kafka同步   java为什么在while循环完成后我会得到两个重复的输出?   java捕获控制台显示(输入和输出)   java WELD001409:类型T的不明确依赖项,带有限定符@Default   java更新文档树中的XML属性值   OAuthJava关于谷歌日历API v3   java Spring Data Couchbase示例无法解析存储库实例   java这个数组的代码有什么问题?   java根据JDBC计算Vertica表中的行数   eclipse中的java“一个或多个选定库已在生成路径上”错误   JavaSpringSecurity5.1.5和WebFlux用户禁用不工作   使用gradle eclipse插件指定JRE容器   java如何在gradle Springboot REST应用程序中将heroku连接到mongodb?   java我的计算器不乘或除数字   带有Jsoup的java iASE动态网站