【docker容器】docker使用笔记-docker镜像
镜像
- 搜索镜像
docker search IMAGE_NAME
注:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
- 查看当前本机所有镜像
docker images
注:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
- 下载镜像(当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。但我们最好预先下载这个镜像,使用 docker pull 命令来下载它。)
docker pull IMAGE_NAME:tag
关于tag:没有指定tag则默认使用最新的tag,如上图
关于域名:使用 docker pull {IMAGE_NAME}
拉取镜像时,有两种情况:
1、IMAGE_NAME 第一个斜杠之前有域名标识
Docker 会将 IMAGE_NAME 识别为带域名的镜像。例如,myregistry.io/space1/image1:latest ,Docker 会去 myregistry.io 指向的服务器请求镜像数据。一个 Docker 镜像分为很多层,如果本地存在该层,则不会再次拉取。
2、IMAGE_NAME 第一个斜杠之前没有域名标识
Docker 会将 IMAGE_NAME 拼接为 docker.io/IMAGE_NAME 请求镜像数据。事实上,$ docker pull docker.io/shaowenchen/images1 与 $ docker pull shaowenchen/images1 同等效果。对于 DockerHub 提供的镜像,国内访问速度较慢,可以通过添加镜像源的方式加速。
- 删除镜像
docker rmi IMAGE_NAME
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1、从已经创建的容器中更新镜像,并且提交这个镜像
2、使用 Dockerfile 指令来创建一个新的镜像
- 更新镜像
首先需要先将已有镜像作为容器运行。
docker run -t -i IMAGE_NAME:tag /bin/bash
或
docker run -t -i IMAGE_ID /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。 在完成操作之后,输入 exit 命令来退出这个容器。
此时 容器的ID(非镜像ID) 为 cff4280baebd的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。
docker commit -m="your description" -a="author" container_id IMAGE_NAME:tag
各个参数说明:
-
-m: 提交的描述信息
-
-a: 指定镜像作者
- container_id:容器ID
- IMAGE_NAME:tag: 指定要创建的目标镜像名及tag
我们可以使用 docker images 命令来查看我们的新镜像
更新的新镜像可以来启动容器,通过docker ps可查询其已作为容器启动。
- 构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。Dockerfile如下:
#声明基础镜像来源
FROM IMAGE_NAME:tag
#声明镜像拥有者
MAINTAINER author
#RUN后面接容器运行前需要执行的命令,由于Dockerfile文件不能超过127行,因此当命令较多时建议写到脚本中执行。
<命令行命令> 等同于,在终端操作的 shell 命令。
RUN your command
#开机启动命令,此处最后一个命令需要是可在前台持续执行的命令,否则容器后台运行时会因为命令执行完而退出。这一条待确认是否必须。
ENTRYPOINT ping www.aliyun.com
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz 以上执行会创建 3 层镜像。可简化为以下格式: FROM centos RUN yum install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
docker build -t IMAGE_NAME:tag
.
参数说明:
-
-t :指定要创建的目标镜像名(注意镜像名称中不能有大写字母)
-
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
使用docker images 查看创建的镜像已经在列表中存在,如下图:
- 镜像打标签
docker tag IMAGE_ID
IMAGE_NAME:tag
参数说明:
-
IMAGE_ID :
镜像ID -
IMAGE_NAME:tag:
新镜像源名(repository name)和新的标签名(tag)
使用 docker images 命令可以看到,镜像多一个标签。
- 推送镜像到仓库
docker login --username=XXXXX registry.cn-shanghai.aliyuncs.com #执行后输入镜像仓库密码
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/dtstack123/test:[标签]
docker push registry.cn-shanghai.aliyuncs.com/dtstack123/test:[标签]
参数说明:
-
--username :
输入仓库用户名 -
registry.cn-shanghai.aliyuncs.com:仓库名称
注意:先打tag,再登录仓库,在push到仓库。