1,下载安装 docker toolbox
下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
docker toolbox 是一个工具集,它主要包含以下一些内容:
复制代码
Docker CLI 客户端,用来运行docker引擎创建镜像和容器
Docker Machine. 可以让你在windows的命令行中运行docker引擎命令
Docker Compose. 用来运行docker-compose命令
Kitematic. 这是Docker的GUI版本
Docker QuickStart shell. 这是一个已经配置好Docker的命令行环境
Oracle VM Virtualbox. 虚拟机
复制代码
下载完成之后直接点击安装,安装成功后,桌边会出现三个图标,入下图所示:
点击 Docker QuickStart 图标来启动 Docker Toolbox 终端。
2,新建一个springboot项目
添加一个默认的controller
复制代码
@RestController
public class DefaultController {
@RequestMapping("/")
public String home() {
return "Hello Docker World ";
}
}
复制代码
启动这个项目检查是否在我docker情况下正常访问
3,修改pox.xml改为docker编译
properties属性节点加入:
复制代码
springio
复制代码
build节点修改为
复制代码
org.springframework.boot
spring-boot-maven-plugin
com.spotify
docker-maven-plugin
1.2.0
${docker.image.prefix}/${project.artifactId}
src/main/docker
/
${project.build.directory}
${project.build.finalName}.war
复制代码
4,添加DockerFile
目录结构
文件内容
复制代码
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD demo-docker-0.0.1-SNAPSHOT.war app.war
RUN sh -c 'touch /app.war'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.war" ]
复制代码
解释下这个配置文件:
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 "app.war" 添加到容器的
ENTRYPOINT 执行项目 app.war。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source
5,添加maven编辑命令进行编辑
mvn package docker:build
点击execute开始执行编译成docker image,正常情况下,会看到下面的步骤信息
复制代码
[INFO] Building image springio/demo-docker
Step 1/6 : FROM openjdk:8-jdk-alpine
---> 2cfb1dc1f0c8
Step 2/6 : VOLUME /tmp
---> Using cache
---> 0641ab6474fc
Step 3/6 : ADD demo-docker-0.0.1-SNAPSHOT.war app.war
---> c01da61fbe6d
Step 4/6 : RUN sh -c 'touch /app.war'
---> Running in c8946506f292
Removing intermediate container c8946506f292
---> 12383d2f8329
Step 5/6 : ENV JAVA_OPTS=""
---> Running in 07d5bebe9e00
Removing intermediate container 07d5bebe9e00
---> e8f8f4242553
Step 6/6 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.war" ]
---> Running in 39ce4bf989ba
Removing intermediate container 39ce4bf989ba
---> dca2a0984c5d
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built dca2a0984c5d
Successfully tagged springio/demo-docker:latest
[INFO] Built springio/demo-docker
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.386 s
[INFO] Finished at: 2019-01-23T16:56:36+08:00
[INFO] Final Memory: 57M/470M
[INFO] ------------------------------------------------------------------------
Process finished with exit code 0
复制代码
6, 运行项目
直接从"Oracle VM VirtualBox"界面进入default虚拟机,不需要输入密码即可进入root环境
输入下列命令查看已存在的image
docker images
得到结果
输入下面命令启动项目
docker run -p 8080:8080 -t springio/demo-docker
启动信息如下:
复制代码
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.1.RELEASE)
2019-01-23 09:02:49.987 INFO 1 --- [ main] c.e.demodocker.DemoDockerApplication : Starting DemoDockerApplication v0.0.1-SNAPSHOT on 740b53e853e9 with PID 1 (/app.war started by root in /)
2019-01-23 09:02:50.001 INFO 1 --- [ main] c.e.demodocker.DemoDockerApplication : No active profile set, falling back to default profiles: default
2019-01-23 09:02:53.582 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-01-23 09:02:53.685 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-01-23 09:02:53.692 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/9.0.13
2019-01-23 09:02:53.722 INFO 1 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
2019-01-23 09:02:54.560 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-01-23 09:02:54.561 INFO 1 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4389 ms
2019-01-23 09:02:55.178 INFO 1 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-01-23 09:02:55.671 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-01-23 09:02:55.681 INFO 1 --- [ main] c.e.demodocker.DemoDockerApplication : Started DemoDockerApplication in 6.796 seconds (JVM running for 7.909)
复制代码
使用docker ps查看已运行的容器进程
表格字段说明
复制代码
CONTAINER_ID 表示容器ID
IMAGE 表示镜像名称
COMMAND 表示启动容器时运行的命令
CREATED 表示容器的创建时间
STATUS 表示容器运行的状态。UP表示运行中,EXITED表示已停止
PORTS 表示容器对外的端口号
NAMES 表示容器名称,该名称默认由Docker自动生成,也可使用docker run 命令的 -name 选项自行指定
复制代码
几个docker命令
复制代码
docker start [CONTAINER_ID] :启动一个或多个已经被停止的容器
docker stop [CONTAINER_ID] :停止一个运行中的容器
docker restart [CONTAINER_ID]:重启容器
复制代码
7,测试:
访问你虚拟就ip地址+启动时指定的端口号访问spring boot项目
可以在虚拟机中通过 ifconfig查看
输入ifconfig命令可以看到default有三个网段的IP地址,分别为:
复制代码
docker0: 172.17.0.1,这个是docker的网桥。
eth0:10.0.2.15,这个网段在Ubuntu环境中是没有的,暂不知道为什么会多这一个。
eth1:192.168.99.100,这个数宿主机的IP地址。
复制代码
另外也可以在本地cmd中,使用 docker-machine env 或 docker info 查看docker环境https://www.cnblogs.com/ejiyuan/p/10310207.html