如何在docker-compose中定义docker cli服务

时间:2019-03-18 10:30:19

标签: docker docker-compose

我有一个运行一些服务的docker-compose文件。

<!DOCTYPE HTML>
<html>
<body>
  <canvas id="myCanvas" width="800" height="600" style="border:1px solid #c3c3c3;"></canvas>
</body>
</html>

我想添加另一个服务,该服务将是一个容器,可以在其中运行CLI命令(作曲家,drupal的drush,php等)。

以下Dockerfile是我最初定义cli服务的方式,但是它在运行后立即停止。如何定义它,使其成为docker-compose的一部分,共享安装的卷,并且可以交互地连接到它并在其上运行CLI命令?

services:

  cli:
    build:
      context: .
      dockerfile: docker/cli/Dockerfile

    volumes:
      - ./drupal8site:/var/www/html/drupal8site


  drupal:
    container_name: drupal
    build:
      context: .
      dockerfile: docker/DockerFile.drupal
      args:
        DOC_ROOT: /var/www/html/drupal8site
    ports:
      - 80:80
    volumes:
      - ./drupal8site:/var/www/html/drupal8site
    restart: always
    environment:
      APACHE_DOCUMENT_ROOT: /var/www/html/drupal8site/web    

  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root

谢谢, 雅伦

1 个答案:

答案 0 :(得分:1)

如果要在docker映像上运行自动化脚本,这显然是ci管道的工作。您可以使用CloudFoundry或OpenStack来做到这一点。

但是这篇文章还有很多其他问题:

1。)我如何共享已安装的卷:

您可以将带有-v选项的卷传递到容器。例如:

docker run -it -d -v $(pwd)/localFolder:/exposedFolderFromDocker mydockerhub/myawesomeimage

2。)我可以以交互方式连接到它并在其上运行CLI命令

docker exec -it docker_cli_1 bash

我建议将docker-image的功能实现到各个docker-images Dockerfile。例如,复制并运行准备好的shell脚本:

# your Dockerfile
FROM php:7.2-cli

#various programs
RUN apt-get update \
    && apt-get install vim --assume-yes \
    && apt-get install git --assume-yes \
    && apt-get install mysql-client --assume-yes

# individual changes
    COPY your_script.sh /
    RUN  chown root:root /your_script.sh && \
         chmod 0755 /your_script.sh
    CMD ["/your_script.sh"]

# a folder to expose
VOLUME /exposedFolderFromDocker

CMD ["bash"]