惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
ThreatConnect
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
H
Help Net Security
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
A
Arctic Wolf
G
Google Developers Blog
量子位
U
Unit 42
I
InfoQ
V
V2EX
F
Fox-IT International blog
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
博客园 - 三生石上(FineUI控件)
T
The Exploit Database - CXSecurity.com
T
Tailwind CSS Blog
SecWiki News
SecWiki News
Know Your Adversary
Know Your Adversary
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
The Hacker News
The Hacker News
Project Zero
Project Zero
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
Recent Commits to openclaw:main
Recent Commits to openclaw:main
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
C
Cisco Blogs
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
Recorded Future
Recorded Future
T
Tenable Blog
W
WeLiveSecurity
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
T
The Blog of Author Tim Ferriss
www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
Docker
C
Cybersecurity and Infrastructure Security Agency CISA
PCI Perspectives
PCI Perspectives

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 一个实例带你理解JavaBean WebFilter-SpringBoot过滤器注解实例讲解 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 实例带你学会简单的Java Thread多线程 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 一个实例理解Java Runnable多线程用处与用法 一个最简单的实例理解Semaphore在Java中的作用 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 大白话之Docker(壹):快速入门&&简单官方实例 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level Java日志插件-Slog4J下载 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) Log-MySQL root用户登录后无法查看数据库全部表/正常访问数据库 Access denied for user 'root'@'localhost' to database 大白话之Docker(叁):制作一个运行Tomcat服务端的Docker镜像 Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,清除「敏感信息」 将Tomcat、MySQL从Linux迁移到Windows的心路历程(干货):令人恐惧的字符编码 Spring: java.lang.NoSuchMethodError: clearCache | ClassNotFoundException | Error during artifact deployment 思路及解决办法 大白话之Java反射-初学最迷的概念:能干啥?咋用? 大白话之Java面向接口编程:最“正经”的中文实例讲解,看不懂来打我! 大白话 | 课堂实践:使用Iterator对数组进行遍历 大白话之fail-fast | fail-safe:为什么会有这个机制?它有什么作用? 刨根问底 | 大白话:在使用注解后,框架是怎么知道你哪个方法使用了注解的?用@RequestMapping注解举例详解! 大白话之必会Java Atomic | 线程一点也不安全(二):Atomic的ABA问题会导致什么情况?如何解决? 随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 随笔 | Tomcat:续-从Linux迁移到Windows编码问题彻底解决 大白话之AutoClosable接口 | try-with-resources:JDK1.7的新特性,提高重复回收效率 大白话之Java多线程join方法:开局一张图,试学一分钟,你就费和我一样,理解介个方法 大白话之Java Stream流:将类数组流化,便捷批量修改,通俗讲解! Java 困扰三周の问题:使用byte[]或skip()方法读取字节流Stream文件尾部多/少/缺字节解决方法
大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野
adlered · 2019-12-09 · via 技术改变视野

前言

看了上一章,想必你已经对Docker有所了解。
如没有阅读过第一章,点我可以跳转至第一章

Tomcat是基于Apache、支持JavaWeb环境的Web服务端。能对外提供网站服务。

本篇教程我们将简单建立一个Tomcat服务器,并部署一些内容到Tomcat中。

应用镜像到容器

取得镜像

首先,我们从Docker源中搜索已经配置好环境的镜像,然后应用到本地。

输入命令:

1✘ adler@A ~/docker/tomcat: search tomcat
2NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
3tomcat                                     Apache Tomcat is an open source implementati…   2343                [OK]
4tomee                                      Apache TomEE is an all-Apache Java EE certif…   64                  [OK]
5dordoka/tomcat                             Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   53                                      [OK]
6davidcaste/alpine-tomcat                   Apache Tomcat 7/8 using Oracle Java 7/8 with…   34                                      [OK]

眼花缭乱。仔细看有一列OFFICIAL,为OK的话,说明已经经过了官方的认证,我们使用第一行的Tomcat:这是Tomcat官方提供的镜像。

下载镜像

输入命令:

 1adler@A ~/docker/tomcat: docker pull tomcat
 2Using default tag: latest
 3latest: Pulling from library/tomcat
 4e79bb959ec00: Download complete
 5d4b7902036fe: Download complete
 61b2a72d4e030: Pulling fs layer
 7de423484a946: Waiting
 8ceaac3b844f7: Waiting
 988f01b722a52: Waiting
