0
点赞
收藏
分享

微信扫一扫

Docker系列教程(4) Docker 镜像

就是耍帅 2022-03-16 阅读 61

Docker 镜像

**Docker 把应用程序及其依赖,打包在 image 文件里面。**只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。

构建镜像

这就需要用到 Dockerfile 文件。它是一个文本文件,用来配置 image。Docker 根据 该文件生成二进制的 image 文件。

在项目的根目录下,新建一个文本文件.dockerignore

上面代码表示,这三个路径要排除,不要打包进入 image 文件。如果你没有路径要排除,这个文件可以不新建。

新建一个文本文件 Dockerfile

FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000

上面代码一共五行,含义如下。

有了 Dockerfile 文件以后,就可以使用docker image build命令创建 image 文件了。

上面代码中,-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

如果运行成功,就可以看到新生成的 image 文件demo了。

RUN命令

通常用于安装命令和软件包,构建镜像。

CMD命令

  • shell 格式:CMD <命令>
  • exec 格式:CMD ["可执行文件", "参数1", "参数2"...] 推荐
  • 参数列表格式:CMD ["参数1", "参数2"...],在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

我们可以把这个命令写在 Dockerfile 里面,这样容器启动以后,这个命令就已经执行了,不用再手动输入了。

上面的 Dockerfile 里面,多了最后一行CMD node demos/01.js,它表示容器启动后自动执行node demos/01.js

你可能会问,RUN命令与CMD命令的区别在哪里?简单说,RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。现在,启动容器可以使用下面的命令。

entrypoint

entrypoint才是正统地用于定义容器启动以后的执行体的,其实我们从名字也可以理解,这个是容器的“入口”。
有两种用法:

  • EXEC 格式

dockerfile

CMD ["world"]
ENTRYPOINT ["echo","hello"]

如果run后面没有参数,但是cmd有,那么cmd的全部内容会作为entrypoint的参数

$ docker run -it [镜像名]
hello world

如果run后面有参数,可以动态替换cmd参数

$ docker run -it [镜像名] cloud
hello cloud
  • shell 格式

在这种模式下,任何run和cmd的参数会被忽略。官网推荐第一种用法。

dockerfile

ENTRYPOINT echo

常用命令

搜索镜像

docker search命令会从官方仓库查找镜像。

下载镜像

docker pull命令会从官方仓库下载镜像。

查看镜像

docker images命令会显示本地镜像。

docker inspect查看详情

$ docker inspect ubuntu:18.04

docker tag给本地镜像打标签,方便日后查看

$ docker tag ubuntu:latest myubuntu:latest

删除镜像

docker rmi命令会删除镜像。

载入和存出镜像

镜像可以保存后再加载到其它地方。

上传镜像

三种方式:

  1. 用相同的Dockerfile在其他host构建镜像
  2. 将镜像上传到公共Registry(比如Docker Hub),Host直接下载使用
  3. 搭建私有的Registry供本地Host使用

首先,去 hub.docker.com 注册一个账户。然后,用下面的命令登录。

接着,为本地的 image 标注用户名和版本。

最后,发布 image 文件。

发布成功以后,登录 hub.docker.com,就可以看到已经发布的 image 文件。

举报

相关推荐

0 条评论