4

Docker Compose使用教程 - 南风丶丶

 3 months ago
source link: https://www.cnblogs.com/xinjieli/p/18007801
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

913377-20240205180148889-138730654.png

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 <service-name>

# 也可以直接使用容器ID查看容器日志
docker logs -f <container-id>

# 进入容器
docker attach <container-id> 不推荐,退出容器时,容器会停止
docker exec -it <container-id> /bin/bash 推荐使用

# 停止容器,并删除相应的配置,推荐使用,如果使用docker stop并不会删除容器的network和volume,使用下面的命令可以停止并删除由docker compose文件定义的容器、网络和卷
docker compose down

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK