热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker-clientforpython详解及简单示例

这篇文章主要介绍了Docker-clientforpython详解及简单示例的相关资料,需要的朋友可以参考下

Docker-client for python使用指南:

客户端初始化的三种方法

import docker
docker.api()
docker.APIClient()
docker.client()
docker.DockerClient() 其实也是docker.client()的一个子集
docker.from_env() 其实就是docker.client()的一个子集

一、初始化客户端

1.Docker客户端的初始化工作

>>> import docker
>>> client = docker.APIClient(base_url='unix://var/run/docker.sock',version='1.21',timeout=5)
>>> client.version()
{u'ApiVersion': u'1.21',
 u'Arch': u'amd64',
 u'BuildTime': u'2016-09-27T23:38:15.810178467+00:00',
 u'Experimental': True,
 u'GitCommit': u'45bed2c',
 u'GoVersion': u'go1.6.3',
 u'KernelVersion': u'4.4.22-moby',
 u'Os': u'linux',
 u'Version': u'1.12.2-rc1'}
  Args:
   base_url (str): 指定链接路径,可以通过socket或者tcp方式链接
     ``unix:///var/run/docker.sock`` or ``tcp://127.0.0.1:1234``.
   version (str): 指定API使用的版本(docker=2.0.0默认的api版本是1.24,最低支持1.21,docker1.9+的api是1.21),因此在使用python的docker模块时一定要注意docker的api以及docker模块的api是否兼容。当然如果设置为 ``auto`` 降回去自动检测server的版本
   timeout (int): 使用API调用的默认超时时间,默认单位为秒
   tls (bool or :py:class:`~docker.tls.TLSConfig`): Enable TLS. Pass
     ``True`` to enable it with default options, or pass a
     :py:class:`~docker.tls.TLSConfig` object to use custom
     configuration.

查看docker引擎当前版本:

$ sudo docker version
Client:
 Version:   1.9.1
 API version: 1.21
 Go version:  go1.4.3
 Git commit:  a34a1d5-dirty
 Built:    Tue Mar 28 15:39:19 UTC 2017
 OS/Arch:   linux/amd64

Server:
 Version:   1.9.1
 API version: 1.21
 Go version:  go1.4.3
 Git commit:  a34a1d5-dirty
 Built:    Tue Mar 28 15:39:19 UTC 2017
 OS/Arch:   linux/amd64

The sdk of docker for python--docker==2.0.0:

1.丢弃了python2.6的支持
2.最低支持API版本为1.12(Engine version 1.9.0+)
3.`docker.Client`被替换成`docker.APIClient`
4.`docker.from_env`初始化一个docker客户端实例代替了`APIClient `实例 
5.从`APIClient.start`中移除了HostConfig参数
6.开始由之前的docker-py模块变为docker
7.`docker.ssladapter`替换为`docker.transport.ssladapter`

2.Docker客户端的具体方法

import docker
C = docker.DockerClient(base_url='unix://var/run/docker.sock',version='auto',timeout=10)

##docker相关的方法使用
使用DockerClient对象,会有以下方法:
C.api,
C.containers,
C.events,
C.from_env,
C.images,
C.info,
C.login,
C.networks,
C.nodes,
C.ping,
C.services,
C.swarm,
C.version,
C.volumes,


#输出docker的相关信息,相当于docker info
C.info()

二、api方法使用示例

1. login方法定义

C.login()
login(*args, **kwargs) method of docker.client.DockerClient instance
  Authenticate with a registry. Similar to the ``docker login`` command.

  Args:
    username (str): The registry username
    password (str): The plaintext password
    email (str): The email for the registry account
    registry (str): URL to the registry. E.g.
      ``https://index.docker.io/v1/``
    reauth (bool): Whether refresh existing authentication on the
      Docker server.
    dockercfg_path (str): Use a custom path for the ``.dockercfg`` file
  (default ``$HOME/.dockercfg``)

  Returns:返回的错误日志信息
    (dict): The response from the login request

     Raises:
    :py:class:`docker.errors.APIError`
      If the server returns an error.

##使用login方法登录
C.login('xxbandy123','nslalla')

2.images 类定义:

build方法
get方法:
get(self, name)
  Gets an image.

  Args:
    name (str): The name of the image.

  Returns:
    (:py:class:`Image`): The image.

  Raises:
    :py:class:`docker.errors.ImageNotFound` If the image does not
    exist.
    :py:class:`docker.errors.APIError`
      If the server returns an error.
