赞
踩
官网地址:http://hub.docker.com
我打不开官网,用了这个:
- #请把DokcerFile 放至helloworld同级目录
- #来源的基础镜像,这里不需要单独FROM JDK,因为maven镜像里面附带了JDK
- FROM maven:alpine
- #作者
- LABEL authors="shuizhu"
-
- #指定环境变量url为/usr/helloworld
- ENV url /usr/helloworld
-
- #指定容器的工作目录
- WORKDIR ${url}
-
- #复制helloworld下的所有文件到镜像中的/usr/helloworld目录中
- COPY helloworld /usr/helloworld
-
- #把maven镜像中的maven配置文件settings.xml,替换为自己的settings.xml,为了加快下载
- COPY helloworld/settings.xml /usr/share/maven/conf/settings.xml
-
- #MVN 打包
- RUN ["mvn","package"]
-
- #执行java -jar启动命令
- ENTRYPOINT ["java", "-jar","target/helloworld-0.0.1-SNAPSHOT.jar"]
1> dockerfile存在多个CMD或ENTRYPOINT时,只会执行最后一个CMD或ENTRYPOINT
2> RUN可以存在多个,且都会执行
3> 当CMD与ENTRYPOINT共存时,CMD会当做参数,传递给ENTRYPOINT(相当于字符串,拼接到ENTRYPOINT后),因此,不需要变动的参数我们一般写到ENTRYPOINT中,需要变动的参数一般写到CMD中,传递给ENTRYPOINT
4> 当docker run时附带有启动参数,那么CMD不会执行,且启动参数会附带在ENTRYPOINT后面
5> 三种语法相同:
把项目文件helloworld上传到服务器任意目录
网上的教程都是直接上传jar文件的,Dockerfile里面直接去执行jar即可
我这需要对springboot项目进行打包,再运行,这个操作都是在docker容器中进行的,而Dockerfile在项目中,而我没办法在dockerfile COPY时去操作上层目录helloworld,因此我在构建镜像前,把Dockerfile移到helloworld同一目录。
如下:
在Dockerfile目录中,执行:
docker build -t mydemo:v1.0 .
-t:tag标签,对构建的镜像打标签,格式:镜像名称:版本
ps:RUN ["mvn" , "package"]:RUN是在镜像构建时执行的,因此在构建时,package动作会很久,正常的云环境中,这一步骤一般是交给jenkins实现的
构建用了201s,大部分时间花费在maven打包上,而且这还是在使用阿里maven仓库的基础上.....
docker images
docker run -d -p 8080:8080 --name helloworld mydemo:v1.0
-d:后台运行
-p 8080:8080:docker容器中的8080端口与宿主机的8080端口映射
--name helloworld:给启动的镜像容器命名为helloworld
mydemo:v1.0:需要启动的镜像是哪个
执行后,使用 docker ps 查看正在运行的容器
docker logs helloworld
得知:镜像启动时(docker run),执行了Dockerfile中的ENTRYPOINT命令,去启动了springboot项目
如下:
访问成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。