10c23be56a9ac1: Waiting
11d852ffd6d31f: Waiting
1211775a3d792d: Waiting
1313fdd17462ac: Waiting
142092995a1e54: Waiting
15latest: Pulling from library/tomcat
16e79bb959ec00: Pull complete
17d4b7902036fe: Pull complete
181b2a72d4e030: Pull complete
19de423484a946: Pull complete
20ceaac3b844f7: Pull complete
2188f01b722a52: Pull complete
22c23be56a9ac1: Pull complete
23d852ffd6d31f: Pull complete
2411775a3d792d: Pull complete
2513fdd17462ac: Pull complete
262092995a1e54: Pull complete
27Digest: sha256:409501d73062ab508930eab827fcb19d7d3f7e9bbe63bc6d587114c6af4bee12
28Status: Downloaded newer image for tomcat:latest

通过此命令,我们将名为tomcat的镜像pull到了本地的Docker中。

查看Docker中的镜像

此时,我们要查看镜像是否已经获取成功。

输入命令:

1adler@A ~/docker/tomcat: docker images
2REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
3tomcat                            latest              5a069ba3df4d        14 hours ago        465MB

启动!

现在,我们可以启动镜像了。

输入命令:

1adler@A ~/docker/tomcat: docker run -itd -p 8080:8080 --name tomcat tomcat:latest

参数解释:

run 用于运行镜像为容器

1-itd:
2-t 让Docker分配一个伪终端并绑定到容器的标准输入上
3-i 则让容器的标准输入保持打开
4-d 在后台运行,并返回一个容器ID

-p 8080:8080 将容器中的8080端口映射到外部的8080端口
--name tomcat 设置容器名称为tomcat
tomcat:latest 镜像名:版本,输入latest则自动匹配最新的版本。

访问测试

现在,访问http://localhost:8080/,你应该可以访问到Tomcat的默认页了。

image.png

编辑修改Tomcat

刚才我们成功启动了Tomcat镜像,下面我们将对该容器中的文件进行添加、修改和删除的操作。

由于容器在关闭后里面写入的数据会丢失,而容器来自于镜像,当每次我们运行run时,Docker会将指定镜像实例化为一个容器。所以如果我们修改镜像的内容,那么更改就会被保存了。

修改容器

我们要先基于容器修改完成,然后将修改覆盖到镜像。
先查看正在运行中的容器,并记住容器ID:

1 adler@A ~/docker/tomcat: docker container ls
2CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
379f9a1ed1578        tomcat:latest                     "catalina.sh run"        44 seconds ago      Up 44 seconds       0.0.0.0:8080->8080/tcp   tomca1tw
4d92264056899        vulnerable-node_vulnerable_node   "/app/start.sh"          6 days ago          Up 8 hours          0.0.0.0:3000->3000/tcp   vulnerable-node_vulnerable_node_1
574870fdf32ac        vulnerable-node_postgres_db       "docker-entrypoint.s…"   6 days ago          Up 8 hours          0.0.0.0:5432->5432/tcp   vulnerable-node_postgres_db_1

我们使用docker exec来调用出该容器的Bash终端:

1adler@A ~/docker/tomcat: docker exec -it 79f9 bash
2root@79f9a1ed1578:/usr/local/tomcat# echo "HelloWorld!" > webapps/ROOT/index.jsp

79f9是上方查询的容器ID的前四位,我们不需要输入完整的容器ID就可以对容器进行操作。

上面,我们将index.jsp的内容覆盖为了HelloWorld!,访问页面,验证页面内容更改成功。

image.png

更新镜像

然后,将我们修改后的容器提交到镜像中:

1adler@A ~/docker/tomcat: docker commit 79f9 tomcat:latest

我们将容器79f9的更改commit提交到了tomcat镜像的latest版本中。

重启容器测试

现在,尝试使用docker container stop [容器ID]停止容器,并重新使用docker run来部署一个新的容器。打开测试,更改已经生效。

后语

此时,你已经能进行Docker的各种基础操作了。
下一章我们将讲述如何自己制作一个Tomcat的Docker镜像。

点我跳转至下一章