docker 基本命令
ide
本文字数:1.4k 字 | 阅读时长 ≈ 6 min

docker 基本命令

ide
本文字数:1.4k 字 | 阅读时长 ≈ 6 min

1. 简单的 Demo

docker run ubuntu:15.10 /bin/echo "Hello World"

以 ubuntu15.10 镜像创建一个新容器,然后再容器里执行 /bin/echo "Hello world 并输出结果。如果此镜像已经存在,那么会直接运行该镜像然后输出;如果镜像不存在,就会从 docker hub 上拉取公共镜像进行输出

2. 镜像命令

  1. 从 dockerhub 拉镜像: docker pull nvidia/cuda:12.3.1-devel-ubi8 nvidia/cuda 为拉取的目标仓库 12.3.1-devel-ubi8 为拉取的版本
  2. 查找 dockerhub 镜像: docker search pytorch
  3. 列出本地镜像列表: docker images
  4. 删除本地镜像: docker rmi <id> docker rmi <name:tag> docker rmi -f <id>

3. 容器命令

  1. 启动容器: docker run -i -t pytorch/pytorch /bin/bash
  1. 启动容器(后台模式)
    docker run -d pytorch/pytorch /bin/sh -c "while true; do echo hello world; sleep 1; done" 此命令会输出一段长字符: c4bec97b9c398c470f2ccfae77e9d1fc35e1c22127b7d9209267a5bee79b18a8,这个长字符为容器 ID,对每个容器来说唯一,只要容器在运行就可以查看,运行 docker ps
wangyh@Ti-Sev:~$ docker run -d pytorch/pytorch /bin/sh -c "while true; do echo hello world; sleep 1; done"
c4bec97b9c398c470f2ccfae77e9d1fc35e1c22127b7d9209267a5bee79b18a8
wangyh@Ti-Sev:~$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS             PORTS      NAMES
c4bec97b9c39   pytorch/pytorch         "/bin/sh -c 'while t…"   10 seconds ago   Up 9 seconds                  laughing_hellman
wangyh@Ti-Sev:~$ docker logs c4bec97b9c39
hello world
wangyh@Ti-Sev:~$ docker logs laughing_hellman
hello world
hello world
hello world
  1. 查看所有容器(包括已经停止的容器): docker ps -a

  2. 重启容器: docker restart <id>/<name>

  3. 停止容器: docker stop <id>/<name>

  4. 启动已经停止的容器: docker start <id>/<name>

  5. 进入容器

  1. 删除容器
  1. 导入和导出容器
  1. 退出容器不停止容器的运行

4. 制作 docker 镜像

有两种自定义镜像的方式

4.1 使用现有镜像

此方法是利用现有的镜像建立一个容器,然后在容器内进行你想要的操作,比如建立了一个 python 环境,然后退出容器,将容器进行保存为镜像压缩文件,然后重新将压缩文件转化为镜像即可,下面直接给出命令行的建立过程

首先我们这里已经建立了一个容器

wangyh@Ti-Sev:~$ docker ps -a
CONTAINER ID   IMAGE                    COMMAND       CREATED         STATUS                     PORTS      NAMES
506a5c87aaa3   pytorch/pytorch:latest   "/bin/bash"   5 minutes ago   Exited (0) 4 minutes ago              recursing_chatterjee

然后我们使用export命令将其保存到/data4/wangyh文件夹下,进入到文件夹,ls查看发现现在多了一个pytorch.tar文件

wangyh@Ti-Sev:~$ docker export 506a5c87aaa3 > /data4/wangyh/pytorch.tar
wangyh@Ti-Sev:~$ cd /data4/wangyh
wangyh@Ti-Sev:/data4/wangyh$ ls
pytorch.tar  

接下来我们用 import 命令将其转化为镜像,此时用 docker images 发现镜像已经存在啦

wangyh@Ti-Sev:/data4/wangyh$ cat pytorch.tar | docker import - test/pytorch:vv2
sha256:464d3d9480156995273961ee9f3429a970127c2b6cacbf2a7a4aa9fd4e78d460
wangyh@Ti-Sev:/data4/wangyh$ docker images
REPOSITORY                                           TAG                               IMAGE ID       CREATED              SIZE
test/pytorch                                         vv2                               464d3d948015   About a minute ago   3.5GB
wangyh@Ti-Sev:/data4/wangyh$ 

4.2 Dockerfile

建立一个文件命名为Dockerfile,然后将下面的内容复制进去,运行命令docker build -t <image name> .

例如建立名称为nvidia/cuda:v2的镜像名称docker build -t nvidia/cuda:v2 .

这里我们以nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04为基础镜像,然后安装了sudo命令,这样以后每次启动容器的时候里面就有sudo命令了,用户也可以根据自己的需求安装各种包等等

#!/bin/bash

FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04
MAINTAINER wangyh "1061771439@qq.com"

RUN apt-get update \
    && apt-get install -y sudo

下面章节我们讲解一下dockerfile的常用命令

5. Dockerfile常用命令

(一)FROM: 指定基础镜像。新的镜像在基础镜像上进行修改,例如我们要创建一个cuda环境,可以直接从Docker Hub上进行查找,例如找一个预先安装cuda10.1版本的镜像,可以写为FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04

(二)MAINTAINER: 指定作者。指定dockerfile的作者名称和邮箱,例如MAINTAINER wangyh 1061771439@qq.com

(三)RUN: 在镜像内部执行的命令,类比于在终端执行命令

如果要执行多个命令,需要在每个命令之后加入&&\,例如

RUN apt-get update && \
    apt-get install -y sudo && \
    apt-get install -y wget

(四)ADD/COPY: 将宿主机的文件复制到镜像内,如果目标位置不存在,会自动创建。例如将a.txt文件复制到容器中root目录下,执行ADD /home/a.txt /root/a.txt

(五)SHELL: 以覆盖默认的命令shell,例如linux的默认shell是["\bin\bash", "-c"], windows是["cmd", "\S", "\C"]

(六)ENV: 设置容器的环境变量,例如设置conda环境变量和设置代理

4月 06, 2025
3月 10, 2025
12月 31, 2024