Docker安装+HelloWorld+运行Tomcat

Docker基础 - 入门基础和 Helloworld 著作权归https://pdai.tech所有。链接:https://pdai.tech/md/devops/docker/docker-02-basic.html。 阅读详情

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

上一篇已经讲解了为什么需要Docker?,相信大家已经对Docker有一个简单的认识了。

这篇我来讲讲Docker入门的相关概念和常用的命令,跟大家一起入门Docker!

Docker

一、Docker相关术语

一般从零学习一门技术(语言),都是从HelloWorld开始的,但这次我偏不。我先来讲讲Docker的相关术语~

  • 镜像
  • 容器
  • 仓库

在之前分享的Docker科普文,也通俗易懂地讲解了这三个术语:

镜像、容器、仓库的概念可以类比代码、进程、github


如果让我来给完全不懂Docker解释这三个术语,我会这样做:

  • 镜像就是镜像,我们重装系统/搞虚拟机的时候都要用镜像,没镜像哪来系统
  • 我们安装完镜像,就可以跑起来一个系统(Windows也好、Centos也好),于是我们就可以愉快地使用我们通过镜像安装好的系统了。
    • 在Docker中,通过镜像运行起来的东西叫做容器
  • 仓库就是专门存放镜像的地方

镜像(image)【image除了图片/图像的意思外,还有镜像的意思】

容器(container)通过镜像运行起来的实例

仓库(reposity)专门存放镜像的地方

二、安装Docker与HelloWorld

首先需要明确自己所使用的环境,就我而言,我使用的是CentOS 7。据我所知,CentOS 7和CentOS 6.8在安装中都是有区别的。

所以,如果你想跟着我一起安装Docker,先明确自己的版本是否是CentOS 7,如果不是只能找其他的教程来进行安装。


cat /etc/redhat-release

// 结果

CentOS Linux release 7.3.1611 (Core)


2.1安装Docker

首先我们需要安装GCC相关的环境:


// 安装GCC相关的环境

yum -y install gcc

yum -y install gcc-c++

如果曾经安装过Docker(旧版本)的话,得先卸载,如果没有安装过,跳过这一步:


// 卸载旧Docker版本

yum -y remove docker docker-common docker-selinux docker-engine

安装Docker需要的依赖软件包:


// 安装Docker需要的依赖软件包:

yum install -y yum-utils device-mapper-persistent-data lvm2

设置stable镜像仓库(注意:我们这里使用国内的镜像地址【因为Docker 官网给出的地址在国外,太慢了!】)


// 设置stable镜像仓库:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引:


// 更新yum软件包索引:

yum makecache fast

安装DOCKER CE(注意:Docker分为CE版和EE版,一般我们用CE版就够用了)


// 安装DOCKER CE:

yum -y install docker-ce


启动Docker


// 启动Docker

systemctl start docker

2.2HelloWorld走起

到上面为止,我们已经启动了Docker,下面我们检验一下我们运行的Docker是否正常。

首先,我们可以看看下载回来的Docker版本:


// 查看Docker的版本

docker version

我下载的Docker版本

版本都查到了,说明Docker是运行起来的啦。我们来一发HelloWorld:


// docker的HelloWorld

docker run hello-world


效果:

Docker中的HelloWorld

简单解释:docker run hello-world这条命令指示Docker去运行hello-world这个镜像,但是我们本地没有这份镜像啊。所以Docker就去DockerHub拉取了一份hello-world镜像,并运行起来了(生成容器)。这个hello-world容器的功能就是一句话:Hello from Docker!。所以我们在屏幕上就可以看到这句话了。

2.3配置加速器

由于安装的Docker默认是去Docker Hub找我们想要的镜像的,我们知道国外肯定没国内的快,所以我们一般会配置一个加速器

国内的镜像仓库一般我们使用的有:

  • 阿里云
  • 网易云
  • // 等等

首先,我们到https://promotion.aliyun.com/ntms/act/kubernetes.html搜索一下镜像,比如Tomcat (这就需要我们注册/登录一个阿里云账号)

随后,我们可以在镜像加速器上找到我们的url:

镜像加速地址

我们依照阿里云给出的教程,就可以配置加速器了。




mkdir -p /etc/docker


tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://cubmirje.mirror.aliyuncs.com"]
}
EOF



让配置生效,并重启Docker


systemctl daemon-reload

systemctl restart docker

不知道大家学到这里,觉得怎么样。如果是我,我肯定觉得没意思。搞了个HelloWorld案例,就打印了一句话,没意思。

三、体验Docker

假如说,要在一台全新的系统上将Tomcat跑起来。我们需要做以下的事:

  • 安装Java,配置环境变量
  • 安装Tomcat

如果我们用了Docker,我们是这样做的:直接在仓库里拉一份tomcat的镜像下来,将镜像跑起来就,就完事了!

拉取Tomcat镜像:


docker pull tomcat

拉取Tomcat镜像

docker images查看是否有拉取到的tomcat


docker image ls


拉取到的Tomcat镜像:

拉取到的Tomcat镜像

运行这个Tomcat镜像,生成容器


