使用Docker高效搭建开发环境(详细教程)

2023-10-31

在学习Docker镜像和容器之前,先给大家介绍下Docker的概念,在理解概念的基础上可以举一反三!

1、Docker的核心为镜像和容器,有JAVA基础的小伙伴们可以理解为镜像就是JAVA中的类,容器为相关类的对象。一个镜像可以创建多个容器。有过电脑装系统经验的应该知道系统都是ISO镜像文件,当系统安装完成之后,我们看到的界面就相当于一个容器。

2、Docker镜像主要将我们开发中使用到的每一个运行环境打包成每一个小的镜像(如:Tomcat镜像,MySQL镜像,Nginx镜像,ElasticSearch镜像),我们需要什么运行环境安装对应的镜像,不需要配置任何的系统参数,开箱即用。其实它最大的优点在于可以跨平台移植,我们知道Java是依靠JVM跨平台,不管在什么机器上编的码,移植到不同的机器上还可以正常运行。Docker镜像也一样,如果在测试环境下配置好一套镜像,可以打包这个镜像并移植到另外的机器上,只需要启动之前的配置就可以生效使用了!

3、在上一篇中我们已经将Docker安装完成,这篇在其基础上进行扩展,还没有安装Docker请参考:

https://blog.csdn.net/weixin_39835887/article/details/84139929

本篇主要讲解Tomcat镜像的使用,Tomcat应该是JAVA Web最常用的应用容器了,如果这篇文章讲到的知识明白了,那么其他环境安装都是一样的,可以灵活运用,就说明你已经掌握了Docker!

一、 在安装镜像之前我们先来搜索一下Docker仓库中有哪些Tomcat镜像,安装最适合我们的!(非必需项目,根据自己习惯)

搜索镜像命令:docker search 镜像名称

[root@iZx4xwfjh1zsdsZ /]# docker search tomcat
NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                                Apache Tomcat is an open source implementati…   2175                [OK]                
tomee                                 Apache TomEE is an all-Apache Java EE certif…   58                  [OK]                
dordoka/tomcat                        Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   50                                      [OK]
davidcaste/alpine-tomcat              Apache Tomcat 7/8 using Oracle Java 7/8 with…   31                                      [OK]
bitnami/tomcat                        Bitnami Tomcat Docker Image                     26                                      [OK]
consol/tomcat-7.0                     Tomcat 7.0.57, 8080, "admin/admin"              16                                      [OK]
cloudesire/tomcat                     Tomcat server, 6/7/8                            15                                      [OK]
tutum/tomcat                          Base docker image to run a Tomcat applicatio…   11                                      
meirwa/spring-boot-tomcat-mysql-app   a sample spring-boot app using tomcat and My…   10                                      [OK]
jeanblanchard/tomcat                  Minimal Docker image with Apache Tomcat         8                                       
aallam/tomcat-mysql                   Debian, Oracle JDK, Tomcat & MySQL              8                                       [OK]
arm32v7/tomcat                        Apache Tomcat is an open source implementati…   5                                       
maluuba/tomcat7-java8                 Tomcat7 with java8.                             3                                       
rightctrl/tomcat                      CentOS , Oracle Java, tomcat application ssl…   3                                       [OK]
amd64/tomcat                          Apache Tomcat is an open source implementati…   2                                       
arm64v8/tomcat                        Apache Tomcat is an open source implementati…   2                                       
fabric8/tomcat-8                      Fabric8 Tomcat 8 Image                          1                                       [OK]
99taxis/tomcat7                       Tomcat7                                         1                                       [OK]
primetoninc/tomcat                    Apache tomcat 8.5, 8.0, 7.0                     1                                       [OK]
oobsri/tomcat8                        Testing CI Jobs with different names.           0                                       
swisstopo/service-print-tomcat        backend tomcat for service-print the true, …   0                                       
picoded/tomcat7                       tomcat7 with jre8 and MANAGER_USER / MANAGER…   0                                       [OK]
cfje/tomcat-resource                  Tomcat Concourse Resource                       0                                       
jelastic/tomcat                       An image of the Tomcat Java application serv…   0                                       
s390x/tomcat                          Apache Tomcat is an open source implementati…   0                                       
[root@iZx4xwfjh1zsdsZ /]# 

参数解释:

NAME为镜像名称

DESCRIPTION为镜像描述

STARS为社区关注度(与GitHub开源社区的STARS同理)

OFFICIAL表示是否为官方发布(一般适合我们开发使用)

AUTOMATED表示是否自动化操作

