1.安装docker
- windows 10 docker:下载地址
2.设置docker
在windows下设置docker直接使用gui界面来设置就可以了
右键启动栏的docker小图标,点击settings>general
- 设置启用localhost的2375端口来运行docker(如果不启用,则后面你试用运行时就会报2375端口无法访问的错误)
Expose daemon on tcp://localhost:2375 without TLS
- 设置阿里云加速器
阿里云加速器
先用你的阿里云账号登入,在Docker Hub 镜像站点中找到镜像地址
然后在settings>daemon中添加这个镜像(也可以换成你专属的地址)
https://m7c6b36f.mirror.aliyuncs.com
3.创建在docker中运行spring boot 项目
跟常规的方式创建spring boot一样,只是在maven中添加了一个docker的插件,可以使用maven来创建docker服务器
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--使用此maven插件来执行mvn package docker:build-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</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>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<docker.image.prefix>yurencloud</docker.image.prefix>
<spring.boot.version>1.3.3.RELEASE</spring.boot.version>
</properties>
并在spring boot项目的src/main/docker目录中创建Dockerfile文件
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD spring-boot-docker-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
4.创建docker服务器
docker会下载服务器镜像frolvlad/alpine-oraclejdk8:slim,并添加spring boot项目jar文件spring-boot-docker-1.0-SNAPSHOT.jar,并给jar文件取个别名app.jar,最后告诉docker服务器,启动时执行 java -Djava.security.egd=file:/dev/./urandom -jar /app.jar 这条命令
若出现无法连接localhost:2375端口,请看上面的2.设置docker
mvn package docker:build
服务器创建好后,执行下面命令,让docker启动服务器
docker 运行,端口, 本地8080和docker的8080相互映射,启动容器 yurencloud/spring-boot-docker
docker run -p 8080:8080 -t yurencloud/spring-boot-docker
然后你在自己的浏览器中就可以访问在docker中运行的spring boot
localhost:8080
5.总结
在docker和vagrant之间相比,docker的运行速度更快,每个镜像更小。但docker真要装起来,也能变得很大个。
docker能创建单独的容器,单独运行mysql,单独运行redis,那么如果我们本机不想安装mysql,或redis,可以在创建容器,然后通过docker使用这些服务,这个特性是vagrant无法相比的。
如果我们的某些服务,只能运行在linux中,无法运行在windows中,使用vagrant或者创建虚拟机完成的linux系统,再安装服务,那显然太过麻烦,庞大。而docker可以更好的适应这种情况。
但java开发阶段使用docker,我觉得不大适合,php到很适合。
不过到了部署到生产环境的时候。docker到能发挥很大的作用,无论是对于java web还是php web。
因为docker是创建一个一个容器,每个容器都有自己的运行环境,并且相互隔离。
当我们想创建一个nodejs环境,想创建一个php环境,想创建一个java环境,又想创建一个java搭配oracle的环境,又想搭配php和mysql的环境,此时,我们完全就可以用docker来创建一个一个容器,这样,我们就不必在自己的电脑中安装各种软件,配置各种变量,弄得乱七八糟,同时,docker启动又十分迅速!并且就算是同一个java环境,还可以分成java6容器,java8容器。
我感觉主要优势还是docker的轻量级,多容器。
我们([AVOS Cloud**](https://link.zhihu.com/?target=https%3A//cn.avoscloud.com/))是做 BaaS,场景非常适合使用 Docker,抛出来大家一起聊下。
在我们的平台上,一台 16 核 32G 内存的虚拟机上,需要跑 500+ 个用户的应用(每个应用的功能可以认为是一个网站 + 一系列的 RESTful API),有两个事情很重要:资源隔离:比如限制应用最大内存使用量,或者资源加载隔离等。
低消耗:虚拟化本身带来的损耗需要尽量的低。
我们不可能在一台机器上开 500 个虚拟机,虽然可以在资源隔离方面做的很好,但这种虚拟化本身带来的资源消耗太严重。另一个方面,我们可以考虑使用语言级别沙箱,虽然这种「虚拟化」本身的消耗可以低到忽略不计,但是资源隔离方面绝对是噩梦,比如你打算在一个 JVM 里隔离内存的使用。
而 Docker 很好的权衡了两者,即拥有不错的资源隔离能力,又有很低的虚拟化开销。
作者:无知链接:https://www.zhihu.com/question/22969309/answer/30865048来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论