Docker 快速学习手册及相关笔记 附带一些问题解决方案
参考与前言
- Docker 官方教程 【英文】:https://docs.docker.com/get-started/
- Windows Docker 安装 | 菜鸟教程 (runoob.com)
- Docker 教程 | 菜鸟教程
Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。
Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。
因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。
如需要在ubuntu下使用 像绝哥说的 用多了就是几条指令 非常快速的… 这个为走捷径教程,建议通过目录进行所需的观看
常用命令
查看已有镜像 image
docker images
删除对应镜像id的镜像
docker rmi image_id
查看已有容器 containers
docker ps -a
删除对应容器id的容器
docker rm container_id
删除所有无名
sudo docker rmi $(sudo docker images -q --filter "dangling=true")
如果想一次過將所有 container 停止及刪除, 執行以下指令:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
0. 安装
docker
可以科学上网情况下:
Install Docker Engine on Ubuntu
docker engine
sudo apt-get update sudo apt-get install \ca-certificates \curl \gnupg \lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
国内镜像一键安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
nvidia-docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
1. 基础介绍
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
容器与镜像的关系类似于面向对象编程中的对象与类。
镜像 → 类;容器 → 对象
运行与参数
docker run -it ubuntu /bin/bashdocker run -it -e DISPLAY=$DISPLAY --net=host --gpus all \
--name kin_carla2 carlasim/carla:0.9.10.1 /bin/bashdocker run -it --gpus '"device=1,2"' \
-v /data_shared/Docker/jcheng/workspace:/workspace \
-p 8010:6006 \
--name cj_01 cj/torch:1.10.0-cuda11.3-cudnn8-runtime /bin/zsh
参数说明:
i: 交互式操作。
t: 终端。
ubuntu: ubuntu 镜像名称
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash,比如最后一条使用的是bin/zsh 也就是zsh Shell
--gpus all
,也可以指定此容器可使用的gpu数量和设备,如果是数量的话 直接后接数字即可,如果是设备的话 如上 指标设备id,相关官方链接--name kin_carla2
指明这个容器的名字,没有的话就是随机命名,有名字的话后面 docker start 可以直接接名字 省事-p
的意思是把contrainer的端口映射到host上,例如-p 8010:6006
的意思是把容器中6006端口映射到host的8010端口上