docker + springboot 初步使用

安装:

win7 win8->http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/

其他安装方式:https://www.runoob.com/docker/windows-docker-install.html

安装比较简单,双击运行,点下一步即可,可以勾选自己需要的组件:

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 终端。

如果系统显示 User Account Control 窗口来运行 VirtualBox 修改你的电脑,选择 Yes。

 如果提示:looks like something went wrong in step....

这里提供一下解决方案:

https://blog.csdn.net/puss0/article/details/94437525(重启)

https://www.cnblogs.com/ecology-lee/p/10017992.html(改为绝对路径)

 在命令行中输入:

docker run hello-world
$ docker run hello-world
 Unable to find image 'hello-world:latest' locally
 Pulling repository hello-world
 91c95931e552: Download complete
 a8219747be10: Download complete
 Status: Downloaded newer image for hello-world:latest
 Hello from Docker.
 This message shows that your installation appears to be working correctly.

 To generate this message, Docker took the following steps:
  1. The Docker Engine CLI client contacted the Docker Engine daemon.
  2. The Docker Engine daemon pulled the "hello-world" image from the Docker Hub.
     (Assuming it was not already locally available.)
  3. The Docker Engine daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
  4. The Docker Engine daemon streamed that output to the Docker Engine CLI client, which sent it
     to your terminal.

 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash

 For more examples and ideas, visit:
  https://docs.docker.com/userguide/

会先去pull默认的hello-world镜像,然后运行。

结合springboot使用:

在路径下新建DockerFile

内容如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD castle-zuul-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

PS:第3行的“castle-zuul-1.0.0.jar”要按maven打包输出的文件实际修改

参数说明:

FROM:
    Docker是基于镜像的部署,幸运的是Docker官方和开发者们为我们维护了许多高质量的Docker镜像,而基于这些镜像我们能做出符合自己需求的镜像。此处的FROM意思为我们即将要创建的镜像的基础镜像的名字,这个名字可以是我们本地已有的镜像,也可以是Docker Hub上的镜像,如果是Docker Hub上的镜像,此时docker daemon会为我们自动下载该镜像。还有一个要注意的点,如果是本地镜像要加上版本(镜像名:版本号),否则默认版本号为latest。

VOLUME:

    Docker的运行相当于是操作系统的一个进程,但是该进程又与普通进程有些许不同,因为该进程内部维护着的是我们的一个微服务的完整结构,而往往项目中需要运行的微服务都有记录日志或者其他写出文件的功能。设想一下这样的情况:我们的微服务现在正在运行,但是访问量突然增大,开发人员又没有关注到这一点,没有进行水平扩展,这时候很有可能这个微服务就down了,而这个微服务一旦down了之后,出现的情况就是整个容器的status就变成了Exited,而此时如果将容器删除,容器中的所有数据卷会跟随容器一起删除,因为这些数据卷是临时的。此处的映射路径为/usr/test。这是我们自定义的映射路径,后续要演示记录日志的功能。当然也可以指定/tmp 其效果都是在主机的/var/lib/docker/volumes目录下创建一个临时文件,并链接到容器的链接路径。而为什么链接到容器的/tmp目录呢?因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录。当然此处的/tmp也可以变成你的日志记录文件夹,这样就可以在本地实时查看日志记录了。

ADD:

    将我们自身的项目admin.jar作为app.jar加入到容器中。

EXPORT:
    该命令用于声明在运行时容器提供服务的端口。注意:这只是一个声明,运行时并不会因为该声明就打开相应的端口。该指令的作用是帮助镜像使用者理解该镜像服务的守护端口;其次是当运行时使用随机映射时(即run命令的-P参数),会自动映射EXPORT的端口。

ENTRYPOINT:
    该命令制定Docker容器启动时执行的命令,可多次设置,但只有最后一条会生效。

    ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]这条命令中可能部分读者会对   -Djava.security.egd=file:/dev/./urandom   这条命令有疑惑,这是因为linux中和windows中取随机数时的参考策略不同,linux默认的随机数会被取完,导致返回-1.而制定/dev/./urandom这个取随机数的策略时,当随机数取完之后会返回伪随机数,不至于影响业务。

修改pom.xml:

 

<!-- Docker maven plugin -->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>1.0.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}.jar</include>
						</resource>
					</resources>
				</configuration>
			</plugin>

当然,参数也得加:

<docker.image.prefix>test</docker.image.prefix>

其他参数没得也加一下即可。

到文件目录(pom.xml同级目录)执行cmd:

mvn package -P dev-docker docker:build

打包完成:

查看镜像(docker image ls,其他命令自行百度):

运行:

docker run caslte/castle-zuul

也可以通过IMAGE ID运行 :

 

启动成功。

我这个是consul的一个模块,可以在服务中心看到:

遇到的其他问题:

docker部署springboot微服务时ip问题及consul注册问题

docker常规操作——启动、停止、重启容器实例

Docker中如何删除image(镜像)

consul中出现critical报错

微服务Ribbon在docker中无法通过服务名(SERVICE-ID)映射到宿主机IP

springcloud 向consul注册服务时,显示Unhealthy Nodes(不健康的节点)解决方法之一

 

 

告辞!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章