栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Docker简介以及如何在 IDEA 中使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker简介以及如何在 IDEA 中使用

Docker简介以及如何在 IDEA 中使用

目录:

Docker简介

IDEA集成Docker插件

Maven集成Docker插件

Docker迁移与备份

1 Docker简介 1.1 什么是Docker

​ Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

​ Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

​ Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

​ Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

​ 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

1.2 为什么要用 Docker

优势

    **更高效的利用系统资源,**由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。**更快速的启动时间,**传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。**一致的运行环境,**开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。**持续交付和部署。**对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。**更轻松的迁移,**由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

对比传统虚拟机总结

特性容器虚拟机
启动秒级分钟级
硬盘使用一般为 MB一般为 GB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个

​ 传统虚拟化

​ Docker

1.3 Docker的三个基本概念

镜像(Image): 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

**容器(Container):**镜像运行实例,镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

**仓库:**集中存放镜像文件的场所,镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务。

2 IDEA集成Docker插件 2.1 开启配置Docker的远程访问,配置外部应用访问Docker的端口 2.1.1编辑docker配置文件
vi /lib/systemd/system/docker.service
2.1.2替换ExecStart

将 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 替换为 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

2.1.3重启Docker服务
systemctl restart docker
2.1.4防火墙开启2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent

或者直接关闭防火墙(不推荐)

systemctl stop firewall

重启防火墙

firewall-cmd --reload

查看当前已经开放的端口

firewall-cmd --list-ports
2.1.5测试是否成功开启远程访问

浏览器访问:http://docker服务器ip:2375/version

2.1.6 设置ustc的镜像

ustc是的linux镜像服务提供者,ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

编辑该文件:

vi /etc/docker/daemon.json

在该文件中输入如下内容:

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
2.2 IDEA中配置Docker 2.2.1 配置Docker服务器地址

2.2.2 Dockerfile简介 2.2.2.1 什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。

2.2.2.1 常用命令
命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量 (可以写多条)
RUN command是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir设置工作目录
2.2.2.2 使用脚本创建镜像

步骤:

(1)创建目录

mkdir –p /usr/local/dockerjdk8

(2)下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录

(3)创建文件Dockerfile vi Dockerfile

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
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

(4)执行命令构建镜像

docker build -t='jdk1.8' .

注意后边的空格和点,不要省略

(5)查看镜像是否建立完成

docker images
2.2.3 在项目下创建Dockerfile文件

Dockerfile配置

FROM java:8

# 镜像制作者
LABEL maintainer="cys@terton.com.cn"

# 将项目 jar 包(demo-0.0.1-SNAPSHOT.jar)拷贝到 studentdemo.jar中
COPY target/demo-0.0.1-SNAPSHOT.jar studentdemo.jar

# 仅仅只是声明端口,以方便配置映射
EXPOSE 8762

# 执行 jar 包  "-Djava.security.egd=file:/dev/./urandom"加快随机数产生过程
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/studentdemo.jar"]
2.2.4 Dockerfile的运行配置

配置内容:

端口映射:

2.2.5 构建Docker镜像

pom配置


   
      
         org.springframework.boot
         spring-boot-maven-plugin
      
   

打包

执行Dockerfile构建镜像

2.2.6 成功构建镜像、容器

2.2.7 访问项目

3 Maven集成Docker插件 3.1 在pom中引入Docker插件


   
      
         org.springframework.boot
         spring-boot-maven-plugin
      
      
         com.spotify
         docker-maven-plugin
         1.0.0
         
            mavendemo
            java:8
            /ROOT
            ["java", "-version"]
            ["java", "-jar", "${project.build.finalName}.jar"]
            http://192.168.2.128:2375
            
               
                  /ROOT
                  ${project.build.directory}
                  ${project.build.finalName}.jar
               
            
         
      
   

3.2 通过maven构建镜像

3.3 查看构建好的镜像

3.4 为镜像创建容器

4.5 创建容器配置

3.6 运行容器并测试访问

4 Docker迁移与备份 4.1 容器保存为镜像

我们可以通过以下命令将容器保存为镜像

docker commit studentdemo_container studentdemo_image
4.2 镜像备份

我们可以通过以下命令将镜像保存为tar 文件

docker  save -o studentdemo_image.tar studentdemo_image
4.3 镜像恢复与迁移

首先我们先删除掉mynginx_img镜像 然后执行此命令进行恢复

docker load -i studentdemo_image.tar

-i 输入的文件

执行后再次查看镜像,可以看到镜像已经恢复

*参考资料:Docker —— 从入门到实践(https://yeasy.gitbook.io/docker_practice/)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号