Docker 简明教程

Docker
简明教程

请添加图片描述

Created by Jasen on 2022/07/16.

Docker 简介

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker Images (镜像):镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件系统,将每一层的改变以读写层的形式增加到原来的只读文件上,属于静态文件,类似于程序中的类。

Docker Containers (容器):由镜像文件生成的硬件载体,相当于轻量级的虚拟机,类似于程序中的实例。

Docker 机制中各个部分的关系概括为下图:

在这里插入图片描述

1 镜像

1.1 镜像基本命令

$ docker images						# 查看本机镜像文件
$ docker rmi ImagesName:tag/id 		# 删除镜像文件

1.2 构建镜像

通过 docker file 构建新的镜像。

$ docker build -f /path/to/a/Dockerfile -t ImageName:ImageTag
# -f : Dockerfile文件路径
# -t : 新建镜像的名字:新建镜像的版本标签

以下为dockerfile的示例。

# Docker File Sample.
# Basic image
FROM nvidia/cuda:11.3.0-cudnn8-devel-ubuntu18.04 

RUN sed -i "s/archive.ubuntu./mirrors.aliyun./g" /etc/apt/sources.list
RUN sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
RUN sed -i "s/security.debian.org/mirrors.aliyun.com\/debian-security/g" /etc/apt/sources.list
RUN sed -i "s/httpredir.debian.org/mirrors.aliyun.com\/debian-security/g" /etc/apt/sources.list

RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

# Install basics
RUN apt-get update -y \
    && apt-get install build-essential \
    && apt-get install -y apt-utils git curl ca-certificates bzip2 tree htop wget \
    && apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-dev bmon iotop g++ python3.7 python3.7-dev python3.7-distutils

# Install cmake v3.13.2
RUN apt-get purge -y cmake && \
    mkdir /root/temp && \
    cd /root/temp && \
    wget https://github.com/Kitware/CMake/releases/download/v3.13.2/cmake-3.13.2.tar.gz && \
    tar -xzvf cmake-3.13.2.tar.gz && \
    cd cmake-3.13.2 && \
    bash ./bootstrap && \
    make && \
    make install && \
    cmake --version && \
    rm -rf /root/temp

# Install python
RUN ln -sv /usr/bin/python3.7 /usr/bin/python
RUN wget https://bootstrap.pypa.io/get-pip.py && \
	python get-pip.py && \
	rm get-pip.py

# Install python packages
RUN PIP_INSTALL="python -m pip --no-cache-dir install" && \
    $PIP_INSTALL numpy==1.19.3 llvmlite numba 

1.3 拉取镜像

docker hub 提供了丰富的官方和第三方的镜像文件,搜索指定环境和版本,可直接复制 docker 命令到终端进行镜像文件的拉取。以pytorch为例,再docker hub中搜索pytorch,在Tags选项可以选取不同的版本。
请添加图片描述

将TAG对应的命令复制到终端中即可拉取对应版本的镜像。

$ docker pull bitnami/pytorch:latest

2 容器

2.1 容器基本命令

$ docker ps							# 查看运行中的容器
$ docker ps -a						# 查看所有的容器
$ docker stop ContainerName/id		# 停止运行中的容器
$ docker start ContainerName/id		# 启动已停止的容器
$ docker restart ContainerName/id	# 重启容器
$ exit								# 退出容器,可能停止进程
$ Ctrl + P + Q						# 退出容器,不停止进程
$ docker rm ContainerName/id		# 根据容器id删除容器(不能删除正在运行中的容器)
$ docker rm -f ContainerName/id  	# 强制删除指定容器(正在运行中的容器也可删除)

2.2 容器创建

通过 docker run 命令, 可以通过指定的镜像文件创建并运行一个容器,类似于编程语言中的对象实例化。

# docker run command sample.
$ docker run -it --gpus=all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all -v /home/junjie/IA-SSD/:/IA-SSD --name junjie_IA-SSD pytorch/pytorch:1.11.0-cuda11.3-cudnn8-devel /bin/bash

# -i : 交互式操作
# -t : 终端
# --gpus : 给定该容器的可使用的GPU权限
# -e : GPU设备的使用方式:cuda计算与程序
# -v : 宿主机与容器的文件映射(映射目录时宿主机与容器的目录实时同步,映射文件时容器关闭后同步)
# -v : 多目录映射(挂载)
# --name : 创建的容器的名称
# pytorch/pytorch:1.11.0-cuda11.3-cudnn8-devel : 使用的镜像文件
# /bin/bash : 交互式的Shell

2.3 进入容器

  • run

运行 docker run 命令之后,已经进入了容器的工作空间中。通过cd / 命令可以访问容器的根目录,挂载的文件夹可以在其中找到。

# In container workspace 
root@fc40436c1c48:/IA-SSD# cd /
root@fc40436c1c48:/# ls
IA-SSD  NGC-DL-CONTAINER-LICENSE  bin  boot  dev  etc  home  lib ...
  • exec

dockers exec : 进入已运行的容器,并且执行命令,退出容器该让其不会停止。

此时执行**exit 会退出容器但不会停止容器运行。**

# docker exec command
# 进入对应的容器,执行bash
$ docker exec -it CONTAINERNAME/CONTAINERID /bin/bash 
  • attach

docker attach : 将本机的标准输入(键盘)、标准输出(屏幕)、错误输出(屏幕)附加到一个运行的容器。本机的输入直接输到容器中,容器的输出会直接显示在本机的屏幕上。

此时执行**exit : 会退出容器并且停止容器运行。**

  • VS Code

VS Code的丰富扩展为开发人员提供了便利,通过安装一下两个扩展,可以更加边界地进行调试。

Docker & Docker Explorer

VS Code扩展中安装 DockerDocker Explorer 扩展,可以看到宿主机的镜像文件和容器,并且可以在右键菜单中对容器进行启动、停止。

在这里插入图片描述

Remote - Containers

安装 Remote -Containers 扩展,可以远程连接正在运行中的容器,进入到容器的文件目录中。在运行中的容器的右键菜单中选中 Attach Visual Studio Code ,输入远程密码后即可进入容器文件目录。

在这里插入图片描述

进入容器后的文件目录如下图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值