Docker: Dockerfile与docker-compose.yml的区别

8

我有一个如下的Dockerfile

FROM docker/whalesay:latest
RUN apt-get update && apt-get install -y fortunes
CMD while true; do /usr/games/fortune -a | cowsay; sleep 2; done

我已经构建了上述的Dockerfile作为镜像:docker-whale
我想要为上述镜像编写一个docker-compose.yml。我的理解是,你可以使用docker-compose运行多个容器。
如果我想运行5个docker-whale镜像,docker-compose.yml应该长什么样呢?
4个回答

18

你可以把这个 docker-compose.yaml 文件放在你的 Dockerfile 旁边:

version: '2'
services:
  docker-whale:
    image: docker-whale
    build: .

接着执行以下命令:

# build docker image
docker-compose build

# bring up one docker container
docker-compose up -d

# scale up to three containers
docker-compose scale docker-whale=3

# overview about these containers
docker-compose ps

# view combined logs of all containers
# use <ctrl-c> to stop viewing
docker-compose logs --follow

# take down all containers
docker-compose down

5
version:"3" 
services: docker-whale: 
   image:docker-whale 
   deploy: 
     replicas:5
     resources:
      limits: 
        cpus:"0.1"
        memory: 50M
     restart_policy: 
        condition: on-failure
  ports: "80:80" 

以下是您的docker-compose.yml应该的样子。这个docker-compose.yml告诉Docker做以下的事情:
  1. 拉取你在之前步骤中构建的docker-wale镜像。
  2. 作为一个名为docker-whale的服务运行五个该镜像实例,限制每个实例使用最多10%的CPU(跨所有核心)和50MB的RAM。
  3. 如果其中之一失败,立即重新启动容器。
  4. 将主机的端口80映射到docker-whale的端口80......
参考:https://docs.docker.com/get-started/part3/#docker-composeyml 希望这有所帮助。

2

我猜你想运行5个docker-whale容器而不是5个镜像。

在你的情况下,compose.yml文件中不会有关于容器数量的信息。你需要使用scale命令。

docker-compose scale <service-name>=5

-1

docker-compose.yml

docker-whale:
  image: docker-whale

然后在同一文件夹中运行:

docker-compose up -d
docker-compose scale docker-whale=5

假设您的应用程序是可扩展的,但您仍然可以在docker-compose.yml中编写5个条目,这是screwdriver,但有时很有用:

docker-whale-1:
  image: docker-whale

docker-whale-2:
  image: docker-whale

docker-whale-3:
  image: docker-whale

docker-whale-4:
  image: docker-whale

docker-whale-5:
  image: docker-whale

1
@atv,你能否解释一下这个有什么问题? - webwurst
1
请查看被接受的答案。应该使用scale命令来生成多个实例。 - atv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接