Docker核心概念:镜像、容器、仓库
Docker核心概念
镜像
镜像是一个只读的文件和文件夹组合。它包含了容器运行时所需要的所有基础文件和配置信息,是容器启动的基础。所以你想启动一个容器,那首先必须要有一个镜像。镜像是 Docker 容器启动的先决条件
使用镜像的两种方式:
- 基于基础镜像构建
- 从镜像仓库上下载
容器
容器是 Docker 的另一个核心概念。通俗地讲,容器是镜像的运行实体。镜像是静态的只读文件,而容器带有运行时需要的可写文件层,并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容器有初建、运行、停止、暂停和删除五种状态。
仓库
如同Github类似,用来存储Docker镜像。可以分为公共镜像仓库和私有镜像
三者关系
镜像操作
操作可分为:
-
拉取镜像,使用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
构建镜像
构建镜像有两种方式:
- 使用docker commit命令从运行中的容器提交为镜像;
- 使用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 命令设置工作目录 |