本笔记为阿里云天池龙珠计划Docker训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/activity/promotion/aicampdocker
阿里云docker常用命令
docker 三要素:镜像(image)、容器(contarin)、registry(包含多个仓库)
镜像:顾名思义就是咱们将要把代码和环境打包在一起的这个产物,就是镜像。
registry:那么镜像存储在哪里呢 所以就有了 registry,是各云厂商提供的镜像存取 服务,类似网盘,将镜像存储在云端仓库,方便我们随时随地在不同的介质上运行自己的代 码或分享代码。比如你要把本地开发好的代码放在服务器上做耗时的训练动作,那么只需要 在服务器上直接拉取自己云端的镜像运行即可。当然除了存储以外还有诸如版本管理等服务 功能,类似 git。
容器:运行起来的镜像我们称之为容器,可以理解为运行环境或者实例。其实质是进程, 随着代码运行结束,进程结束容器也就消失了。
安装docker
sudo curl -sS https://get.docker.com/ | sh
测试
docker run hello-world
$ docker --version
Docker version 19.03.8, build afacb8b
$ docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6
(这一条运行失败)
拉取镜像
docker pull [选项] [docker 镜像地址:标签]
如:
docker pull hello-world:latest
运行镜像
docker run hello-world:latest
运行镜像并进入容器
$ docker run -it --rm ubuntu:18.04 bash
docker run
就是运行容器的命令,后面如果只跟镜像,那么就执行镜像的默认命令然 后退出。
-it
:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm
:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的 容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结 果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
ubuntu:18.04
:这是指用 ubuntu:18.04 镜像为基础来启动容器。
bash
:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash。 进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。通过 exit 退出。
root@e7009c6ce357:/# uname -a
Linux bff9f261bab2 4.15.0-106-generic #107-Ubuntu SMP Thu Jun 4 11:27:52 UTC 2 020 x86_64 x86_64 x86_64 GNU/Linux
root@e7009c6ce357:/# exit
查看本地镜像
docker images
IMAGE ID 是镜像的唯一标识。
查看运行中的容器:
docker ps
docker ps 罗列的是当前活跃的容器。
CONTAINER ID 容器唯一 id 可以通过指定这个 ID 操作 exec shell 进入容器、 commit 这个容器的修改、tag 给这个容器打标签等。
查看所有容器:
docker ps -a
进入运行中/后台运行的容器
docker exec -it [CONTAINER ID] /bin/bash
进入运行中的容器后不仅可以调试镜像,还可以对镜像做修改如安装 python 包
保存修改
docker commit [CONTAINER ID] registry.cn-shanghai.aliyuncs.com/test/pytorch:myver sion
注意:通过 commint 的形式保存现场为一个新的镜像虽然也能直观的达到构建新镜像 的目的,但是实际操作中,并不推荐这种形式,因为 1.commit 操作不仅会把有用的修改保 存下来,对一些无关的修改也会保存下来(每一个命令行操作都会生成存储如 ls 操作)就 会导致镜像比较臃肿;2.因为 commit 操作属于黑箱操作,后续如果有什么问题维护起来会 比较麻烦。 建议 commit 仅作为保留现场的手段,然后通过修改 dockerfile 构建镜像
打TAG
有时需要对临时版本,或者节点版本做一个标记保留,打 TAG 标签非常好用,并不会 额外占用空间:
docker tag registry.cn-shanghai.aliyuncs.com/test/pytorch:myversion my_tmp_version: 0.1
推送镜像到仓库
docker push registry.cn-shanghai.aliyuncs.com/test/pytorch:myversion
删除镜像
docker rmi REPOSITORY:TAG
docker rmi registry.cn-shanghai.aliyuncs.com/target:test
删除容器
docker rm [CONTAINER ID]
如果容器还在运行,则会删除失败,应先结束掉容器:
docker kill [CONTAINER ID]