通过优锐课java学习分享中,我们看一下带有Spring Boot和MySQL的Docker教程。非常实用,分享给大家参考学习。

Docker是一种技术,开发人员或DevOps团队可以使用容器来构建,部署和管理应用程序。 Docker是一种开源软件,因此每个人都可以在自己的操作系统上运行该操作系统,该操作系统应支持虚拟化以及适用于Mac / Windows / Linux的Docker。

Docker还将就绪的映像从一台计算机运送到另一台计算机。 Docker容器是与主机OS中其余进程隔离的一组进程。 Docker共享主机操作系统的内核。 另一方面,VM是一种依赖于客户机OS的技术,该客户机与主机OS完全分开。 虚拟机通过虚拟机管理程序与主机OS通信。 VM需要许多硬件资源和进程。 它不是基于容器的技术。

Docker将资源的抽象从硬件级别提升到了操作系统级别。 这就是为什么应用程序可移植性和基础结构分离更容易的原因。

基于容器的技术占用主机系统的资源较少。 大多数时候,基于容器的技术使用主机的内核。 本文的主要目标是通过Spring Boot应用程序和MySQL实现Docker。

基本概念

Docker Engine作为客户端-服务器架构。 Docker守护程序充当服务器,这是Docker的核心部分,并在主机操作系统上运行。 此服务提供了一些可供客户端使用的其余API。 命令行界面(CLI)客户端通过Docker命令使用Docker守护程序提供的服务。

Docker守护程序

重要条款

映像: 映像是Docker内部的可执行应用程序包文件。 它包含运行应用程序所需的一切,包括库,配置文件,运行时等。它是容器的快照。容器: 图像的实例称为容器。 当映像被执行并发生在内存中时,该映像的实例称为容器。 它在完全隔离的环境中执行。

用OOP术语来说,Image是一个类,而容器是该类的实例—运行时对象。

注册表:注册表是存储Docker映像的存储和内容交付系统。 Docker Hub是一个流行的Docker注册表。 我们可以将具有不同标签号的不同版本的图像存储到Docker Hub。

Dockerfile:这是一个文本文件,其中包含用于组装映像的所有命令。

Dockerfile  > (Build) >  Image  > (Run) >  Container

安装

在本文中,我们将使用Docker Hub作为Docker注册表。 然后,我们将按照说明设置桌面Docker应用程序。 我使用Mac OS作为主机。 安装后,我们可以看到Docker应用正在运行。 然后,我必须使用

Docker Hub凭据登录。

Docker Desktop安装并登录后

现在,我们可以打开终端以检查一些Docker命令。

docker --version命令应返回Docker版本。 就我而言,此命令返回

Docker版本19.03.2,内部版本6a30dfc

docker info命令应返回主机已安装的Docker计算机的详细信息。 最初,你有零个图像和容器。

docker pull hello-world此命令应从Docker注册表中提取hello-world映像。 再一次,如果我们运行Docker info命令,我们可以看到映像计数为1。但是容器计数仍然为零。

docker run hello-world此命令应创建hello-world映像的实例。 它将返回一条长消息:

好,Docker!

此消息表明的安装似乎正常工作。

如果运行Docker info命令,我们可以看到映像计数为1,容器计数也为1。 至此Docker安装完成

安装MySQL

现在,我们将创建并运行MySQL数据库的映像。 在我们的终端上,我们将运行以下命令。 此处,此命令中的-d表示Docker命令将以分离模式运行。

 docker run -d -p 6033:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=book_manager" mysql

希望将MySQL映像拉出并作为容器运行。 要检查这一点,我们可以运行

docker image ls和docker container ls命令。 就我而言,这些命令的响应是:

 mysql latest b8fd9553f1f0 3 days ago 445MB
hello-world latest fce289e99eb9 8 months ago 1.84kB
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5db66654ba6a mysql "docker-entrypoint.s…" 13 minutes ago Up 13 minutes 33060/tcp, 0.0.0.0:6033->3306/tcp docker-mysql

现在我们可以通过登录MySQL进行检查。

 docker exec -it docker-mysql bash;

它将带我们进入docker-mysql容器。 然后我们将使用密码为root的mysql -uroot -p登录到MySQL。 然后,我们将运行show数据库; 命令以查看数据库设置是否完成。

就我而言,它返回以下结果:

 +--------------------+ | Database | +--------------------+ | book_manager | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

因此,可以说book_manager数据库是在docker容器内创建的。 我们可以通过端口6033从主机外部使用此数据库。现在,我们必须将数据库脚本导入Docker MySQL数据库。 SQL脚本在此处可用。 运行以下命令将此脚本导入到docker-mysql中。

 docker exec -i docker-mysql mysql -uroot -proot book_manager <book_manager.sql

希望book_manager脚本成功执行。 你可以通过执行以下命令进行确认。

 $ docker exec -it docker-mysql bash;

 root@5db66654ba6a:/# mysql -uroot -p

 Enter password:

 mysql> show databases;

 +--------------------+ | Database | +--------------------+ | book_manager | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use book_manager Database changed

 mysql> show tables;

 +------------------------+ | Tables_in_book_manager | +------------------------+ | author | | book | | book_author | | book_publisher | | book_tag | | bookshelf | | publisher | | tag | +------------------------+ 8 rows in set (0.01 sec) mysql>

