File tree Expand file tree Collapse file tree 5 files changed +5
-5
lines changed
Expand file tree Collapse file tree 5 files changed +5
-5
lines changed Original file line number Diff line number Diff line change 44
55一个 ** Docker Registry** 中可以包含多个** 仓库** (Repository);每个仓库可以包含多个** 标签** (Tag);每个标签对应一个镜像。
66
7- 一般而言,一个仓库包含的是同一个软件的不同版本的镜像,而标签则用于对应于软件的的不同版本 。我们可以通过 ` <仓库名>:<标签> ` 的格式来指定具体是哪个版本的镜像 。如果不给出标签,将以 ` latest ` 作为默认标签。
7+ 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过 ` <仓库名>:<标签> ` 的格式来指定具体是这个软件哪个版本的镜像 。如果不给出标签,将以 ` latest ` 作为默认标签。
88
99以 [ Ubuntu 镜像] ( https://hub.docker.com/_/ubuntu/ ) 为例,` ubuntu ` 是仓库的名字,其内包含有不同的版本标签,如,` 14.04 ` , ` 16.04 ` 。我们可以通过 ` ubuntu:14.04 ` ,或者 ` ubuntu:16.04 ` 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ` ubuntu ` ,那将视为 ` ubuntu:latest ` 。
1010
Original file line number Diff line number Diff line change @@ -164,7 +164,7 @@ Sending build context to Docker daemon 2.048 kB
164164
165165理解构建上下文对于镜像构建是很重要的,避免犯一些不应该的错误。比如有些初学者在发现 ` COPY /opt/xxxx /app ` 不工作后,于是干脆将 ` Dockerfile ` 放到了硬盘根目录去构建,结果发现 ` docker build ` 执行后,在发送一个几十 GB 的东西,极为缓慢而且很容易构建失败。那是因为这种做法是在让 ` docker build ` 打包整个硬盘,这显然是使用错误。
166166
167- 一般来说,应该会将 ` Dockerfile ` 至于一个空目录下 ,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 ` .gitignore ` 一样的语法写一个 ` .dockerignore ` ,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
167+ 一般来说,应该会将 ` Dockerfile ` 置于一个空目录下 ,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 ` .gitignore ` 一样的语法写一个 ` .dockerignore ` ,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
168168
169169那么为什么会有人误以为 ` . ` 是指定 ` Dockerfile ` 所在目录呢?这是因为在默认情况下,如果不额外指定 ` Dockerfile ` 的话,会将上下文目录下的名为 ` Dockerfile ` 的文件作为 Dockerfile。
170170
Original file line number Diff line number Diff line change 22
33格式:` ARG <参数名>[=<默认值>] `
44
5- 构建参数和 ` ENV ` 的效果一样,都是设置环境变量。所不同的是,` ARG ` 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就是用 ` ARG ` 保存密码之类的信息,因为 ` docker history ` 还是可以看到所有值的。
5+ 构建参数和 ` ENV ` 的效果一样,都是设置环境变量。所不同的是,` ARG ` 所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。但是不要因此就使用 ` ARG ` 保存密码之类的信息,因为 ` docker history ` 还是可以看到所有值的。
66
77` Dockerfile ` 中的 ` ARG ` 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令 ` docker build ` 中用 ` --build-arg <参数名>=<值> ` 来覆盖。
88
Original file line number Diff line number Diff line change @@ -38,7 +38,7 @@ $ docker run myip -i
3838docker: Error response from daemon: invalid header field value " oci runtime error: container_linux.go:247: starting container process caused \" exec: \\\" -i\\\" : executable file not found in $PATH \" \n" .
3939```
4040
41- 我们可以看到可执行文件找不到的报错,` executable file not found ` 。之前我们说过,跟在镜像名后面的是 ` command ` ,运行时会替换 ` CMD ` 的默认值。因此这里的 ` -i ` 替换了远了的 ` CMD ` ,而不是添加在原来的 ` curl -s http://ip.cn ` 后面。而 ` -i ` 根本不是命令,所以自然找不到。
41+ 我们可以看到可执行文件找不到的报错,` executable file not found ` 。之前我们说过,跟在镜像名后面的是 ` command ` ,运行时会替换 ` CMD ` 的默认值。因此这里的 ` -i ` 替换了原来的 ` CMD ` ,而不是添加在原来的 ` curl -s http://ip.cn ` 后面。而 ` -i ` 根本不是命令,所以自然找不到。
4242
4343那么如果我们希望加入 ` -i ` 这参数,我们就必须重新完整的输入这个命令:
4444
Original file line number Diff line number Diff line change @@ -38,7 +38,7 @@ f477a6e18e98 About a minute ago 214.9 MB
3838
3939### ` docker save ` 和 ` docker load `
4040
41- Docker 还提供了 ` docker load ` 和 ` docker save ` 命令,用以将镜像保存为一个 ` tar ` 文件,然后传输到另一个位置上,在加载进来 。这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使用 Docker Registry,无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。
41+ Docker 还提供了 ` docker load ` 和 ` docker save ` 命令,用以将镜像保存为一个 ` tar ` 文件,然后传输到另一个位置上,再加载进来 。这是在没有 Docker Registry 时的做法,现在已经不推荐,镜像迁移应该直接使用 Docker Registry,无论是直接使用 Docker Hub 还是使用内网私有 Registry 都可以。
4242
4343#### 保存镜像
4444
You can’t perform that action at this time.
0 commit comments