1, 下载安装 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 属性节点加入:
- <!--properties 节点中设置 docker 镜像的前缀 "springboot"-->
- <docker.image.prefix>
- springio
- </docker.image.prefix>
build 节点修改为
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- <!-- Docker maven plugin -->
- <plugin>
- <!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>1.2.0</version>
- <configuration>
- <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
- <dockerDirectory>src/main/docker</dockerDirectory>
- <resources>
- <resource>
- <targetPath>/</targetPath>
- <directory>${project.build.directory}</directory>
- <include>${project.build.finalName}.war</include>
- </resource>
- </resources>
- </configuration>
- </plugin>
- <!-- Docker maven plugin -->
- </plugins>
- </build>
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