docker run -it -p 9999:8080 tomcat

我们可以发现,这个Tomcat运行起来了!

Tomcat运行起来了

(滚犊子,没运行起来,踩坑了!,一直卡在INFO: Deploying web application directory这句话上了。我还一直想,为啥我访问不到呢,才发现没运行起来)

3.1解决docker运行Tomcat卡住的问题

原因:

docker+tomcat 启动时非常慢,一般正常启动几十秒的,发现docker+tomcat启动竟需要几分钟,不可思议

根本原因是 SecureRandom 这个 jre 的工具类的问题。那为什么 SecureRandom generateSeed 这么慢,甚至挂在 Linux 操作系统呢?

Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类 SecureRandom 的实例作为会话 ID。

SecureRandom generateSeed 使用 /dev/random 生成种子。但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待

首先,我们先以后台的方式运行Tomcat镜像:


docker run -tid  tomcat

以bash的方式进入到容器中:


docker exec -it 4a471223bfc4(为你正在运行容器的id) /bin/bash

为容器安装vim:


apt-get update


apt-get install vim

修改对应的java.security文件


cd /docker-java-home/jre/lib/security

vim  java.security

找到 securerandom.source=file:/dev/random,修改为securerandom.source=file:/dev/./urandom

在Tomcat镜像下创建一个属于我们自己的Tomcat镜像(这个镜像安装了vim,修改了配置文件)


docker commit -m "change java.security" -a "3y" 4a471223bfc4(为当前容器的id) mytomcat

于是我们就生成了mytomcat镜像,就可以使用mytomcat:


docker run -it -p:9999:8080 mytomcat

效果图:

使用Docker容器成功启动Tomcat

参考资料:

除了Tomcat,大家还可以去拉个mysql、redis、centos等等镜像来玩玩~~

四、命令说明

Docker的命令无非就是对镜像、对容器进行增删改查。我是不太喜欢拉出每个命令来写文章的,所以这些命令还是大家自行学习吧~~

之前收集资料的时候,我也找到了一张关于Docker的思维导图,对着来看看,感觉就没问题了:

Docker的思维导图

关注我的公众号,回复 脑图 即可获取原图(.xmind和.png格式)

最后

留下几个问题:

  • 我们知道Tomcat运行起来需要Java的支持,那么我们在Docker拉取下来的Tomcat镜像是不是也有Java环境呢?
  • 容器退出了(好比Linux进程退出了),容器的数据就没了,我们想要保留容器内的数据,怎么办?
  • 从上面我们可以看出,通过commit可以在原有的容器基础上,创建出属于我们自己的镜像,还有其他方式创建新的镜像吗?

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

帅的人都关注了

觉得我的文章写得不错,不妨点一下赞!

linux(ubuntu)+docker+nginx+tomcat 运行第一个helloworld,并用nginx实现简单的负载均衡 ubuntu+docker+nginx+tomcat 运行第一个Hello,World! 一、ubuntu安装docker 更新软件包缓存 sudo apt update 安装docker-ce sudo apt install docker-ce 设置开机启动docker sudo systemctl enable docker sudo systemctl start docker 测试运行 sudo docker run hello-world 添加当前用户到docker用户 阅读详情

相关推荐

Docker精髓超强总结,学习docker看这一篇就够了

文章目录基础(一)安装与卸载(二)Docker镜像加速(三)启动与停止Docker HelloWorldDocker基本操作Tomcat注意保留字指令案例一,自定义centos镜像构建一个容器运行测试可以看出现在也支持了vim和ifconfig命令查看历史变成记录二,CMD与ENTRYPOINT指令的区别CMD指令ENTRYPOINT指令三,自定义tomcat容器构建容器运行容器查看是否运行成功其...

TrueDei 4986

tomcat启动卡住也不报错什么原因_docker安装tomcat

1.查找Docker Hub上的tomcat镜像docker search tomcat2.拉取官方的镜像docker pull tomcat3.查看镜像docker images tomcat4.使用Tomcat默认的配置来启动一个Tomcat容器docker run -d -p 8080:8080 --name tomcat tomcat:latest如果报错:docker: Error re...

weixin_39598472的博客 681

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 858

Docker入门为什么可以这么简单?

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y上一篇已经讲解了为什么需要D...

3y 689

【飞腾平台安装windows arm 11系统】

本文提供国内的百度网盘链接供下载使用:链接: https://pan.baidu.com/s/1_cftVdoX40k0M6zVTmFq8Q?3)快速迁移虚拟机技巧:如果是迁移已经安装好的虚拟机的使用场景,除了导出镜像外,也可直接复制安装好虚拟机的整个文件夹到指定的存储目录,选定好其中的任意qcow2文件后即可快速启动。可在飞腾软件平台点击网盘链接获取对应系统的deb包(麒麟和统信)以及phyvirt·app,下载地址:https://www.phytium.com.cn/developer/

firefly_cv的博客 8937

Element-UI全面入门与实战技巧

