docker中的一个核心概念是image(镜像),镜像也就是比喻中的一个集装箱。每个image有id、作者、创建时间、大小等。image又像是个git仓库或是mvn仓库,第一次使用时从mirros仓库中pull,操作更改后可以进行commit保存,需要同步到远端时进行push。
每个镜像执行时,有个容器container的概念,和hadoop yarn的container概念类似。
例如安装docker后,查看当前有什么image,可以执行
docker images
输出如下,可以看到有REPOSITORY,TAG,IMAGE ID等关键信息:
REPOSITORY TAG IMAGE ID CREATED SIZE mnadeem/boot-otel-tempo-provider1 0.0.1-SNAPSHOT 32914b1c7cbe 5 months ago 168MB mnadeem/boot-otel-tempo-api 0.0.1-SNAPSHOT 86f67a32fc3d 5 months ago 148MB mnadeem/boot-otel-tempo-docker 0.0.1-SNAPSHOT 539de8d31617 5 months ago 129MB mnadeem/boot-otel-tempo-docker latest 539de8d31617 5 months ago 129MB postgres latest cdbebe091601 5 months ago 374MB prom/prometheus latest a3d385fc29f9 6 months ago 201MB dpage/pgadmin4 latest b19921dd09db 6 months ago 270MB mirrors.tencent.com/todacc/rec_index_service_compile 1.1.6 2462cdaa0331 7 months ago 8.53GB mysql 8.0 c0cdc95609f1 13 months ago 556MB
REPOSITORY: 仓库,类似git的仓库名或是maven的groupId+artifactId,但也有name的概念,相比于image id更huaman readable。
在docker命令中,如docker run
, 指定镜像时可以是image id或是name,不过这个name是能具体指定某个版本的image的全名,格式是REPOSITORY:TAG,当然如果TAG是默认值latest的话,可以省略。
例如以下使用命令,通过指定name的方式来运行某个镜像:
docker run mirrors.tencent.com/todacc/rec_index_service_compile:1.1.6
如果只指定name不是全名会报错,提示本地找不到镜像rec_index_service_compile
docker run rec_index_service_compile
也可以用image id指定镜像,如:
docker run 2462cdaa0331
REPOSITORY仓库名有特定的格式。
以rec_index_service_compile为例,其全名是mirrors.tencent.com/todacc/rec_index_service_compile,mirrors.tencent.com是镜像仓库服务,todacc是命名空间或组的概念,rec_index_service_compile是具体的仓库名。REPOSITORY名也可以进行默认省略,像最后一行的mysql那样。
TAG: 类似于git里的tag,版本的意思,使用仓库名指定image时,如果不是latest时需要指定版本。
IMAGE ID: 镜像id,这个比较好理解。
安装镜像
docker pull mirrors.tencent.com/todacc/rec_index_service_compile:1.1.6 /bin/bash
查看本地镜像
docker images
交互式运行
docker run -it mirrors.tencent.com/todacc/rec_index_service_compile:1.1.6 /bin/bash
查看某个镜像的详细信息
docker inspect mirrors.tencent.com/todacc/rec_index_service_compile:1.1.6
查看正在运行的容器
docker ps
网路连接断开后重新进入docker,先使用docker ps确定执行中的container id
docker attach ${container id}
保存本次更改,类似git commit
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
- -m: 提交的描述信息
- -a: 指定镜像作者
- e218edb10161:容器 ID
- runoob/ubuntu:v2: 指定要创建的目标镜像名
更新发布到远端
docker push mirrors.tencent.com/myspace/video_rec_annalgo:dev
这一步可能会遇到denied: requested access to the resource is denied
的错误
首先检查是否已进行docker login,如果是发布到其他仓库(非默认),需要login 指定的服务,如我这里发布到腾讯的,执行
docker login --username xxx --password xxx mirrors.tencent.com
如果登录后依然出现这个问题,需要到镜像服务中检查下要发布到仓库命名空间,如这里的myspace是否有足够的权限。