我的环境:win10
文章目录
入门教程推荐
视频教程
推荐先看视频教程,再看本教程,思路更清晰。
文本教程
安装
https://www.runoob.com/docker/centos-docker-install.html
配置镜像加速器
获取阿里镜像加速器
这里主要配置阿里云的docker镜像中心,提高镜像下载速度。
按照下面截图获取镜像加速器地址。
配置加速器
{
"registry-mirrors": [
"https://nj2b****.mirror.aliyuncs.com"
],
"debug": true,
"experimental": false
}
Kitematic 可视化管理 Docker
Kitematic是一个 Docker GUI 工具,它可以更快速、更简单的运行Docker,现在已经支持 Mac 和 Windows。Kitematic 目前在 Github 上开源,而它也早在 2015 年就已经被 Docker 收购。Kitematic 完全自动化了 Docker 安装和设置过程,并提供了一个直观的图形用户接口(GUI)来运行 Docker。通过 GUI 你可以非常容易的创建、运行和管理你的容器,不需要使用命令行或者是在 Docker CLI 和 GUI之间来回切换;同时也可以方便的修改环境变量、查看日志以及配置数据卷等。
详细使用参考:http://sinhub.cn/2018/06/try-to-use-kitematic-in-windows/
项目使用Docker
这里我使用之前Quartz学习案例这篇文章的项目来做讲解。
pom.xml 添加 docker-maven-plugin
项目完整pom.xml
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.leigq</groupId>
<artifactId>springboot-quartz</artifactId>
<version>0.0.1</version>
<name>quartz</name>
<description>Quartz demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<druid.version>1.0.29</druid.version>
<mybatis.version>1.3.1</mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!--必须排除掉默认的logback-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--quartz定时任务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
<!--编写更少量的代码:使用apache commons工具类库:
https://www.cnblogs.com/ITtangtang/p/3966955.html-->
<!--apache.commons.lang3-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!--spring-batch-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<!-- mongodb driver -->
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.10.1</version>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 必需,否则报错 Springboot 1.5.x 使用 2.7版本-->
<!--log4j-core-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<!--需要使用log4j2的AsyncLogger需要包含disruptor-->
<!--<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.7</version>
</dependency>-->
<!-- 必需,否则报错 Springboot 1.5.x 使用 2.7版本-->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-nosql -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-nosql</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<!--自定义字段-->
<properties>
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--docker 插件,将项目打包成镜像,推送至阿里镜像仓库-->
<!-- docker 插件使用参考:https://www.jianshu.com/p/3b91b8958c3e -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->
<!-- 详见:https://github.com/spotify/docker-maven-plugin Invalid repository name ... only [a-z0-9-_.] are allowed-->
<imageName>registry.cn-shenzhen.aliyuncs.com/leigq/${project.build.finalName}-${profiles.active}</imageName>
<baseImage>java:8-alpine</baseImage>
<entryPoint>["java", "-jar","-Dspring.profiles.active=${profiles.active}", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!--对应 Maven 的 setting.xml 中的 server-id -->
<!-- Maven 的 setting.xml 密码加密参考:https://blog.csdn.net/taiyangdao/article/details/79500507-->
<serverId>docker-hub-leigq</serverId>
<registryUrl>https://registry.cn-shenzhen.aliyuncs.com</registryUrl>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
上面的 imageName
中 leigq
是阿里镜像的命名空间,一定要写,不然镜像push失败。
主要看下面这部分
docker 插件使用参考:https://www.jianshu.com/p/3b91b8958c3e
获取阿里镜像访问凭证
修改 Maven 的 setting.xml 文件
username、password是上面配置的阿里镜像的帐号密码。
id与项目中的一致,否则push不了。
<!-- My 阿里云 docker 私仓 -->
<server>
<id>docker-hub-leigq</id>
<username>1725880826@qq.com</username>
<password>{OD0x/SF2v2IHc/YtaaNRR9LgiLhKQJqQIGAa+w0QFLBMe5LdQKC2fTo5QonVCt99}</password>
<configuration>
<email>191789784@qq.com</email>
</configuration>
</server>
上面的密码使用了Maven自带的加密。
测试
打包、上传至阿里镜像库及运行
通过Maven命令就可以将项目打包成docker镜像并上传至阿里镜像仓库了。
mvn clean package -am -amd -Pdev -Dmaven.test.skip=true -Dpushlmage
关于命令中的 -am
、-amd
、-P
、-D
这些参数不懂的,看这里:https://www.cnblogs.com/hiver/p/7850954.html
可以看到项目已经成功打包成docker镜像了,并且已经上传至阿里镜像仓库。
我们先在本地查查镜像是否存在:
docker的基础命令在最上面的视频中已有讲解,读者也可以自己去百度下
docker images
我们尝试运行这个镜像:
运行成功。
然后我们去阿里镜像仓库看看镜像有没有push上去
镜像成功push上来了。
接下来我们把本地的镜像删除掉,将阿里的镜像pull下来,看看能不能正常运行。
删除本地此项目的镜像,如果删除报错可能是容器正在运行,需要先停止容器,然后再删除容器,最后在删除镜像。
拉取阿里镜像:
拉取成功,运行试试:
运行成功!
docker run -p8080:8080 ba15ea250a0a
这条命令中的-p8080:8080
是将docker容器的8080端口映射到我们使用的主机上,不映射的话,我们在浏览器就访问不到了。
可视化工具
选取
通过上面的比较决定使用Shipyard
, Portainer
作为备选方案
使用
- Shipyard
参考这个安装使用:Docker可视化管理工具————Shipyard
- Portainer
参考这个安装使用:Portainer – Docker可视化管理工具的安装配置及使用
配合Rancher管理容器
待续…