Docker学习教程

我的环境: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>

上面的 imageNameleigq 是阿里镜像的命名空间,一定要写,不然镜像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管理容器

待续…
在这里插入图片描述


作者:不敲代码的攻城狮
出处:https://www.cnblogs.com/leigq/
任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

 
原文地址:https://www.cnblogs.com/leigq/p/13406548.html