Как я могу автоматически запустить Docker-контейнер во время / после сборки образа?

Я новичок в докере, так что извините, если я пропустил что-то очевидное

Мой план для Dockerfile.

  1. Потяните кота:7.0
  2. Запустить сервер
  3. Загрузите вспомогательные файлы и разархивируйте их.
  4. Загрузите требуемый файл войны и переименуйте его в ROOT.war.

Мне удалось сделать это, выполнив эти команды вручную.

docker run -it --rm -p 8888:8080 tomcat:8.0

Затем вручную сделать wgetи переименование, хотя я хотел бы, чтобы все это было сделано в файле Docker.

Это то, что мне удалось сделать до сих пор.

FROM tomcat:7.0

RUN /bin/bash -c "cd /usr/local/tomcat/webapps"


RUN /bin/bash -c "wget -O files.zip https://***"
RUN /bin/bash -c "unzip files.zip"

RUN /bin/bash -c "rm -r ROOT"
RUN /bin/bash -c "wget -O ROOT.war https://***"

Хотя я не уверен, как запустить Docker Line из ранее docker run -it --rm -p 8888:8080 tomcat:8.0

Я взял эту строку от официального Tomcat онлайн здесь. Я заметил, что они упомянули это Run the default Tomcat server (CMD ["catalina.sh", "run"]): но я понятия не имею, как это реализовать.

1 ответ

Решение

Что делает Dockerfile, так это создает изображение, а не контейнер.

Когда вы делаете docker build -t <tagname> . и увидим результат (с тегом), если вы запустите docker images,

Затем вы можете запустить это изображение, чтобы создать контейнер.

Вы также можете указать CMD запустить (по умолчанию) в Dockerfile, Это было бы (я думаю)

CMD [ "catalina.sh", "run" ] 

Так:

docker build -t my_tomcat_app .
docker run -d -p 8888:8080 --name my_tomcat_container my_tomcat_app

Это создаст контейнер из вашего изображения и запустит любой CMD сказал. Вы можете покопаться в нем с docker exec

docker exec -it my_tomcat_container bash

Но он будет работать (из-за -d флаг) и появиться в docker ps,

Другие вопросы по тегам