我开始学习码头工人。我只是不明白一件事。 docker是否可能执行2个命令?
我的docker容器从我的卷中获取文件并启动我的应用程序。我的容器可能会挂载一个目录,然后执行npm install,最后它会执行我的脚本吗?
现在我需要在我的mouned目录中拥有所有节点模块。这意味着我的解决方案毫无意义。如果任何人克隆git存储库,则没有node_modules。我希望所有节点模块都安装在我的容器中:(
我的码头文件:
FROM node:slim
RUN npm install -g nodemon@1.14.7
COPY package.json /skill/package.json
WORKDIR /skill/
RUN npm install
WORKDIR /skill/dist/app/
EXPOSE 8000
EXPOSE 27017
ENTRYPOINT ["nodemon"]
我的码头命令:
sudo docker run -v /home/alexa/Desktop/Template/Alexa_universal_skill_template:/skill -it --network myNetwork --name alexa alexa
答案 0 :(得分:1)
你可以写一个运行初始化的bash脚本,类似于这个:
#!/bin/sh
cd /skill/dist/app/
npm install
nodemon
我们称之为entrypoint.sh
然后,编辑您的Dockerfile如下所示:
FROM node:slim
RUN npm install -g nodemon@1.14.7
COPY package.json /skill/package.json
WORKDIR /skill/
RUN npm install
WORKDIR /skill/dist/app/
EXPOSE 8000
EXPOSE 27017
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
答案 1 :(得分:0)
如果您想分发包含应用程序的图像,则必须构建并标记泊坞窗图像,然后将其推送到注册表。
# dont miss the dot on the end, or the name of the directory of your app
docker build -f Dockerfile -t mynodeapp:latest .
# after the above command, you'll get an image with a new tag and your commands executed
# use the following commands to push an image to a registry
docker tag mynodeapp:latest registry/mynodeapp:latest
docker push registry/mynodeapp:latest