Docker Compose使用教程

共 4416字,需浏览 9分钟

 ·

2024-07-03 16:30

前言

  这篇文章重点讲解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 <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

5.总结

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


好了,今天的小知识你学会了吗?


链接:https://www.cnblogs.com/xinjieli/p/18007801

(版权归原作者所有,侵删)


   


扫 码

在线咨询

为你答疑解惑

更多面试题库免费领取

浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报