交替使用“ docker”和“ docker-compose”命令会有什么后果?

时间:2019-12-03 16:00:58

标签: docker docker-compose

我有几个容器,每个容器在一个docker-compose-<service>.yaml文件中都有描述,我以

开头
docker-compose -f docker-compose-<service>.yaml up -d

然后我通过docker ps看到容器正在运行。

我希望我可以通过以下方式停止该容器

docker-compose -f docker-compose-<service>.yaml down

但是容器没有停止。也不是在上面用stop代替down时使用逗号。

执行docker kill <service>会停止容器。

我的问题:由于我所有以docker-compose开头的服务实际上是每个docker-compose-<service>.yaml文件的一个容器,我可以使用裸docker命令停止它吗?

或更笼统地说:docker-compose是简单的基础docker命令的帮助者,这意味着使用docker总是安全的吗(从“使用不同命令的一致性”的角度来看)?

1 个答案:

答案 0 :(得分:0)

我的问题:由于我所有以docker-compose开头的服务实际上都是每个docker-compose-.yaml文件的一个容器,因此我可以使用裸docker命令停止它吗?

实际上docker-compose使用的是docker引擎,您可以在本地尝试:

例如:docker-compose.yaml:

version: "3"
services:
  # Database
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '9090:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: wordpress
    networks:
      - wpsite
networks:
  wpsite:

enter image description here 现在,您可以根据需要通过docker引擎与他们互动: enter image description here

更全局地说,docker-compose是一种编排器(我更喜欢composer的术语),如果您需要定义彼此依赖的容器堆栈(例如之前的示例phpmyadmin / mysql),则可以在dev中进行测试环境。我认为要在生产环境中具有更好的容器堆栈的弹性,高可用性,服务管理...,您强烈需要考虑实施真正的编排器,例如docker-swarm,kubernetes,openshift...。 以下是一些说明差异的文档:https://linuxhint.com/docker_compose_vs_docker_swarm/

您还可以看到:What is the difference between `docker-compose build` and `docker build`?