list方法:
  list(self, name=None, all=False, filters=None)
  List images on the server.

  Args:
    name (str): Only show images belonging to the repository ``name``
    all (bool): Show intermediate image layers. By default, these are
      filtered out.
    filters (dict): Filters to be processed on the image list.
      Available filters:
      - ``dangling`` (bool)
      - ``label`` (str): format either ``key`` or ``key=value``

  Returns:
    (list of :py:class:`Image`): The images.

  Raises:
    :py:class:`docker.errors.APIError`
      If the server returns an error.

示例:

查看默认所有的镜像文件,以image-id进行区分
In [34]: C.images.list()
Out[34]: 
[,
 ,
 ,
 ,
 ]
load方法:相当于docker load

pull方法:下载镜像文件
 pull(self, name, **kwargs)
  Pull an image of the given name and return it. Similar to the
  ``docker pull`` command.

  If you want to get the raw pull output, use the
  :py:meth:`~docker.api.image.ImageApiMixin.pull` method in the
  low-level API.

  Args:
    repository (str): The repository to pull
    tag (str): The tag to pull
    insecure_registry (bool): Use an insecure registry
    auth_config (dict): Override the credentials that
      :py:meth:`~docker.client.DockerClient.login` has set for
      this request. ``auth_config`` should contain the ``username``
      and ``password`` keys to be valid.

  Returns:
    (:py:class:`Image`): The image that has been pulled.

需要注意的是:使用pull的时候,会弱匹配所有的tag标签

push方法:上传镜像文件

push(self, repository, tag=None, **kwargs)
  Push an image or a repository to the registry. Similar to the ``docker
  push`` command.

  Args:
    repository (str): The repository to push to
    tag (str): An optional tag to push
    stream (bool): Stream the output as a blocking generator
    insecure_registry (bool): Use ``http://`` to connect to the
      registry
    auth_config (dict): Override the credentials that
      :py:meth:`~docker.api.daemon.DaemonApiMixin.login` has set for
      this request. ``auth_config`` should contain the ``username``
      and ``password`` keys to be valid.

  Returns:
    (generator or str): The output from the server.

  Raises:
    :py:class:`docker.errors.APIError`

remove方法:docker rmi 
 remove(self, *args, **kwargs)
  Remove an image. Similar to the ``docker rmi`` command.

  Args:
    image (str): The image to remove
    force (bool): Force removal of the image
    noprune (bool): Do not delete untagged parents

search方法:
search(self, *args, **kwargs)
  Search for images on Docker Hub. Similar to the ``docker search``
  command.

  Args:
    term (str): A term to search for.

  Returns:
    (list of dicts): The response of the search.

3.docker管理容器相关

C.containers类,下面有相关的方法:

client,create,get,list,model,run

列出当前存活的容器:

C.containers.list()

列出指定容器:

C.containers.get('')

创建容器:

C.containers.create
create(image, command=None, **kwargs) method of docker.models.containers.ContainerCollection instance
  Create a container without starting it. Similar to ``docker create``.

  Takes the same arguments as :py:meth:`run`, except for ``stdout``,
  ``stderr``, and ``remove``.

  Returns:
    A :py:class:`Container` object.

  Raises:
    :py:class:`docker.errors.ImageNotFound`
      If the specified image does not exist.
    :py:class:`docker.errors.APIError`
      If the server returns an error.


