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

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
S
Securelist
J
Java Code Geeks
Recorded Future
Recorded Future
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
S
Secure Thoughts
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
Martin Fowler
Martin Fowler
The Last Watchdog
The Last Watchdog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
O
OpenAI News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
H
Heimdal Security Blog
SecWiki News
SecWiki News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 【当耐特】
T
Troy Hunt's Blog
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
Netflix TechBlog - Medium
A
Arctic Wolf
The Hacker News
The Hacker News
I
Intezer
S
Schneier on Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
宝玉的分享
宝玉的分享
P
Privacy & Cybersecurity Law Blog
Stack Overflow Blog
Stack Overflow Blog
T
Tor Project blog
小众软件
小众软件
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
Jina AI
Jina AI

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? - 技术改变视野 一个最简单的实例理解Semaphore在Java中的作用 - 技术改变视野 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 实例带你学会简单的Java Thread多线程 - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 - 技术改变视野 一个实例带你理解JavaBean - 技术改变视野 WebFilter-SpringBoot过滤器注解实例讲解 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 - 技术改变视野 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 - 技术改变视野 一个实例理解Java Runnable多线程用处与用法 - 技术改变视野 从零开始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文件尾部多/少/缺字节解决方法 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野
大白话之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镜像。

点我跳转至下一章