第三十七章 springboot+docker(使用docker以容器方式启动服务)
Posted 赵计刚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三十七章 springboot+docker(使用docker以容器方式启动服务)相关的知识,希望对你有一定的参考价值。
一、下载centos镜像
- docker pull hub.c.163.com/library/centos:latest
- docker tag containId centos:7
- docker run -i -t -v /Users/enniu1/Desktop/docker-data/software:/mnt/software centos:7
- -i:以"交互模式"运行容器
- -t:表示容器启动后会进入其命令行
- -v:数据卷,这里将宿主机的/Users/enniu1/Desktop/docker-data/software目录(宿主机存放软件目录)挂载到容器的/mnt/software目录(容器存放软件目录)
- 这里是为了让容器直接共享宿主机的/Users/enniu1/Desktop/docker-data/software目录下的软件
二、宿主机下载jdk之后移动到/Users/enniu1/Desktop/docker-data/software
三、容器内解压jdk
- cd /opt
- tar -zxf /mnt/software/jdk-8u102-linux-x64.tar.gz -C .
- 将/mnt/software/jdk-8u102-linux-x64.tar.gz(直接共享的宿主机的挂载目录)解压到当前目录
四、设置环境变量
- vi ~/.bashrc,添加如下两句
- export JAVA_HOME=/opt/jdk
- export PATH=$PATH:$JAVA_HOME/bin
- source ~/.bashrc
- 使文件生效
- java -version进行测试
五、创建自己的镜像:zjg/jdk8:v1.0(第一种创建镜像的方式)
- exit退出容器
- docker commit 86e6187ea166 -m"install jdk8 to centos7" zjg/jdk8:v1.0
- 86e6187ea166:原本的centos的容器id
- zjg/jdk8:v1.0:镜像名与tag
- 86e6187ea166:原本的centos的容器id
六、编写代码并使用maven install为jar包,拷贝到与Dockerfile相同的包下
建立一个简单的springboot项目即可。
二者均在/Users/enniu1/Desktop/docker-data/file目录下
七、编写Dockfile文件
1 #first java application 2 3 FROM zjg/jdk8:v1.0 4 5 ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/ 6 7 ENV JAVA_HOME /opt/jdk 8 ENV PATH $PATH:$JAVA_HOME/bin 9 10 CMD ["java","-jar","/opt/jar/myservice1-docker-1.0-SNAPSHOT.jar"]
说明:
- #注释
- FROM zjg/jdk8:v1.0
- 基于哪个镜像进行创建
- ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/
- 将宿主机的myservice1-docker-1.0-SNAPSHOT.jar拷贝到容器的/opt/jar/目录下
- 注意:这里的myservice1-docker-1.0-SNAPSHOT.jar最好与Dockerfile在同一个文件夹下,否则可能有问题(使用绝对路径和相对Dockerfile的路径都有问题)
- 注意:/opt/jar/必须带有后边的"/"(目录),如果是/opt/jar这样的话,容器会创建一个jar文件而非目录
- 将宿主机的myservice1-docker-1.0-SNAPSHOT.jar拷贝到容器的/opt/jar/目录下
- ENV JAVA_HOME /opt/jdk
- ENV PATH $PATH:$JAVA_HOME/bin
- CMD ["java","-jar","/opt/jar/myservice1-docker-1.0-SNAPSHOT.jar"]
- 容器启动之后,执行"java -jar /opt/jar/myservice1-docker-1.0-SNAPSHOT.jar"
八、创建服务镜像(第二种创建镜像的方式)
- docker build -t="zjg/myservice1docker:v1.1" /Users/enniu1/Desktop/docker-data/file
- -t:指定镜像名与tag
- /Users/enniu1/Desktop/docker-data/file:dockerfile所在的目录
build日志如下:
1 Sending build context to Docker daemon 13.8 MB 2 Step 1 : FROM zjg/jdk8:v1.0 3 ---> e7b4cf41e531 4 Step 2 : ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/ 5 ---> ea8401c3ee2e 6 Removing intermediate container da2e0b518a1f 7 Step 3 : ENV JAVA_HOME /opt/jdk 8 ---> Running in db5d6bed3872 9 ---> 2c123cd7d20f 10 Removing intermediate container db5d6bed3872 11 Step 4 : ENV PATH $PATH:$JAVA_HOME/bin 12 ---> Running in 66bbcdf76dfb 13 ---> 38ce4cac8d38 14 Removing intermediate container 66bbcdf76dfb 15 Step 5 : CMD java -jar /opt/jar/myservice1-docker-1.0-SNAPSHOT.jar 16 ---> Running in 9359f360c777 17 ---> 1bbfc1635a71 18 Removing intermediate container 9359f360c777 19 Successfully built 1bbfc1635a71
每一个step都会创建一层镜像,以上就会创建五层镜像,在删除镜像的时候就会看出,会删除五层镜像。
- docker images
九、启动测试
- docker run -d -p 8014:8080 1bbfc1635a71
- 浏览器访问:localhost:8014/docker/hello(自己springboot项目中的一个controller路径)
以上是关于第三十七章 springboot+docker(使用docker以容器方式启动服务)的主要内容,如果未能解决你的问题,请参考以下文章
第十七章 springboot + devtools(热部署)