• Docker Compose使用教程


    前言

      这篇文章重点讲解docker compose的相关概念和命令。Compose是单机编排容器集群或者是分布式服务容器的应用工具。通过Compose,可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

      Docker-Compose是一个容器编排工具。通过一个.yml或.yaml文件,将所有的容器的部署方法、文件映射、容器端口映射等情况写在一个配置文件里,执行docker compose up命令就像执行脚本一样,一个一个的安装并部署容器。如下图所示,通过docker compose可以创建一个docker的集群。

    1.使用Dockerfile创建镜像

      我们可以使用Dockerfile文件,创建一个属于自己的镜像,首先是编写Dockerfile文件,然后是使用docker build命令。

      可以使用nvidia的官方镜像,其中已经有了大部分的依赖包,下面是拉取pytorch镜像的命令:

      官方地址:https://catalog.ngc.nvidia.com/orgs/nvidia/containers/pytorch

    docker pull nvcr.io/nvidia/pytorch:23.05-py3

      下面是Dockerfile文件,在nvidia镜像基础之上,安装了一些包,同时使用了ENTRYPOINT命令在容器启动时创建了一个jupyter-lab服务:

    FROM nvcr.io/nvidia/pytorch:23.05-py3
    WORKDIR /workspace
    USER root
    EXPOSE 8888
    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get update && apt-get upgrade -y && apt-get install git -y
    # RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && pip install -r /workspace/requirements.txt
    RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    RUN pip install diffusers --upgrade
    RUN pip3 install torch torchvision torchaudio
    RUN pip install invisible_watermark transformers accelerate safetensors
    RUN apt-get update
    ENTRYPOINT ["jupyter-lab","--no-browser","--allow-root","--port=8888","--ip=0.0.0.0","--NotebookApp.token=123456"]

      进入Dockerfile所在的目录执行build命令,并取个tag名称,注意后面有个'.'

    docker build -t my-image:20240205 .

    2.上传镜像到私人仓库

      使用以下命令给镜像打标签:

    docker tag my-image:20240205 registry.example.com/my-image:20240205

      使用以下命令将镜像推送至registry.example.com私人仓库:

    docker push registry.example.com/my-image:20240205

      使用以下命令拉取私人仓库中的镜像:

    docker pull registry.example.com/my-image:20240205

    3.使用Docker Compose启动一个jupyter-lab服务

      首先编写好yaml文件,也可以搭配docker-entrypoint.sh使用,因为镜像里起了jupyter-lab服务,所以下面的yaml注释了entrypoint,下面是docke-compose.yaml文件:

    version: '3.9'
     
    services:
      dl-train:
        image: registry.example.com/my-image:20240205
        ports:
          - "8811:8811"
        volumes:
          - "/home/lxj/workspace/models:/workspace/models"
          - "/home/lxj/workspace/src:/workspace/src"
        networks:
          - sdnet
        restart: always
        # entrypoint: ["sh","/workspace/src/jupyter-lab/docker-entrypoint.sh"]
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  device_ids: ['0']
                  capabilities: [gpu]
    networks:
      sdnet:
        ipam:
          driver: default
          config:
            - subnet: 192.168.12.0/24

      下面是docker-entrypoint.sh文件,可以在里面写一些pip语句安装一些包:

    #!/bin/bash
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip install --upgrade jupyterlab
    # jupyter labextension install @jupyter-widgets/jupyterlab-manager
    jupyter-lab --no-browser --allow-root --port=8811 --ip=0.0.0.0 --NotebookApp.token=123456

      最后进入yaml所在的目录,运行启动命令即可:

    docker compose up -d

    4.Docker Compose常用命令

      当我们起了一个容器后,需要对容器有一些操作,比如查看容器中服务的日志,停止容器重新启动,接下来讲一下docker compose中操作容器的常用命令:

    # 运行容器
    docker compose up
    
    # 在后台运行容器
    docker compose up -d
    
    # 指定yaml在后台运行容器
    docker compose -f docker-compose.prod.yaml up -d
    
    # 查看日志
    docker compose logs -f 
    
    # 也可以直接使用容器ID查看容器日志
    docker logs -f 
    
    # 进入容器
    docker attach  不推荐,退出容器时,容器会停止
    docker exec -it  /bin/bash 推荐使用
    
    # 停止容器,并删除相应的配置,推荐使用,如果使用docker stop并不会删除容器的network和volume,使用下面的命令可以停止并删除由docker compose文件定义的容器、网络和卷
    docker compose down

    5.总结

      以上就是docke compose单机编排容器集群的讲解,使用yaml文件可以直观明了的使用容器,不管是日常做深度学习实验起一个单容器,还是部署一整个线上服务集群,使用docker compose容器编排技术都是十分方便快捷的。

  • 相关阅读:
    想要精通算法和SQL的成长之路 - 连续的子数组和
    Redis不再开源,Linux基金会推出下一代开源替代方案!
    机场信息发布系统解决方案,到底有多好用
    Java核心编程(12)
    成为会带团队的技术人 在管理艺术中寻找确定性的“工程逻辑”
    【递归、搜索与回溯算法】第一节.初识递归、搜索与回溯算法
    PT_独立事件
    微信视频号的项目玩法,视频号好物分享,只要你会剪辑,就可以去操作
    一文带你了解redux的工作流程——action/reducer/store
    小程序支付详解
  • 原文地址:https://www.cnblogs.com/xinjieli/p/18007801