应用程序克隆和构建项目

我已经将代码推送到GitHub存储库中。 任何人都可以从此处克隆代码库。 我认为你的主机已安装Gradle。 所以现在我们运行gradle build命令来构建项目。 因此,可执行的jar文件是在克隆项目的build / jar目录中创建的。

现在打开Dockerfile。 我们可以看到该文件包含以下命令:

 FROM java:8

 VOLUME /tmp

 EXPOSE 10222

 ADD /build/libs/book-manager-1.0-SNAPSHOT.jar book-manager-1.0-SNAPSHOT.jar

 ENTRYPOINT ["java","-jar","book-manager-1.0-SNAPSHOT.jar"]

该文件包含要在docker中执行的顺序命令。 它将创建Java 8的映像,还将jar文件从主机复制到docker映像,然后运行在入口点参数处给出的命令。 现在我们将使用此Dockerfile构建一个Docker映像。

 docker build -f Dockerfile -t book_manager_app .

该命令将为Docker计算机创建一个名为book_manager_app的Docker镜像。 -f命令表示Docker文件名。 现在,我们将该图像作为容器运行。

 docker run -t --link docker-mysql:mysql -p 10222:10222 book_manager_app

--link命令将允许book_manager_app容器使用MySQL容器的端口,而-t代表--tty,它将分配一个伪终端。

运行此命令后,我们将在主机浏览器中访问http:// localhost:10222 / book,它将返回书籍列表。

这些都是通过简单的Spring Boot实现和MySQL数据库提供的Docker入门知识的。

文章写道这里,如有不足之处,欢迎补充评论。

抽丝剥茧,细说架构那些事--优锐课

带有Spring Boot和MySQL的Docker:简介(Part 1)的更多相关文章

  1. Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...

  2. (转)Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html 我知道大家这段时间看了 ...

  3. Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中 ...

  4. Docker Compose + Spring Boot + Nginx + Mysql

    Docker Compose + Spring Boot + Nginx + Mysql 实践 我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的 ...

  5. Docker数据持久化及实战(Nginx+Spring Boot项目+MySQL)

    Docker数据持久化: Volume: (1)创建mysql数据库的container docker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD= my ...

  6. 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

    [SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...

  7. Spring Boot工程发布到Docker

    先聊聊闲话 搞过企业级的application运维的同仁肯定深有感触,每个application的功能交叉错杂,数据交换就让人焦头烂额(当然这和顶层业务设计有关系), 几十个application发布 ...

  8. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  9. 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行

    实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...

随机推荐

  1. 浅析Java堆,栈,方法区

    栈(Stack) 1.栈是线程私有的,其生命周期和线程相同. 2.每个方法在执行的时候都会开辟一个栈区,同时创建一个栈帧(Stack Frame). 3.栈帧用于存储局部变量表,操作数栈,动态链接和方 ...

  2. jvm调优、常用工具

    ps -ef | grep java查出进程id jmap -heap ID 查出jvm配置信息 加入参数:打印Gc日志,分析 GC日志分析工具: GCeasy 降低minor gc 和 full g ...

  3. LAMP两种模式

    [LAMP] Linux(Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解 Wish_亮关注2人评论9469人阅读2018-08-20 01:33:10   本章blog主要介绍 ...

  4. 【朝花夕拾】Android多线程之(三)runOnUiThread篇——程序猿们的贴心小棉袄

    runOnUiThread()的使用以及原理实在是太简单了,简单到笔者开始都懒得单独开一篇文章来写它.当然这里说的简单,是针对对Handler比较熟悉的童鞋而言的.不过麻雀虽小,五脏俱全,runOnU ...

  5. Spring Cloud第十篇 | 分布式配置中心Config

    ​ 本文是Spring Cloud专栏的第十篇文章,了解前九篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

  6. Java基础语法08-面向对象-枚举-包装类-接口

    枚举 枚举是一种特殊的类它的对象是有限固定的几个常量对象. JDK1.5之前 构造器加private私有化 本类内部创建一组常量对象,并添加public static修饰符,对外暴露这些常量对象 JD ...

  7. python探索微信朋友信息

    一.itchat itchat是一个开源的微信个人号接口,这一次就用它来来玩玩. 在使用之前,先下载,老规矩通过 pip install itchat 即可安装. 想要获取朋友圈信息,只需要几行代码就 ...

  8. Java连载62-使用throws关键字处理异常

    ​一.处理异常的两种方式 1.所有的编译时异常,要求程序员在编写程序阶段,必须对它进行处理,如果不处理的话,编译就会无法通过,处理异常有两种方法:捕捉和声明抛出. 2.捕捉:try.....catch ...

  9. 墨者 - X-FORWARDED-FOR注入漏洞实战

    X-FORWARDED-FOR 首先,X-Forwarded-For 是一个 HTTP 扩展头部.HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引 ...

  10. HCTF_2018-Writeup【web题】

    HCTF_2018-Writeup 赛题来自:BUUCTF By:Mirror王宇阳 WarmUp: 打开赛题的页面源码(F12) <!DOCTYPE html> <html lan ...