如何在图像构建之后/之后自动运行docker容器?

Jac*_*ack 3 tomcat docker dockerfile

我是码头工的新手,如果我错过了一些明显的东西,那就很抱歉

我对Dockerfile的计划.

  1. 拉tomcat:7.0
  2. 启动服务器
  3. 下载帮助文件并解压缩.
  4. 下载所需的war文件并将其重命名为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://***"
Run Code Online (Sandbox Code Playgroud)

虽然我不确定如何从之前运行docker line docker run -it --rm -p 8888:8080 tomcat:8.0

我已经采取了该行从官网上的Tomcat 这里.我注意到他们提到了这一点,Run the default Tomcat server (CMD ["catalina.sh", "run"]):但我不知道如何实现这一点.

Sob*_*que 8

Dockerfile的作用是创建一个图像而不是一个容器.

当你这样做时docker build -t <tagname> .,如果你跑,你会看到结果(标记)docker images.

然后,您可以运行该图像以创建容器.

您还可以在中指定CMD要运行(默认情况下)Dockerfile.那就是(我认为)

CMD [ "catalina.sh", "run" ] 
Run Code Online (Sandbox Code Playgroud)

所以:

docker build -t my_tomcat_app .
docker run -d -p 8888:8080 --name my_tomcat_container my_tomcat_app
Run Code Online (Sandbox Code Playgroud)

这将从您的图像创建一个容器,并运行任何说明CMD.你可以在里面偷看docker exec

docker exec -it my_tomcat_container bash
Run Code Online (Sandbox Code Playgroud)

但它会保持运行(因为-d旗帜)并出现在docker ps.