一、Idea安装docker插件java
首先给Idea安装docker插件,方式为:File ——> Settings ——> Plugins,安装后重启IDEspring
二、配置远程docker主机docker
1)首先登录远程docker主机,修改配置文件 /usr/lib/systemd/system/docker.serviceapache
#vim /usr/lib/systemd/system/docker.servicevim
打开文件,找到 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 这一行,在后面添加-H tcp://0.0.0.0:2375,表示打开2375端口,支持远程链接dockerapi
2)修改文件后保存,从新加载配置文件并重启docker服务 app
#systemctl daemon-reloaddom
#systemctl restart docker.servicesocket
3)Idea配置docker主机,File ——> Settings ——>Build,Execution,Depolyment ——> Docker,添加一个Docker主机,TCP socket中添加远程主机+端口,以tcp://开头,maven
tcp://192.168.0.6:2375,添加后会自动链接远程docker主机,下方看到connection successful表示链接成功,不然表示链接失败。
4)docker主机链接成功后,在docker插件面板中能够看到docker主机的容器和镜像,以及docker容器运行的日志等信息
三、建立Dockerfile文件
在服务根目录建立docker文件夹,路径以下
在docker目录建立一个Dockerfile文件,内容:
FROM java:8 VOLUME /tmp ADD land-service-hi.jar app.jar EXPOSE 8800 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
内容参数解释见docker
四、配置pom文件
在build的plugins插件标签中添加:
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <!-- 打包成可执行jar包 --> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <!--将插件绑定在某个phase执行--> <executions> <execution> <id>build-image</id> <!--用户只需执行mvn package ,就会自动执行mvn docker:build--> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--指定docker文件目录--> <dockerDirectory>${project.basedir}/docker</dockerDirectory> <!--指定生成的镜像名--> <imageName>land/${project.artifactId}</imageName> <!--指定标签--> <imageTags> <imageTag>latest</imageTag> </imageTags> <!--指定远程 docker api地址--> <dockerHost>http://192.168.0.6:2375</dockerHost> <!-- 这里是复制 jar 包到 docker 容器指定目录配置 --> <resources> <resource> <targetPath>/</targetPath> <!--jar 包所在的路径 此处配置的 即对应 target 目录--> <directory>${project.build.directory}</directory> <!-- 须要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins>
五、打包部署
经过上面一系列配置后,maven打包服务时将自动build 镜像到远程主机,经过docker插件的面板能够看到镜像已经推送到远程主机
#mvn clean package -DskipTests
一、服务建立容器
给每一个服务都进行上面的配置后,使用maven在父项目打包时,将自动上传全部服务的镜像到远程docker主机。这样,虽然上传了服务镜像到远程主机,但远程主机并无建立和启动对应的容器。
方法:能够经过在docker面板手动建立容器,之后每次使用maven打包服务时,不只会上传镜像同时还会自动重启远程主机的docker容器。
一样地,为每一个服务手动建立一个容器,而后在项目根目录打包时,每一个服务的镜像都会上传到远程docker主机并自动重启容器。
二、使用docker-compose
能够使用上面手动建立容器的方法,让远程docker主机启动容器。也能够待各个服务镜像上传到远程主机后,使用docker-compose完成服务编排,而后启动各个微服务。
1)在远程docker主机编辑docker-compose.yml文件
version: '2' services: land-eureka: image: land/land-eureka:latest container_name: land-eureka ports: - '8761:8761' land-zuul: image: land/land-zuul:latest container_name: land-zuul ports: - '9000:9000' land-netty: image: land/land-netty:latest container_name: land-netty ports: - '8000:8000' land-service-hi: image: land/land-service-hi:latest container_name: land-service-hi ports: - '8800:8800' land-service-consumer: image: land/land-service-consumer:latest container_name: land-service-consumer ports: - '8801:8801'
2)在docker-compose.yml文件目录下运行docker-compose命令,启动容器
#docker-compose up -d