Как я могу автоматически запустить Docker-контейнер во время / после сборки образа?
Я новичок в докере, так что извините, если я пропустил что-то очевидное
Мой план для Dockerfile.
- Потяните кота:7.0
- Запустить сервер
- Загрузите вспомогательные файлы и разархивируйте их.
- Загрузите требуемый файл войны и переименуйте его в 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
,