Element-UI 是一套基于 Vue 2.0 的桌面端组件库,由饿了么前端团队开发并维护。它提供了一系列丰富的 UI 组件,旨在帮助开发者快速构建高效、美观的 Vue 应用程序。Element-UI 是一款遵循 Ant Design 设计规范的 Vue UI 库,它涵盖了从按钮、输入框、选择器到表格、标签、进度条等众多常用的界面元素。Element-UI 的组件不仅功能全面,而且易于定制,使得开发者可以快速实现个性化的页面设计。Element-UI 的特点包括:在使用 Element-UI 之前,需要确

全世界的博客 2863

Docker安装以及HelloWorld

嘿,好久不见~ 今天给大家Centos7更新安装Docker, 什么是docker?我们来看看百度百科的介绍: 沙箱,又是什么鬼???不知道大家听过没有支付宝支付的沙箱环境 哈哈哈 里面数不完的钱~ 感兴趣可以去玩一下。 不管了,我们新接触一个事物之前肯定要了解他的有点,我们为什么学他!它能给我们带来什么价值! 看了这么多优点,我们来学习一下这个神奇的东西吧。 Docke...

猿码优创 799

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3287

Docker 教程

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

泠山的博客 1万+

【51单片机实物】基于51单片机设计的简易直流电机调测速系统(可用在普中开发板)

功能任务描述:将设置的转速与当前测量的转速比较,得出差值用于控制DAC0832的输出电压,从而控制直流电机的转速,使转速逐渐达到设置转速。在LED上显示设置转速(左2位LED)和当前转速(右2位LED),转速显示采用十进制。控制过程中,当前转速显示不断变化。*直流电机转速范围0-96r/s,误差±1r/s

嵌入式阿齐Archie 1万+

【agent实战教程】OpenClaw多个agent一文通

一个合格的独立agent,必须具备6个完全独立的专属组件独立组件路径规则核心要求不独立的严重后果唯一agentId配置文件中全局唯一,不能重复,建议用英文+数字,不要有特殊字符agent配置冲突,消息派单错误,会话串线独立工作区(workspace)建议每个agent一个独立文件夹,不要共用人设、记忆、规则混在一起,agent人设崩塌,对话串线独立状态目录(agentDir)固定系统自动生成,绝对禁止多个agent复用同一个agentDir。

海兰 649

centos mysql php tomcat_Docker安装+HelloWorld+运行Tomcat

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y上一篇已经讲解了为什么需要Docker?,相信大家已经对Docker有一个简单的认识了。这篇我来讲讲Docker入门的相关概念和常用的命令,跟大家一起入门Docker!一、Docker相关术语一般从零学习一门技术(语言),都是从HelloWorld开始的...

weixin_36212400的博客 74

全志平台camera驱动开发(4)NVP6134芯片4路模拟视频BT656输入

前言 1. 调试平台: 全志V5/T7等有BT656或BT1120的并行接口,理论有DVP接口的一般都支持 2. NVP6134可使用多路视频同时输入 硬件连接 模拟camera1 模拟camera2 NVP6134 ------>NVCSI0 ...

jzwjzw19900922的博客 3532

centos7 tomcat_Docker安装+HelloWorld+运行Tomcat

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y上一篇已经讲解了为什么需要Docker?,相信大家已经对Docker有一个简单的认识了。这篇我来讲讲Docker入门的相关概念和常用的命令,跟大家一起入门Docker!一、Docker相关术语一般从零学习一门技术(语言),都是从HelloWorld开始的...

weixin_39919089的博客 85

工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!

工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!文末提供下载地址。 下载地址: 链接:https://pan.baidu.com/s/11S6XDq9Eaa3DG3VKRMBIPg

智慧空间实验室 1019

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

centos7卸载docker_Docker入门为什么可以这么简单?

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y上一篇已经讲解了为什么需要Docker?,相信大家已经对Docker有一个简单的认识了。这篇我来讲讲Docker入门的相关概念和常用的命令,跟大家一起入门Docker!Docker一、Docker相关术语一般从零学习一门技术(语言),都是从Hell...

weixin_39840729的博客 86

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Docker 安装及使用,加速镜像(初识Docker)

Docker初识初识DockerDocker安装Windows10安装镜像加速Windows镜像加速Mac安装插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 初识Docker 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可

.G();的博客 966

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

阿里云的centOS 7 安装docker

因为是阿里云,所以可以直接可以安装,并且直接更换好阿里云的镜像,免得从国外的网站获取的慢的问题 代码 curl -fsSL https://get.docker.com/ | sh 就OK了 然后启动docker service docker start 再使用 ps -ef | grep docker 就可以看见docker的进程和已经更换了源了 接下来就是下载一...

树暖 182

Linux学习(十)Docker安装、使用及总结

目录序Docker 架构Docker的应用场景正文Ubantu16.04下安装Docker环境Docker配置自己的镜像helloworldDocker配置Tomcat镜像总结 序 Docker文档:https://docs.docker.com/get-started/ Docker 架构 1、Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容...

cungudafa的博客 763
上一篇: 程序员可以选择哪些平台写技术博客?
下一篇: RPC太太太太太太太容易理解啦!
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值