一、概述
Docker 镜像包含一组顺序指令,用作构建容器的模板。在本教程中,我们将学习如何在构建Docker 镜像或使用镜像运行容器时更改目录。
2.使用WORKDIR
指令
首先,让我们从使用现成的ubuntu:latest
映像生成Docker 容器开始:
$ docker run -it ubuntu:latest [email protected]:/# pwd /
我们可以看到,容器一启动,当前目录就设置为/.
接下来,假设我们要在容器启动时将此目录更改为/tmp
。我们可以通过在使用ubuntu:latest
作为基础镜像的自定义镜像中使用WORKDIR
指令来做到这一点:
$ cat custom-ubuntu-v1.dockerfile FROM ubuntu:latest WORKDIR /tmp
在我们可以使用这个镜像运行一个容器之前,我们需要构建这个镜像。因此,让我们继续构建custom-ubuntu:v1
映像:
$ docker build -t custom-ubuntu:v1 - < ./custom-ubuntu-v1.dockerfile
最后,让我们使用custom-ubuntu:v1
镜像运行一个容器并验证当前目录:
$ docker run -it custom-ubuntu:v1 [email protected]:/tmp# pwd /tmp
看起来我们做对了!
3. 使用–workdir
选项
对于大多数我们想要在构建Docker 映像时更改目录的情况,建议使用WORKDIR
指令。然而,如果我们的用例仅限于在运行容器时更改目录,那么我们可以通过使用–workdir
选项来实现:
$ docker run --workdir /tmp -it ubuntu:latest [email protected]:/tmp# pwd /tmp
看看这个,我们可以欣赏到命令的简洁性以及在这种情况下我们不必创建自定义图像这一事实。
4. 使用cd
命令
在Linux 中,cd
命令是大多数用例更改目录的标准方法。同样,当使用一些docker 指令(例如RUN
、CMD
和ENTRYPOINT
)时,我们可以使用cd
命令在上下文中更改当前命令的目录。
让我们首先编写custom-ubuntu-v2.dockerfile
以使用RUN
指令和cd
命令:
FROM ubuntu:latest RUN cd /tmp && echo "sample text" > data.txt
我们可以看到其意图是将“示例文本”写入/tmp/data.txt
文件。
接下来,让我们添加ENTRYPOINT
指令以在容器启动时将bash
作为默认命令运行。此外,我们使用cd
命令将当前目录更改为/tmp
目录:
ENTRYPOINT ["sh", "-c", "cd /tmp && bash"]
继续,让我们构建自定义图像:
$ docker build -t custom-ubuntu:v2 - < ./custom-ubuntu-v2.dockerfile
最后,让我们使用custom-ubuntu:v2
镜像运行容器并验证命令的执行:
$ docker run -it custom-ubuntu:v2 [email protected]:/tmp# pwd /tmp [email protected]:/tmp# cat /tmp/data.txt random text
我们可以看到两个更改目录命令的结果都符合预期。此外,我们必须记住WORKDIR
仍然是推荐的方式。不过,对于简单的用例,我们可以将cd
命令与RUN
、ENTRYPOINT
或CMD
指令结合使用。
5. 结论
在本文中,我们学习了在使用Docker 映像或启动容器时更改目录的不同方法。
0 评论