前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker-(3) 进阶使用

Docker-(3) 进阶使用

作者头像
孔西皮
发布2023-10-18 08:49:54
1700
发布2023-10-18 08:49:54
举报
文章被收录于专栏:前行的CVer前行的CVer

介绍 Dockerfile 以及 Docker Compose 的使用

1. Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile一行一个命令。常见的命令如下:

  • FROM: 用来告诉Docker使用哪个base Image或者主平台,基础镜像可以从dockerhub找,如pytorch(选devel版):https://hub.docker.com/r/pytorch/pytorch/tags?page=1&ordering=last_updated
  • WORKDIR: 为其他的docker指令如RUN、CMD设置一个工作目录
  • ENV: 设置app所需的环境变量。
  • ARG: 设置构建参数,ARG <参数名>[=<默认值>] -COPY: 格式为COPY SOURCE DESTINATION,拷贝文件
  • RUN: 在当前的image新建一个layer,并在这个新的layer运行命令
  • CMD: 在container中运行命令
  • ENTRYPOINT: 将container配置为可执行文件,如 ENTRYPOINT [“flask”, “run”]

更多命令可参考:https://docs.docker.com/engine/reference/builder/#run

注意:RUN和CMD的区别——Dockerfile不能等同于shell命令来写, 在 Shell 中,连续两行是同一个进程执行环境,因此前一个命令修改的内存状态,会直接影响后一个命令; 而在 Dockerfile 中,这两行 RUN 命令的执行环境根本不同,是两个完全不同的容器。 每一个 RUN 都会启动一个容器、执行命令、然后提交存储层文件变更。 第二层RUN启动的是一个全新的容器,跟第一层的容器完全没关系,自然不可能继承前一层构建过程中的内存变化。 因此如果需要改变以后各层的工作目录的位置,那么应该使用 WORKDIR 指令。

Dockerfile示例:

代码语言:javascript
复制
FROM  pytorch/pytorch:1.3-cuda10.1-cudnn7-devel

MAINTAINER kppkkp <920315842@qq.com>
ENV DEBIAN_FRONTEND=noninteractive

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get update \
    && apt-get install -y sudo build-essential cmake curl vim wget tree screenfetch \
    htop zip openssh-server screen unzip graphviz ca-certificates \
    && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libxrender-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# python3 related
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install cython
RUN pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
RUN git clone --recursive https://github.com/LingyvKong/CenterTrack.git /CenterTrack
WORKDIR /CenterTrack
RUN pip install -r requirements.txt
# RUN sh /CenterTrack/src/lib/model/networks/DCNv2/make.sh


# Add user root  
RUN echo "root:123456" | chpasswd  
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers

# config ssh
RUN mkdir /var/run/sshd && \
    sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config 
EXPOSE 22 

# set environment
RUN ldconfig 
ENV LANG C.UTF-8

RUN export LC_ALL=C.UTF-8 >> /root/.bashrc
RUN export LANG=C.UTF-8 >> /root/.bashrc

CMD ["/usr/sbin/sshd", "-D"]

从Dockerfile构建image

代码语言:javascript
复制
# 进入Dockerfile所在路径后运行
docker build -t flask_app:1.0 .

构建完后会在本机上创建一个image,可以使用docker images查看。

2. Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

https://www.runoob.com/docker/docker-compose.html

docker-compose.yaml中使用GPU(注意观察示例yaml中的层级结构): 注意docker-compose -v,docker-compose版本需要高于1.19

代码语言:javascript
复制
version: '2.4'
services:
  nvsmi:
    image: ubuntu:16.04
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    command: nvidia-smi

常用命令

代码语言:javascript
复制
# 创建并运行容器
docker-compose up -d
docker-compose up

# 停止并删除容器
docker-compose down
# 停止容器
docker-compose stop
# 删除停止状态的容器
docker-compose rm

# 查看日志
docker-compose logs

# 查看所有容器
docker-compose ps -a
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Dockerfile
  • 2. Docker Compose
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档