Dockerizing приложение командной строки - PullRequest
0 голосов
/ 16 октября 2019

Я создал приложение командной строки с использованием symfony 3.4, которому не нужно отображать какие-либо веб-страницы.

Обычно я запускаю команды следующим образом:

php bin/console MY_COMMAND_NAME

Я хочуDockerize приложение и поделиться им с другими, поэтому внутри корневого каталога моего проекта я создал файл docker-compose.yml , который выглядит следующим образом:

version: "3.3"
services:
    web:
        image: php:7.3-cli

Затем я запустилdocker-compose, после этого я проверил версию PHP с помощью следующей команды, и она показала мою правильную версию:

docker run php:7.3-cli php -v

Однако, когда я запустил docker ps , он не сталt показать любой запущенный контейнер.

Мой вопрос заключается в том, как выполнить команды внутри корневого каталога моего проекта. К вашему сведению, я использую Docker Toolbox в Windows 10 Home Edition, и мое местоположение проекта:

C:\Users\{my_user_name}\Desktop\folder_1\folder_2

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Быстрое и грязное исправление, позволяющее поддерживать работоспособность вашего контейнера, просто переопределите команду контейнера в docker-compose.

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: tail -f /dev/null

, когда вы запустите docker-compose up, он сохранит контейнер докера, но ничего не сделает,просто выдаст команду run внутри контейнера .

docker exec -it php-cli_web_1 ash

Мой вопрос заключается в том, как выполнить команды в корневом каталоге моего проекта.

Как уже упоминалось @David, вам нужно смонтировать ваш хост-проект в контейнер в docker-compose.

Например,

ваш проект размещен на хосте /home/myporject, смонтировать проектв docker-compose, и он будет доступен внутри контейнера. затем вы можете обновить команду вашего docker-compose для запуска сценария.

имейте в виду

Жизнь контейнера - это жизнь команды docker-compose

Когда выполнение завершится, ваш контейнер умрет после выполнения. поэтому ваш контейнер будет работать до тех пор, пока не будет завершен php:7.3-cli /app/your_script.php этот скрипт.

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: php:7.3-cli /app/your_script.php
    volumes:
      - /home/myporject:/app
0 голосов
/ 16 октября 2019

В док-контейнере должен быть запущен длительный процесс, определенный в CMD . php-cli это не то. Если вы запустите composer up, вы увидите что-то вроде этого:

$ docker-compose up

Creating network "tempphpdocker_default" with the default driver
Pulling web (php:7.3-cli)...
7.3-cli: Pulling from library/php
b8f262c62ec6: Pull complete
a98660e7def6: Pull complete
4d75689ceb37: Pull complete
639eb0368afa: Pull complete
2cdbfdb779b1: Pull complete
e0b637fa9606: Pull complete
da7333b0ef25: Pull complete
01d65ff46009: Pull complete
673e50bed3b9: Pull complete
bf6c6e34305d: Pull complete
Digest: sha256:1453f5ef0d4d1d424ed8114dd90a775bdec06cc6fb3bbae9521dcb4ca0c8ca90
Status: Downloaded newer image for php:7.3-cli
Creating tempphpdocker_web_1 ... 
Creating tempphpdocker_web_1 ... done
Attaching to tempphpdocker_web_1
web_1  | Interactive shell
web_1  | 
tempphpdocker_web_1 exited with code 0

Код выхода равен 0. Это означает, что ваша команда в образе докера php:7.3-cli успешно запущена и завершена.

Чтобы правильно докеризовать ваше приложение, вы должны переопределить это, записав свой собственный файл докера с соответствующими COPY вызовами, которые связывают вашу CLI-программу с ним. Ваш Dockerfile, вероятно, должен выглядеть примерно так:

FROM php:7.3-cli

RUN mkdir -p /opt/workdir/bin
RUN mkdir -p /opt/workdir/vendor

COPY bin/ /opt/workdir/bin
COPY vendor/ /opt/workdir/vendor

WORKDIR /opt/workdir
CMD php ./bin/console COMMAND

Вы можете просто собрать и запустить этот Dockerfile, или, если вы предпочитаете docker-compose, вы можете определить docker-compose.yml в той же папкекак Dockerfile:

version: "3.3"
services:
    web:
        image: php-custom
        build: ./

Обратите внимание, что докеризованное приложение может получить доступ только к файлам и папкам в образе докера. Вы должны привязать тома вашей локальной файловой системы к контейнеру, прежде чем он действительно сможет работать в вашей файловой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...