我是docker的新手,正在尝试了解最适合我的项目(一个Web应用程序)的东西。
到目前为止,我知道我可以:
docker-compose up -d
启动由docker-compose.yaml
中的一组规则定义的容器如果我理解正确,docker-compose up -d
允许我(通过volumes
)将文件(例如我的应用程序)装载到容器中。但是,如果我构建映像,则可以将应用程序本机嵌入其中(使用Dockerfile
和COPY
指令)。
我的理解正确吗?我应该如何选择这两个选择?
答案 0 :(得分:3)
Docker Compose只是docker
命令周围的便利包装。
在docker compose中可以做的所有事情,都可以在运行docker时简单地做。
例如,这些docker命令:
$ docker build -t temp .
$ docker run -i -p 3000:80 -v $PWD/public:/docroot/ temp
与使该docker组成文件类似:
version: '3'
services:
web:
build: .
image: temp
ports: ["3000:80"]
volumes:
- ./public:/docroot
并运行:
$ docker-compose up web
尽管在使用多个容器时docker compose优势最为明显,但它也可以用于启动单个容器。
我对您的建议是:在没有docker compose的情况下开始,以了解如何构建简单映像以及如何使用docker
命令行运行它。当您感到满意时,看看docker compose。
关于将文件复制到容器或安装文件的最佳做法-答案是两者,这就是原因:
处于开发模式时,您不想在每次代码更改时都构建映像。这是卷装入起作用的地方。但是,最终的Docker映像应包含您的代码,以便可以将其部署到其他任何地方。毕竟,这就是为什么我们使用容器对吗?这就是COPY
发挥作用的地方。
最后,请记住,将卷装载到容器时,它将“隐藏”容器中该文件夹的内容-这就是使用mount和COPY
的实际工作方式,正如您期望的那样
答案 1 :(得分:1)
Docker-compose只是一个容器编排器。 我只是为您提供一种创建多个相关容器的简单方法。容器之间的关系可以是卷,网络,开始顺序,环境变量等。
在后台,docker-compose使用普通docker。因此,您可以使用docker-compose做任何事情(安装卷,使用自定义网络,缩放),都可以使用docker命令来完成(但当然更难)。