run一个容器:类似于命令行的docker run方法
run(image, command=None, stdout=True, stderr=False, remove=False, **kwargs) method of docker.models.containers.ContainerCollection instance
  Run a container. By default, it will wait for the container to finish
  and return its logs, similar to ``docker run``.

  如果'detach'参数设置为'True',他将立即返回一个Container对象,类似于'docker run -d'  
  实例:
    运行一个容器并获取输出。

    >>> import docker
    >>> client = docker.from_env()
    >>> client.containers.run('alpine', 'echo hello world')
    b'hello world\n'

    后台运行一个容器:
    >>> cOntainer= client.containers.run('bfirsh/reticulate-splines',
                       detach=True)
    获取该容器的日志信息
    >>> container.logs()
    'Reticulating spline 1...\nReticulating spline 2...\n'

  参数介绍:
    image (str): run一个容器所需要的镜像(str类型)
    command (str or list): 容器启动默认运行的命令(字符串或者列表类型).

    blkio_weight_device: 设置设备Block IO 权重:``[{"Path": "device_path", "Weight": weight}]``.
    blkio_weight: 设置block IO 的权重 范围10-1000.
    cap_add (list of str): 增加内核特性 比如:``["SYS_ADMIN", "MKNOD"]``.
    cap_drop (list of str): 删除内核特性
    cpu_group (int): 每颗cpu的长度
    cpu_period (int): 容器在每一个cpu的时间周期内可以得到多少的的cpu时间(ms)
    cpu_shares (int): 共享cpu权重CPU 相对权重
    cpuset_cpus (str): 绑定cpu的执行 (``0-3``,``0,1``).

    detach (bool): 后台运行一个容器,布尔类型值.相当于docker run -d选项

    device_read_bps: 从一个设备上限制读速率(bytes/s) `[{"Path": "device_path", "Rate": rate}]`
    device_read_iops: 从一个设备中限制读取速率(IO/s)
    device_write_bps: 从一个设备上限制写速率(bytes/s)
    device_write_iops: 从一个设备中限制读取速率(IO/s)
    devices (list): 映射主机的设备到容器中``::``.
    dns (list): 配置当前的dns-server
    dns_opt (list): 添加额外的dns参数选项到容器内部,比如resolv.conf文件
    dns_search (list): 设置dns搜索域
    domainname (str or list): 设置当前dns搜索域名

    entrypoint (str or list): 为容器设置入口,覆盖镜像中的entrypoint

    environment (dict or list): 内部环境变量["SOMEVARIABLE=xxx"]``
    extra_hosts (dict): 在容器内部添加额外的主机名解析(本地hosts文件)
    group_add (list): 设置容器内部进程运行时额外的组名(gid)

    hostname (str): 容器设置额外的主机名.相当于docker run -h/--hostname 选项

    ipc_mode (str): 为容器设置ipc模式
    isolation (str): 隔离技术的使用Default: `None`.
    labels (dict or list): 一个k/v类型的标签存储``{"label1": "value1", "label2": "value2"}``)或一个列表类型的k/v存储``["label1", "label2"]``
    links (dict or list of tuples): 为容器映射一个别名``(name, alias)`` 
    log_config (dict): 容器的日志配置。
      keys:
      - ``type`` The logging driver name.
      - ``config`` A dictionary of configuration for the logging
       driver.
    mac_address (str): 绑定mac地址.

    mem_limit (float or str): 内存限制,允许浮点型数据或单位区分的字符串(``100000b``, ``1000k``, ``128m``, ``1g``). 如果一个字符串没有指定单位,默认会使用字节(bytes)
    mem_limit (str or int): 容器可以使用的最大内存数量(e.g. ``1G``).

    mem_swappiness (int): 调整容器内存的swappiness行为状态,允许的数值为0-100 
    memswap_limit (str or int): 最大内存限制,容器可用的内存为(memory+swap)
    networks (list): 设置连接到该容器网络的名称
    name (str): 为容器设置名字
    network_disabled (bool): 禁用容器网络
    network_mode (str): 网络模式 相当于docker run --net='none'

      - ``bridge`` 默认使用桥接模式
      - ``none`` 无网络模式
      - ``container:`` 重用另外一个容器的网络
      - ``host`` 使用本机的网络栈


    oom_kill_disable (bool): 是否启用OOM
    oom_score_adj (int): 一个整数,以调整OOM的整体性能.
    pid_mode (str): pid模式,如果设置为'host',在容器内部将会使用宿主机的host pid
    pids_limit (int): 调整容器的pid的限制。'-1'表示不限制

    ports (dict): 为容器内部绑定端口 相当于docker run -p 
      实例:
       ``{'2222/tcp': 3333}`` 暴露容器内部的2222端口到本机的3333端
       ``{'2222/tcp': None}`` 将容器内部的2222随机映射到本机
       ``{'1111/tcp': ('127.0.0.1', 1111)}``.
       ``{'1111/tcp': [1234, 4567]}`` 绑定多个端口


    privileged (bool): 给容器额外的特权

    publish_all_ports (bool): 开放所有的端口到本机上 相当于docker run -P 

    read_only (bool): 以只读方式挂载容器的根文件系统
    remove (bool): 当容器退出的时候删除,默认是'False'
    restart_policy (dict): 当容器退出时重启容器
      配置参数如下:
      - ``Name`` One of ``on-failure``, or ``always``.
      - ``MaximumRetryCount`` 容器失败多少次后进行重启
      实例:
      ``{"Name": "on-failure", "MaximumRetryCount": 5}``

    security_opt (list): 设置安全标签,类似于selinux
    shm_size (str or int): /dev/shm 的大小(e.g. ``1G``).

    stdin_open (bool): 保持 ``STDIN`` 打开即使没有attach到容器内部相当于docker run -i

    stdout (bool): 当detach=False的时候,从'STDOUT'返回日志。默认为True
    stdout (bool): 当detach=False的时候,从'STDERR'返回日志,默认为False
    stop_signal (str): 设置用于停止容器的信号。(e.g. ``SIGINT``).
    sysctls (dict): 容器内部设置内核参数
    tmpfs (dict): 挂载临时文件系统 
            .. code-block:: python

        {
          '/mnt/vol2': '',
          '/mnt/vol1': 'size=3G,uid=1000'
        }

    tty (bool): 分配一个tty 相当于docker run -t

    ulimits (list): 在容器内部设置ulimits值,一个字典类型的列表
    user (str or int): 设置容器启动的用户名以及id

    userns_mode (str): 为容器设置用户的命名空间模式,当用户的namespace的remapping参数被启用的时候,支持参数有'host'
      values are: ``host``
    volume_driver (str): 数据卷挂载驱动名
    volumes (dict or list): 一个字典配置,将外部数据卷挂载到容器内部,key是主机或者数据卷的名字,value是带有key的字典:
        实例:
        {'/home/user1/': {'bind': '/mnt/vol2', 'mode': 'rw'},
         '/var/www': {'bind': '/mnt/vol1', 'mode': 'ro'}}

    volumes_from (list): 获取容器名或者id标识。
    working_dir (str): 容器默认的工作目录

  返回参数:
    容器的日志,包含 ``STDOUT``, ``STDERR``
    If ``detach`` is ``True``, a :py:class:`Container` object is
    returned instead.

  异常信息:
    如果容器以非0状态退出,或者`detach`参数为`False`
    :py:class:`docker.errors.ContainerError`
    如果指定的镜像不存在
    :py:class:`docker.errors.ImageNotFound`
    如果是服务返回一个错误
    :py:class:`docker.errors.APIError`
      If the server returns an error.

