环境使用阿里云ECS服务器及Ubuntu 16.04进行测试

Ubuntu 16.04安装Docker

1.安装步骤
# step 1:
安装必要的一些系统工具,添加apt支持https的URLs(如不存在/usr/lib/apt/methods/https这个文件,先安装apt-transport-https包)
sudo apt-get update sudo apt-get -y install apt-transport-https
ca-certificates curl software-properties-common# step 2: 安装GPG证书 curl -fsSL
http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - #
Step 3: 写入软件源信息 sudo add-apt-repository "deb [arch=amd64]
http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" #
Step 4: 更新并安装Docker-CE sudo apt-get -y update sudo apt-get -y install docker-ce
2.安装后查看版本信息
docker -v


3.可以从镜像仓库拉取一个测试镜像
docker pull hello-world


4.查询可用镜像
docker images


5.启动docker服务
service docker start
6.启动测试镜像
docker run hello-world


创建测试工程

1.使用IDEA生成一个基础的Spring Boot工程

2.在pom文件中添加docker-maven-plugin插件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns=
"http://maven.apache.org/POM/4.0.0" xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.laravelshao.springboot</groupId>
<artifactId>deploy-docker</artifactId> <version>0.0.1-SNAPSHOT</version> <
packaging>jar</packaging> <name>deploy-docker</name> <description>Demo project
for Spring Boot</description> <parent> <groupId>org.springframework.boot</
groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>
1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository -->
</parent> <properties> <project.build.sourceEncoding>UTF-8</
project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</
project.reporting.outputEncoding> <java.version>1.8</java.version> </properties>
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <
artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <
groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test
</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins
> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>
spring-boot-maven-plugin</artifactId> </plugin> <!--docker maven 插件--> <plugin>
<groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <
version>1.0.0</version> <configuration> <imageName>micro-deploy-docker</
imageName> <!--注意 修改成远程服务器地址--> <dockerHost> http://X.X.X.X:2375</dockerHost> <
dockerDirectory>docker</dockerDirectory> <resources> <resource> <targetPath>/</
targetPath> <directory>${project.build.directory}</directory> <include>
${project.build.finalName}.jar</include> </resource> </resources> </
configuration> <dependencies> <dependency> <groupId>org.apache.httpcomponents</
groupId> <artifactId>httpclient</artifactId> <version>4.4</version> </dependency
> </dependencies> </plugin> </plugins> </build> </project>
3.在工程根目录下添加docker文件夹并添加Dockerfile文件
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /opt/common ADD deploy-docker-0.0.1
-SNAPSHOT.jar app.jar ENTRYPOINT ["java",
"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8080
4.提供一个测试接口
@RestController public class DemoController { @RequestMapping("/hello") public
Stringhello(){ return "hello world docker"; } }
5.构建镜像并发布到远程服务器
mvn clean package docker:build


6.查看相关博客后发现远程服务器必须开启docker远程api

解决方法:

① 在/etc/systemd/system目录下新建目录docker.service.d,并新建文件http-proxy.conf,添加以下内容保存
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:/
//var/run/docker.sock
② 重新载入配置
systemctl daemon-reload
③ 重启docker服务
service docker restart
④ 查看docker进程,发现配置已经更新
ps -ef | grep docker


7.再次尝试构建镜像发布到远程服务器,还是报连接失败
mvn clean package docker:build


解决方法:

实在不知道那还有问题,就尝试在阿里云ECS管理控制台有没有相关设置,突然看到有一个安全组配置,添加一个安全组规则





8.第三次尝试构建镜像发布到远程服务器,总算推送成功


9.查询可用镜像,存在刚才构建的镜像
docker images


10.启动当前镜像
docker run -p 8080:8080 micro-deploy-docker:latest
11.请求测试接口http://X.X.X.X:8080/hello <http://X.X.X.X:8080/hello>
,发现无法访问,这时需要在阿里云的安全组中开放8080端口供服务请求使用


添加规则之后再次请求,总算成功了,不容易。