Docker核心概念:镜像、容器、仓库

Docker核心概念

镜像

镜像是一个只读的文件和文件夹组合。它包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础。所以你想启动一个容器,那首先必须要有一个镜像。镜像是 Docker 容器启动的先决条件

使用镜像的两种方式:

  1. 基于基础镜像构建
  2. 从镜像仓库上下载
容器

容器是 Docker 的另一个核心概念。通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。

仓库

如同Github类似,用来存储Docker镜像。可以分为公共镜像仓库和私有镜像

三者关系

dockerfile java基础镜像 docker基础镜像和项目镜像_Dockerfile

镜像操作

操作可分为:

  • 拉取镜像,使用docker pull命令拉取远程仓库的镜像到本地 ;
  • 重命名镜像,使用docker tag命令“重命名”镜像 ;
  • 查看镜像,使用docker image ls或docker images命令查看本地已经存在的镜像 ;
  • 删除镜像,使用docker rmi命令删除无用镜像 ;
  • 构建镜像,构建镜像有两种方式。第一种方式是使用docker build命令基于 Dockerfile 构建镜像;第二种方式是使用docker commit命令基于已经运行的容器提交为镜像
拉取镜像

使用命令docker pull拉取,其命令的格式为: docker pull [Registry]/[Repository]/[Image]:[Tag]

  • Registry 为注册服务器,Docker 默认会从 docker.io 拉取镜像,如果你有自己的镜像仓库,可以把 Registry 替换为自己的注册服务器
  • Repository 为镜像仓库,通常把一组相关联的镜像归为一个镜像仓库,library为 Docker 默认的镜像仓库
  • Image 为镜像名称
  • Tag 为镜像的标签,如果你不指定拉取镜像的标签,默认为latest
查看镜像

使用命令docker images或者 docker image ls命令

使用后者可查询指定镜像,如docker image ls busybox

重命名镜像

使用命令docker tag将镜像重命名,命令格式为: docker tag [SOURCE_IMAGE[:TAG][TARGET_IMAGE][:TAG]

如:

docker tag busybox:latest mybusybox:latest

操作结果如下

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              dc3bacd8b5ea        9 days ago          1.23MB
mybusybox           latest              dc3bacd8b5ea        9 days ago          1.23MB

这里的两个镜像IMAGE ID一样,原因是指向的都是同一个镜像文件

删除镜像

使用命令docker rmi或者docker image rm命令删除镜像

如:

docker rmi mybusybox

操作结果:

Untagged: mybusybox:latest
构建镜像

构建镜像有两种方式:

  1. 使用docker commit命令从运行中的容器提交为镜像;
  2. 使用docker build命令从 Dockerfile 构建镜像

在使用Dockerfile构建镜像时,有以下特性:

  • Dockerfile 的每一行命令都会生成一个独立的镜像层,并且拥有唯一的 ID;
  • Dockerfile 的命令是完全透明的,通过查看 Dockerfile 的内容,就可以知道镜像是如何一步步构建的;
  • Dockerfile 是纯文本的,方便跟随代码一起存放在代码仓库并做版本管理。

Dockerfile 常用指令

Dockerfile 指令

指令简介

FROM

Dockerfile 除了注释第一行必须是 FROM ,FROM 后面跟镜像名称,代表我们要基于哪个基础镜像构建我们的容器。

RUN

RUN 后面跟一个具体的命令,类似于 Linux 命令行执行命令。

ADD

拷贝本机文件或者远程文件到镜像内

COPY

拷贝本机文件到镜像内

USER

指定容器启动的用户

ENTRYPOINT

容器的启动命令

CMD

CMD 为 ENTRYPOINT 指令提供默认参数,也可以单独使用 CMD 指定容器启动参数

ENV

指定容器运行时的环境变量,格式为 key=value

ARG

定义外部变量,构建镜像时可以使用 build-arg = 的格式传递参数用于构建

EXPOSE

指定容器监听的端口,格式为 [port]/tcp 或者 [port]/udp

WORKDIR

为 Dockerfile 中跟在其后的所有 RUN、CMD、ENTRYPOINT、COPY 和 ADD 命令设置工作目录