示例: 一个完成的创建容器的基本粒子:

Command line:
$ docker run -itd -P --cpuset_cpus='0,1' --cpu_shares=2 --cpu_period=10000 --hostname=xxbandy --mem_limit=512m --net=none --oom_kill_disable=True -P -u admin busybox /bin/sh

Python API:
c1 = C.containers.run('busybox',command='/bin/sh',name='xxb-test',detach=True,tty=True,stdin_open=True,cpuset_cpus='0,1',cpu_shares=2,cpu_period=10000,hostname='xxbandy',mem_limit='512m',network_mode='none',oom_kill_disable=True,publish_all_ports=True,user='root')

查看容器相关信息:
容器id,64位的字符
In [20]: c1.id
Out[20]: '499db0824206d61d09db2f36c70aa84bdb1a4b6d508b001a618d2010a23fea7e'


c1.logs 
c1.name   获取容器名信息
c1.reload
c1.remove  删除容器信息,相当于docker rm 参数:c1.remove(v=True,link=True,force=True)
c2.rename   重命名容器名,相当于docker renmame oldname newname
c1.resize   设置tty session信息
c1.restart  重启容器信息
c1.start   启动容器信息
c1.stats   容器状态

c1.update  动态调整容器内部信息(blkio_weight,cpu_period,cpu_quota,cpu_shares,cpuset_cpus,cpuset_mems,mem_limit,mem_reservation)
  Args:
    blkio_weight (int): 块IO权重比例(10-100)
    cpu_period (int): 限制cpu公平调度周期
    cpu_quota (int): 限制cpu公平调度配额
    cpu_shares (int): 设置cpu共享权重
    cpuset_cpus (str): 指定cpu执行(0-3, 0,1)
    cpuset_mems (str): 指定cpu内存的执行(0-3, 0,1)
    mem_limit (int or str): 内存限制
    mem_reservation (int or str): 内存软限制
    memswap_limit (int or str): swap限制总的可使用内存限制(memory + swap),-1表示关闭swap
    kernel_memory (int or str): 内核内存限制
    restart_policy (dict): 重启策略

注意:update方法在docker1.10之后才增加了改功能

查看容器相关信息:
容器id,64位的字符
In [20]: c1.id
Out[20]: '499db0824206d61d09db2f36c70aa84bdb1a4b6d508b001a618d2010a23fea7e'

可以在/sys/fs/cgroup/memory/docker目录下面查看到每个容器的相关cgroup配置信息。
查看内存信息:
# grep hierarchical memory.stat   分别显示容器的内存限制和swap限制
hierarchical_memory_limit 536870912
hierarchical_memsw_limit 1073741824

#cat memory.limit_in_bytes
536870912

可以在/sys/fs/cgroup/cpuset/docker目录下面查看到容器cpu的相关配置
# cat cpuset.cpus    显示当前绑定的cpu信息
0-1
使用docker update动态调整内存信息:
docker update -m 1024M xuxuebiao-test

# cat memory.limit_in_bytes 
1073741824
# grep hierarchical_memory_limit memory.stat 
hierarchical_memory_limit 1073741824

感谢阅读 ,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
麦兜199294_835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有