二、这里我们下载官方发布的Tomcat 8.0镜像

下载命令:docker pull 镜像名称(对应上步操作结果中的NAME值):版本号

[root@iZx4xwfjh1zsdsZ /]# docker pull tomcat:8.0
Using default tag: latest
latest: Pulling from library/tomcat
54f7e8ac135a: Pull complete 
d6341e30912f: Pull complete 
087a57faf949: Pull complete 
95065f220961: Pull complete 
0887630ce576: Pull complete 
c375d1959fab: Pull complete 
e00a5e6055cc: Pull complete 
8319f5fb56cf: Pull complete 
258c74eb25ab: Pull complete 
6eb86d11d371: Pull complete 
adb5a4a6adf5: Pull complete 
4685b434f297: Pull complete 
Digest: sha256:e394c2f94eee344300e68d7183f3f19d272316f9691b280ac0e3911ea610e590
Status: Downloaded newer image for tomcat:latest
[root@iZx4xwfjh1zsdsZ /]# 

complete!Tomcat镜像仓库下载完成!

三、查看机器上Docker中的所有镜像

查看本机器的Docker镜像命令:docker images

[root@iZx4xwfjh1zsdsZ /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              8.0                 ef6a7c98d192        2 months ago        356MB
[root@iZx4xwfjh1zsdsZ /]# 

可以看到除表头以外只有一个我们刚安装的tomcat镜像!

参数解释:

REPOSITORY表示镜像名称

TAG表示镜像版本(如果在下载时没有明确指定版本,它会优先下载最新版本latest)

IMAGE ID表示这个镜像的ID号唯一标识,在后面创建容器会用到

CREATED表示最近更新时间,SIZE表示大小

四、启动(创建)Tomcat容器(根据下载的Tomcat镜像创建对应的容器)

容器启动命令:docker run --name 参数1 -p 参数2 -v 宿主机与容器交互的目录文件 -d 

[root@iZx4xwfjh1zsdsZ /]# docker run --name tomcat -p 8080:8080 -v /usr/test:/usr/local/tomcat/webapps/test -d tomcat
32640f3a4becce5a67497109984f7617313adea64d0c57867459e37aaebc750c

启动成功!

参数解释:

--name tomcat 表示上一步安装的镜像名称

-p 8080:8080 表示将容器的8080port映射到本机的8080port端口

-v /usr/test:/usr/local/tomcat/webapps/test 表示将本机下的usr目录下的test文件夹映射到容器tomcat的webapps文件夹下

-d tomcat 表示在后台守护进程的方式启动(不进入后台启动),指定上一步安装的镜像名称

五、远程访问Tomcat首页

successful!

大家都知道安装Tomcat之前一定要安装JDK,但是我的服务器是新买的,只安装了Docker。因为Tomcat镜像已经把Tomcat的所有依赖项都打包到这个镜像中,所以我们只需要下载镜像就OK了,其他镜像也是一样的!

注:这步有的人可能会访问不到,如果之前的安装步骤都正确无误,就检查以下两点:

(1)服务器是否打开了这个端口,或者可以直接关闭防火墙(生产环境不建议)   

         关闭默认防火墙命令:systemctl stop firewalld.service

(2)官方服务器购买站(阿里云、腾讯)是否对当前服务器开放了这个端口(如:安全组规则是否打开了这个端口)

六、到此为止,Docker的Tomcat镜像开发篇就已经接近尾声了!

最后再给大家推荐几个我在工作中常用的Docker命令:

docker ps -a : 查看已经在运行的所有容器

docker port 容器ID : 查看容器的内外端口映射

docker logs 容器ID : 查看容器的日志

docker stop 容器ID : 关闭容器(未删除)

docker start 容器ID : 开启容器

docker rm 容器ID : 删除对应的容器(注:删除之前必须要stop,否则删不掉的)

docker images : 查看机器上所有的镜像

docker rmi 镜像ID : 删除对应的镜像(注:删除之前必须停止或删除它创建的所有容器)

docker save 镜像ID -o 文件 : 将指定的镜像打包(例:docker save ef6a7c98d192 -o /home/wuyongfei/springboot-demo.tar)

docker load -i 文件夹名称(自定义)  将指定的镜像移植到另外一台机器上在Docker中进行加载,再按照上面的步骤三查看镜像,启动容器就实现了Docker镜像的移植(例:docker load -i springboot-demo.tar)

六、经验之谈

希望大家先对Docker的概念进行理解,自己再安装MySQL,Nginx以及其他的开发环境,与上面的流程大同小异!在安装其他环境有问题的或者对Docker概念还是不太明白的,欢迎加博主QQ:1402218191 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Docker高效搭建开发环境(详细教程) 的相关文章

  • 无法从我的电脑上使用 traefik 后面的 gitlab 进行 git 克隆

    这是我的 gitlab 和 traefik 配置 version 3 7 services gitlab web image gitlab gitlab ce latest restart always hostname gitlab ro
  • docker repo 解决映像构建期间的错误错误(检查存储库文件)

    我在构建 docker 映像时遇到问题 并尝试了不同的 DNS 选项 但似乎运气不佳 Docker版本1 9 1 构建a34a1d5 回购还活着 为了运行我使用的容器docker run dns 192 168 1 1 d ti name
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • Docker Compose 无法连接到数据库

    我使用 Nestjs 作为后端 并使用 typeorm 作为 ORM 我尝试在 docker compose 文件中定义我的数据库和应用程序 如果我将数据库作为容器运行 并从本地计算机运行应用程序 那么它运行良好 我的程序连接并创建表等 但
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • 即使使用“autoReconnect=true”,MySql JDBC 也会超时[重复]

    这个问题在这里已经有答案了 有时 我的 Java Tomcat6 Debian Squeeze 应用程序无法与 MySql 服务器通信 Tomcat 应用程序位于前端服务器上 而 MySql 位于单独的 仅限 MySql 的机器上 一个典型
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 非生产模式下的 Elasticsearch docker 容器可消除 vm.max_map_count=262144 要求

    如何配置 elasticsearch docker 容器 elasticsearch 7 5 0 以使用更少的资源并在非生产模式下运行 我想在 Jenkins 和我的桌面上运行容器 并且满足以下要求这个弹性文档 https www elas
  • 在同一个 nginx 服务器块上公开多个 api uri

    Goal 我的目标是在同一个 nginx 服务器上设置多个后端 api 容器 http localhost 80 api account gt 调用 http account service 9000 http localhost 80 a
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 有没有计算Docker容器开销的公式?

    假设我想同时运行多个 Docker 容器 我可以使用任何公式来提前了解单个 Docker 主机可以同时运行多少个容器吗 即 有多少 CPU 内存等 我必须考虑容器本身吗 它本身不是一个公式 但您可以通过检查 Linux 控制组来收集有关容器
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐

  • Python趣味代码整合之提升学生编程兴趣

    这篇文章主要是整合一些趣味代码 一方面自己对这些内容比较感兴趣 另一方面希望这些代码能提升学生的编程兴趣 其主旨是代码能在我的电脑上运行并有些趣味 参考资料 知乎 可以用 Python 编程语言做哪些神奇好玩的事情 知乎 学习Python的
  • Windows Server 2012 R2超级详细安装教程(附下载链接)

    一 百度网盘 链接 点我下载 注意 包内有安装教程和镜像 以下是主要步骤 1 打开安装好的虚拟机 2 两种类型随意选择 第一种 典型 比较简单 快速建立虚拟机 安装比自定义的步骤较少 3 选择虚拟机硬件兼容性 我们选择当前硬件兼容性 Wor
  • 服务器连接异常系统无法登录,win10系统无法登录LOL提示“服务器连接异常”的解决方法...

    很多小伙伴都遇到过win10系统无法登录LOL提示 服务器连接异常 的困惑吧 一些朋友看过网上零散的win10系统无法登录LOL提示 服务器连接异常 的处理方法 并没有完完全全明白win10系统无法登录LOL提示 服务器连接异常 是如何解决
  • 【C++11智能指针】unique_ptr概述、初始化、常用操作、返回unique_ptr、指定删除器、尺寸

    文章目录 1 unique ptr概述 2 unique ptr的初始化 2 1 直接初始化 2 2 make unique函数 3 unique ptr不支持拷贝构造和拷贝赋值 4 unique ptr支持移动构造和移动赋值 5 uniq
  • thanos配置promethes高可用

    参考文档 https www kubernetes org cn 7217 html prometheus高可用方案 prometheus官方的高可用有几种方案 HA 即两套 prometheus 采集完全一样的数据 外边挂负载均衡 HA
  • 从技术布局看,苹果离元宇宙还有多远?

    扎克伯格的Meta元宇宙令人津津乐道 从2021年10月28日更名之始 元宇宙 Metaverse 便开始在各大媒体及圈内人士间被不断谈论 但在此之外 元宇宙的另一个 实力选手 依旧赫然在列 扎克伯格一直把它看作是竞争对手 在一次内部的谈话
  • HarmonyOS开发:解决DevEco Studio低版本导入高版本项目运行失败问题

    前言 基于DevEco Studio 4 0 Beta2 hvigorVersion为3 0 2 开发了一个项目 上传到了远程仓库 当同事下载后 却始终无法运行 频繁报错 由于API都是使用的9 第一感觉就是开发环境不同 于是 让其发来了他
  • go 进阶 gin底层原理相关: 四. gin中间件底层原理

    目录 一 gin 中间件基础 二 中间件初始化流程 1 初始化中间件保存到RouterGroup的HandlersChain数组中 HandlersChain是什么 2 整合中间件函数与业务相关的mainHandler构建前缀树 三 中间件
  • Matlab:自定义绘图颜色

    Matlab 自定义绘图颜色 在 Matlab 中绘制图形时 我们可能需要使用自己指定的颜色来填充线条 散点或者其他图案 这可以让我们的图像更加美观和易读 下面介绍两种常见的设置自定义颜色的方法 使用 RGB 颜色值 RGB 颜色值是一种由
  • idea如何导入一个spring boot 项目

    1 菜单 gt File gt New gt Project From Existing Sources 2 选中项目中的pom xml 3 点击OK 然后后面就一路 Next 直到 finish就行了 需注意你的idea工具中项目jdk和
  • 面试必问 - AES 加密 和 RSA 加密是什么?它们有什么区别

    1 什么是 AES 加密 和 RSA 加密 AES Advanced Encryption Standard 高级加密标准 AES 是一种对称加密算法 即加密和解密使用相同的密钥 AES 的密钥长度可以选择 128 位 192 位或 256
  • Vue中通过localStorage存储信息并获取显示到页面中

    这两天写了一个日程表功能 包括日程表内容的增加 删除功能 解决办法一 可以在后端写接口 把日程表的内容写到数据库中 再通过接口从数据库中获取 通过后端的接口来对数据进行增删改查 解决办法二 这次我没想着做后端接口 因为是写在浏览器首页面中
  • 怎样优化Pentium系列处理器的代码 From:http://www.codingnow.com/2000/download/pentopt.htm#26_14

    How to optimize for the Pentium family of microprocessors Copyright 1996 2000 by Agner Fog Last modified 2000 07 03 Cont
  • Redis集群实现分布式Session共享

    Cookie 保存在客户端浏览器中 而 Session 保存在服务器上 客户端浏览器访问服务器的时候 服务器把客户端信息以某种形式记录在服务器上 这就是 Session 客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就
  • Redis分布式锁的使用和实现原理详解

    这篇文章主要给大家介绍了关于Redis分布式锁的使用和实现原理的相关资料 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 模拟一个电商里面下单减库存的场景 第一版代码 存
  • nn.LayerNorm的实现及原理

    LayerNorm 在transformer中一般采用LayerNorm LayerNorm也是归一化的一种方法 与BatchNorm不同的是它是对每单个batch进行的归一化 而batchnorm是对所有batch一起进行归一化的 y x
  • 是面试官放水,还是公司实在是太缺人?这都没挂,腾讯原来这么容易进···

    本人211非科班 之前在字节和腾讯实习过 这次其实没抱着什么特别大的希望投递 没想到腾讯可以再给我一次机会 还是挺开心的 本来以为有个机会就不错啦 没想到能成功上岸 在这里要特别感谢帮我内推的同学 中间投递比较曲折 是他帮了我很多 非常负责
  • ARM64架构-Ubuntu20更换国内镜像源

    前言 在嵌入式开发中 常用到ARM64的开发平台 进行下载东西时想换国内源 下面以中科大源为参考 一 什么是源 其实吧它就像苹果和案桌的软件应用商店一样 为Linux用户提供软件下载及更新服务的 Linux家族有三个软件源系统 yum源 使
  • 逆向crackme之ESp定律脱壳

    1 前言 此题来自攻防世界高手进阶区的一道逆向题目 crackme 通过对可执行程序进行脱壳 该壳为北斗的壳 涉及到ESP定律 大体流程是找到call处的ESp 在数据窗口中跟随 下个硬件访问断点 就到了OEP处 用ODdump脱壳就行了
  • 使用Docker高效搭建开发环境(详细教程)

    在学习Docker镜像和容器之前 先给大家介绍下Docker的概念 在理解概念的基础上可以举一反三 1 Docker的核心为镜像和容器 有JAVA基础的小伙伴们可以理解为镜像就是JAVA中的类 容器为相关类的对象 一个镜像可以创建多个容器