目录:
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.service2.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 docker2.1.4防火墙开启2375端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
或者直接关闭防火墙(不推荐)
systemctl stop firewall
重启防火墙
firewall-cmd --reload
查看当前已经开放的端口
firewall-cmd --list-ports2.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、对于运维人员:在部署时,可以实现应用的无缝移植。
| 命令 | 作用 |
|---|---|
| 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 | 设置工作目录 |
步骤:
(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 images2.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插件3.2 通过maven构建镜像 3.3 查看构建好的镜像 3.4 为镜像创建容器 4.5 创建容器配置 3.6 运行容器并测试访问 4 Docker迁移与备份 4.1 容器保存为镜像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
我们可以通过以下命令将容器保存为镜像
docker commit studentdemo_container studentdemo_image4.2 镜像备份
我们可以通过以下命令将镜像保存为tar 文件
docker save -o studentdemo_image.tar studentdemo_image4.3 镜像恢复与迁移
首先我们先删除掉mynginx_img镜像 然后执行此命令进行恢复
docker load -i studentdemo_image.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
*参考资料:Docker —— 从入门到实践(https://yeasy.gitbook.io/docker_practice/)



