首先我们要开启docker的远程连接访问。保证不是docker所在的服务器,也能够远程访问docker。
Linux版的docker:
vi /usr/lib/systemd/system/docker.service
找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375
,如下图所示
-H tcp://0.0.0.0:2375
systemctl daemon-reload
systemctl restart docker
window版docker:
在电脑左下角找到docker
图标,鼠标右键选择settings
。
将General菜单下的Expose daemon on tcp://localhost:2375 without TLS
勾选。无需重启。
File --> Settings --> Plugins
在输入框中搜索Docker,选择并安装。安装完成后重启Docker。在File–> Settings–>Build,Execution,Deployment
中找到Docker
新建一个docker实例,然后在Engine API URL中将docker所在ip端口号填上,填完如果下面显示Connection successful证明连接docker成功。如果失败,可能是我们上一步docker开启远程连接未成功。
url:就是docker那台服务器的ip地址。
我们设置完成后,回到idea主界面,可以看到页面下面有一个docker窗口。点击绿色箭头,连接docker。连接上后显示Containers和Images就是我们现在docker中已经有的容器和镜像。
我就以一个简单的Eureka项目演示。
File–> New -->Project --> Spring Initializr
1.修改pom.xml文件,引入docker-maven-plugin插件相关配置. 改配置在标签内
<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>1.0.0version>
<executions>
<execution>
<id>build-imageid>
<phase>packagephase>
<goals>
<goal>buildgoal>
goals>
execution>
executions>
<configuration>
<imageName>${project.artifactId}imageName>
<imageTags>
<imageTag>latestimageTag>
imageTags>
<dockerDirectory>${project.basedir}/src/main/resourcesdockerDirectory>
<dockerHost>http://127.0.0.1:2375dockerHost>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.build.finalName}.jarinclude>
resource>
resources>
configuration>
plugin>
注意:dockerHost要修改成docker服务器的ip
#项目启动的端口号和IP地址
server.port=9090
eureka.instance.hostname=127.0.0.1
# 是否将其注册到注册中心, 如果不是集群环境,false
eureka.client.register-with-eureka=false
# 是否检索服务,单机情况下为false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
我们在eurekaserver\src\main\resources
目录下,添加文件名为Dockerfile的文件
如果我们docker中没有java:8
这个镜像,请先使用docker pull java:8,将镜像先拉下来。
Dockerfile文件内容:
FROM java:8
VOLUME /tmp
ADD *.jar app.jar
EXPOSE 9090
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
我们添加了一个VOLUME
指向“/ tmp”
的内容,因为这是Spring Boot应用程序默认为Tomcat
创建工作目录的地方。效果是在“/var/lib/docker”
下的主机上创建一个临时文件,并将其链接到“/ tmp”
下的容器。对于我们在此处编写的简单应用程序,此步骤是可选的,但如果需要在文件系统中实际编写,则对于其他Spring Boot应用程序可能是必需的。
为了减少Tomcat的启动时间,我们添加了一个指向“/dev/urandom”
的系统属性作为熵源。如果您使用Tomcat(或任何其他Web服务器)的“标准”版本,则不需要更新版本的Spring Boot。
使用maven打包。我们在pom.xml
中配置过,如果我们是用maven的package
,那么就会自动使用Dockerfile
文件进行构建。
我们从控制台可以看到,已经给我构建了一个和我们项目名相同的镜像文件。
我们在docker窗口可以看到,我们的镜像库中多个一个eurekaserver:latest镜像。
我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择创建容器,再选中创建,我们修改创建容器所需要的配置。
在Create Docker Configuration弹窗中修改Container name(容器名称) Bind ports(Ip和端口映射)
我在这里添加127.0.0.1:8080:9090. 使用本地8080端口,去访问容器的9090.
我们点击Run之后,就会自动创建容器并启动。
我们可以看到在docker插件中,多出了一个eurekaServer的容器,并且启动成功,端口号为9090.
访问容器中的项目
我们在前面设置的是使用8080端口,访问容器9090的项目。
我们使用127.0.0.1:8080
访问项目,出现如下页面,证明项目启动成功。
在这里我们基本上已经完成了所有的配置。
以后,我们启动项目可以按照下图所示,一键启动我们项目就会在docker容器中运行。
如果我们修改了项目,在使用在docker插件中启动项目,会发现在启动依然还是修改前的项目,因为我们只是启动了容器,并没有将修改后的项目重新打包并生成docker的images。
如果我们想在启动时直接用运行打包并启动项目可以按照下面的操作。
1.我们修改在前面我们创建的Docker Images 的配置。
2.在配置启动项中找到Before launch:Activate tool window
,在这里我们新增一个Run Maven Gold
。
3.我们在这里的Command line
中添加一个命令 package
。
配置完成后保存。以后我们启动项目时都会执行maven的package
命令,自动将我们打包并把项目生成docker镜像文件启动。
以后,如果我们修改项目后,都可以使用下图所示去启动。它会自动打包创建docker镜像并启动项目。
如果我们只需要启动项目,到docker插件窗口,启动对应项目的容器就可以了。