SpringBoot项目整合Docker部署

我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!

Docker的优点

1. 简化部署过程,提升可移植性

当我们要上线新机器的时候,需要配置相应的运行环境,其安装过程是比较繁琐且漫长的。如果使用Docker的话,只需要导入或从仓库拉取镜像,即可一键安装启动,大幅缩减配置时间,减少部署的复杂性。

2. 软件升级和版本控制

当你需要将项目从1.0升级到2.0的时候,稳妥起见一般是先停服务,再区分好不同版本的目录等,再启动新的服务。而使用Docker的话则是启动一个2.0的容器,再停止1.0的容器即可,当遇上故障,需要进行版本回滚时,也可以直接启动前面停止运行的容器即可先临时顶替上去,等后面新版本修复完成再切换回来。

3. 隔离性

多个服务部署在同一台机器,很多时候会因为一些陈旧的项目占满了整个服务器的性能,使得其他服务无法正常运行。而Docker能够确保每个容器都拥有自己的资源,在该容器的环境中,任何改动都不会影响到其他的容器,同时还能确保每个应用程序只使用分配给它的资源,不会出现不同服务抢占资源的情况,由其符合云计算时代的到来,让云空间可以得到更充分的利用。

创建Docker镜像的方式

当我们使用现有的容器,将其配置成所需的环境后,可以通过 commit 命令来将其打包成一个新的镜像。

也可以使用build命令,通过Dockerfile来创建镜像。

还可以使用工具,通过鼠标操作来创建镜像。

1. Docker commit 命令

语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a:提交的镜像作者
  • -c:使用Dockerfile指令来创建镜像
  • -m:提交时的说明
  • -p:在commit阶段,讲容器暂停

案例:将容器09ae7edbf678保存为新的镜像。

image.png

2. Docker build 命令

语法:docker build [OPTIONS] PATH | URL | -

OPTIONS说明:

  • --build-arg=[]:设置镜像创建时的变量
  • --cpu-shares:设置 CPU 使用权重
  • --cpu-period:限制 CPU CFS周期
  • --cpu-quota:限制 CPU CFS配额
  • --cpuset-cpus:指定使用的CPU id
  • --cpuset-mems:指定使用的内存 id
  • --disable-content-trust:忽略校验,默认开启
  • -f:指定要使用的Dockerfile路径
  • --force-rm:设置镜像过程中删除中间容器
  • --isolation:使用容器隔离技术
  • --label=[]:设置镜像使用的元数据
  • -m:设置内存最大值
  • --memory-swap:设置Swap的最大值为内存+swap"-1"表示不限swap
  • --no-cache:创建镜像的过程不使用缓存
  • --pull:尝试去更新镜像的新版本
  • --quiet, -q:安静模式,成功后只输出镜像 ID
  • --rm:设置镜像成功后删除中间容器
  • --shm-size:设置/dev/shm的大小,默认值是64M
  • --ulimitUlimit配置。
  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式可以在一次构建中为一个镜像设置多个标签。
  • --network: 默认 default。在构建期间设置RUN指令的网络模式

案例:使用当前目录下的Dockerfile创建镜像。

image.png

image.png

3. IDEA创建Docker镜像

  1. Docker配置:
    想要通过IDEA访问Docker,需要在Docker中开启相关端口才行。

    • 配置文件位置:/usr/lib/systemd/system/docker.service
    • 在ExecStart后面添加:-H tcp://0.0.0.0:2375
  2. IDEA配置:

    • 安装Docker插件,路径:File – Settings – Plugins – Marketplace – Docker
    • 连接Docker,路径:File – Settings – Build, Execution, Deployment – Docker

图2.1

图2.2

  1. POM配置:

    • pom文件引入docker-maven-plugin插件
<!--使用docker-maven-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>
        <!--指定生成的镜像名,这里是我们的项目名-->
        <imageName>${project.artifactId}</imageName>

        <!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
        <imageTags>
            <imageTag>${project.version}</imageTag>
        </imageTags>

        <!--指定基础镜像jdk1.8-->
        <baseImage>java</baseImage>
        <!--
        镜像制作人本人信息
        <maintainer>xxx@email.com</maintainer>
        -->
        <!--切换到ROOT目录-->
        <workdir>/ROOT</workdir>

        <!--查看我们的java版本-->
        <cmd>["java", "-version"]</cmd>

        <!--${project.build.finalName}.jar是打包后生成的jar包的名字-->
        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>

        <!--指定远程 docker api地址-->
        <dockerHost>http://IP: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>
复制代码
  1. 打包

    • 通过maven打包会自动生成docker镜像

image.png

image.png

image.png

上面的三种方式都可以生成Docker镜像,看着哪种方便使用那种就好了。

其它

1. Dockerfile文件创建

  • 必须以 【Dockerfile】作为文件名
  • 参数:
    • FROM [image:tag]:定制的镜像都是基于该镜像基础上,这里使用 williamyeh/java8
    • VOLUME [path]:挂载点
    • ADD [fileName] [imageName]:从上下文目录中添加文件到容器里指定路径
    • ENTRYPOINT [“param1″,”param2”,……]:启动参数
    • 更多参数可以参考:www.runoob.com/docker/dock…
  • 将jar包和Dockerfile同时上传至同一个文件夹中
  • 构建镜像:docker build -t [imageName] .
  • 创建容器:docker run -d -p [宿主机端口]:[容器内部端口] –name [containerName] [imageName]

2. Dockerfile FORM 底层镜像生成方法

  • 查找镜像:docker search centos
  • 下载镜像:docker pull centos/systemd
  • 下载JDK:www.oracle.com/java/techno…
  • 在下载的JDK.tar.gz文件目录中创建Dockerfile
# 系统镜像
FROM centos/systemd
# 自定义路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 相关依赖下载
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 引用
ADD JDKJar.tar.gz /usr/local/java
# 环境变量
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success-------------------OK"
CMD /bin/bash
复制代码
  • 执行:docker build -t [镜像名称:版本号] .
    • 注意后面有个小点,表示当前目录

3. Docker Harbor

可以通过Harbor保存镜像,具体操作流程如下:

  • 登录:docker login ip:port
  • 改名:docker tag 镜像名:版本号 ip:port/仓库名称/镜像名称:版本号
  • 推送:docker push ip:port/仓库名称/镜像名称:版本号
  • 下载:docker pull ip:port/仓库名称/镜像名称:版本号

4. Docker镜像私服配置

方式一:daemon.json

  • 位置:/etc/docker/daemon.json
  • 添加参数:”insecure-registries”: [“IP:PORT”]

方式二:docker.service

  • 位置:/usr/lib/systemd/system/docker.service
  • 添加参数:在ExecStart处添加 –insecure-registry=IP:PORT 参数

以上两种配置方式只能选择其中一种

重启 docker:

  • systemctl daemon-reload
  • systemctl restart docker

查看:

  • docker login IP:PORT

配置了registry之后,我们可以通过login命令来登录私服进行查看。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享