# Java Docker 和 Docker 容器简介
> 原文: [https://javatutorial.net/introduction-to-docker-and-docker-containers-in-java](https://javatutorial.net/introduction-to-docker-and-docker-containers-in-java)
简而言之,Docker 是一个工具,通过使用所谓的容器,您可以轻松地构建,部署和运行应用程序。 这些容器使我们可以打包所有必不可少的要素,例如库和依赖项。
![java-featured-image](https://img.kancloud.cn/05/3e/053ee0bb59842d92359246c98f815e0c_780x330.jpg)
另外,这些容器在主机操作系统上运行。
当我们使用 Docker 时会带来很多好处。 它
* 增强了应用程序的可移植性,并且可以非常轻松地创建测试应用程序,而不必依赖于环境
* 优化基础设施
* 将应用程序及其依赖项打包到标准化单元中
## 容器
不,我不是在谈论现实世界中的容器。 但是,既然您正在考虑它,我不妨作个比喻。 现实生活中的容器的目的是存储需要运输到另一个地方的货物或物品。 现在,这些商品具有不同的存储要求,例如,可能存在牛奶的有效期比例如西红柿短的牛奶。 这就是为什么在现实生活中容器是非常有用的原因–容器保留了内部环境,例如敏感商品和/或物品的温度。 话虽如此,运输业不必担心这些物品,而将重点放在将它们从 A 运送到 B 上。
现在,如果您已经注意了以上段落,那么 Docker 中的容器就是一回事。 多亏了 Docker 的**容器**,我们可以轻松地将**容器化应用程序**组件从一种环境迁移到另一种环境,希望不会出现任何问题。
就像现实生活中的容器一样,Docker 中的**容器**为我们提供了一个隔离的安全的应用程序组件环境。 与现实生活中的容器相比,应用组件是商品。
## Docker 容器与虚拟机
![Container structure in Docker](https://img.kancloud.cn/e0/8d/e08d0e723f0a96056a4ed423dc8f7320_308x389.jpg)
![Virtual machine structure Docker](https://img.kancloud.cn/99/22/99225a165aa806eb7dabcefc7156045d_305x454.jpg)
根据映像,VM 方法的问题在于它附带了很多东西 - 二进制和库(必不可少的),但最主要的是 - 整个来宾操作系统的总容量为几个 GB。
另一方面,Docker 容器包含应用程序的所有依赖关系,与其他容器共享内核。 此外,Docker 容器可以在任何计算机,基础架构和云上运行。 现在,您可以再次阅读真实容器的类比并看到相似之处。
## 安装 Docker
如果使用 Windows 或 Mac,[请单击此处](https://www.docker.com/products/docker-desktop)。
安装 Docker 之后,您将拥有以下内容:
1. 用于运行`docker-machine`命令的 Docker Machine
2. 用于运行 docker 命令的容器引擎
3. Docker Compose 用于运行`docker-compose`命令
4. Kitematic,Docker GUI
5. 为 Docker 命令行环境预先配置的 Shell
6. 甲骨文 VirtualBox
要检查您是否已成功安装 docker,请输入以下内容:
```java
docker --version
```
要查看更多信息,例如容器,正在运行,已暂停或已停止的容器数,图像等,可以键入:
```java
docker info
```
就是这样! 您的机器上有 Docker。 要编写一个简单的“hello world”程序,可以键入以下内容:
```java
docker run hello-world
```
响应:
```java
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1\. The Docker client contacted the Docker daemon.
2\. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3\. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4\. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
```
- JavaTutorialNetwork 中文系列教程
- Java 基础
- Java 概述
- 在 Ubuntu 上安装 Java 8 JDK
- Java Eclipse 教程
- Eclipse 快捷方式
- 简单的 Java 示例
- Java 基本类型
- Java 循环
- Java 数组
- Java 读取文件示例
- Java 对象和类教程
- 什么是面向对象编程(OOP)
- Java 封装示例
- Java 接口示例
- Java 继承示例
- Java 抽象示例
- Java 多态示例
- Java 中的方法重载与方法覆盖
- Java 控制流语句
- Java 核心
- 如何在 Windows,Linux 和 Mac 上安装 Maven
- 如何使用 Maven 配置文件
- 如何将自定义库包含到 Maven 本地存储库中
- 如何使用 JUnit 进行单元测试
- 如何使用 Maven 运行 JUnit 测试
- 如何在 Java 中使用 Maven 创建子模块
- 如何使用 Maven 创建 Java JAR 文件
- 如何使用 Maven 创建 Java WAR 文件
- JVM 解释
- Java 内存模型解释示例
- 捕获 Java 堆转储的前 3 种方法
- Java 垃圾收集
- Java 互斥量示例
- Java 信号量示例
- Java 并行流示例
- Java 线程同步
- Java 线程池示例
- Java ThreadLocal示例
- Java 中的活锁和死锁
- Java Future示例
- Java equals()方法示例
- Java Lambda 表达式教程
- Java Optional示例
- Java 11 HTTP 客户端示例
- Java 类加载器介绍
- Java 枚举示例
- Java hashCode()方法示例
- 如何测试独立的 Java 应用程序
- SWING JFrame基础知识,如何创建JFrame
- Java SWING JFrame布局示例
- 在JFrame上显示文本和图形
- 与JFrame交互 – 按钮,监听器和文本区域
- 如何使用 Maven 创建 Java JAR 文件
- Java Collection新手指南
- 选择合适的 Java 集合
- Java ArrayList示例
- Java LinkedList示例
- Java HashSet示例
- Java TreeSet示例
- Java LinkedHashSet示例
- Java EnumSet示例
- Java ConcurrentHashSet示例
- Java HashMap示例
- Java LinkedHashMap示例
- Java TreeMap示例
- Java EnumMap示例
- Java WeakHashMap示例
- Java IdentityHashMap示例
- Java SortedMap示例
- Java ConcurrentMap示例
- Java Hashtable示例
- Java 中ArrayList和LinkedList之间的区别
- Java HashMap迭代示例
- Java HashMap内联初始化
- Java 中HashMap和TreeMap之间的区别
- Java 图示例
- Java 深度优先搜索示例
- Java 广度优先搜索示例
- 不同的算法时间复杂度
- Java 序列化示例
- Java 反射示例
- Java 中的弱引用
- Java 8 日期时间 API
- Java 基本正则表达式
- 使用 Java 检索可用磁盘空间
- Java 生成 MD5 哈希和
- Java 增加内存
- Java 属性文件示例
- 如何在 Eclipse 上安装 Java 9 Beta
- Java 9 JShell 示例
- Java 9 不可变列表示例
- Java 9 不可变集示例
- Java 9 不可变映射示例
- Java 单例设计模式示例
- Java 代理设计模式示例
- Java 观察者设计模式示例
- Java 工厂设计模式
- Java 构建器设计模式
- Java 比较器示例
- Java 发送电子邮件示例
- Java volatile示例
- Java Docker 和 Docker 容器简介
- 安装和配置 MySQL 数据库和服务器以供 Spring 使用
- 如何在 Java 中使用 MySQL 连接器
- 如何使用 Eclipse 调试 Java
- Java EE
- 如何在 Windows 10 中设置JAVA_HOME
- JavaBeans 及其组件简介
- 如何安装和配置 Tomcat 8
- 如何在 Tomcat 中部署和取消部署应用程序
- 从 Eclipse 运行 Tomcat
- Java Servlet 示例
- Java Servlet POST 示例
- Servlet 请求信息示例
- Servlet 注解示例
- 使用初始化参数配置 Java Web 应用程序
- Java Servlet 文件上传
- Java JSP 示例
- Glassfish 启用安全管理
- 如何使用 MySQL 配置 Glassfish 4
- Java 文件上传 REST 服务
- Glassfish 和 Jetty 的 Java WebSockets 教程
- 基于 Glassfish 表单的身份验证示例
- 如何使用 Java EE 和 Angular 构建单页应用程序
- Spring
- 在 Eclipse 中安装 Spring STS
- 使用 STS 创建简单的 Spring Web App
- Spring Web Framework 简介
- Java Docker 和 Docker 容器简介
- 在 Spring 中实现控制器
- Spring 中的PathVariable注解
- Spring 中的RequestBody注解
- Spring 中的RequestParam注解
- Spring 拦截器
- Spring IOC
- Java Spring IoC 容器示例
- Spring 中的DispatcherServlet
- Spring 示例中的依赖注入
- 实现 Spring MVC 控制器
- Spring ORM 简介
- 什么是 DAO 以及如何使用它
- 如何对 DAO 组件进行单元测试
- 如何对控制器和服务执行单元测试
- 安装和配置 MySQL 数据库和服务器以供 Spring 使用
- 如何在 Spring 中处理登录身份验证
- Spring Security 简介及其设置
- 如何使用 Spring 创建 RESTful Web 服务
- Spring CSRF 保护
- Spring 中基于 OAuth2 的身份验证和授权
- Spring Boot 简介
- Spring MVC 框架介绍
- Spring JDBC 简介
- 如何 docker 化 Spring 应用程序
- Spring 的@Autowired注解
- Spring AOP 中的核心概念和建议类型
- Sping Bean 简介
- 如何在 Java 中使用 MySQL 连接器
- 安卓
- 安装和配置 Android Studio
- 将 Android 设备连接到 Android Studio
- Android 简介,活动,意图,服务,布局
- 创建一个简单的 Android 应用
- 运行和调试 Android 应用程序
- 在虚拟设备上运行 Android 应用程序
- Android 活动示例
- Android 意图示例
- Android 服务示例
- Android 线性布局示例
- Android 相对布局示例
- Android Web 视图示例
- Android 列表视图示例
- Android 网格视图示例
- 带有ListAdapter的 Android ListView示例
- Android SQLite 数据库介绍
- Android SQLite 数据库示例
- Android 动画教程
- Android 中的通知
- Android 中的事件处理
- 如何在 Android 中发送带有附件的电子邮件
- 杂项
- 选择您的 JAVA IDE:Eclipse,NetBeans 和 IntelliJ IDEA
- Java S3 示例
- 如何在 Ubuntu 上为多个站点配置 Apache
- 如何在 Liferay DXP 中替代现成的(OOTB)模块
- 简单的 Git 教程
- 使用 Java 捕获网络数据包
- Selenium Java 教程
- 使用特定工作区运行 Eclipse
- 在 Eclipse 中安装 SVN
- 如何运行 NodeJS 服务器
- SQL 内连接示例
- SQL 左连接示例
- SQL 右连接示例
- SQL 外连接示例
- 树莓派
- Raspberry Pi 3 规格
- 将 Raspbian 安装到 SD 卡
- Raspberry Pi 首次启动
- 远程连接到 Raspberry Pi
- 建立 Raspberry Pi 远程桌面连接
- Raspberry Pi Java 教程
- 使用 PWM 的 Raspberry Pi LED 亮度调节
- Raspberry Pi 控制电机速度
- Raspberry Pi 用 Java 控制直流电机的速度和方向