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

推荐订阅源

T
Tor Project blog
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
G
Google Developers Blog
J
Java Code Geeks
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Cisco Talos Blog
Cisco Talos Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
I
Intezer
Jina AI
Jina AI
T
Tenable Blog
P
Palo Alto Networks Blog
Project Zero
Project Zero
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
F
Full Disclosure
Cloudbric
Cloudbric
量子位
H
Heimdal Security Blog
K
Kaspersky official blog
有赞技术团队
有赞技术团队
罗磊的独立博客
V
Vulnerabilities – Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
阮一峰的网络日志
阮一峰的网络日志
Vercel News
Vercel News
Recent Announcements
Recent Announcements
WordPress大学
WordPress大学
GbyAI
GbyAI
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
Recorded Future
Recorded Future
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
Webroot Blog
Webroot Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
The Exploit Database - CXSecurity.com
Apple Machine Learning Research
Apple Machine Learning Research
C
Cybersecurity and Infrastructure Security Agency CISA
H
Hacker News: Front Page
Latest news
Latest news

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | 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(壹):快速入门&&简单官方实例 - 技术改变视野 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解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 - 技术改变视野 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服务端的Docker镜像 - 技术改变视野
adlered · 2019-12-09 · via 技术改变视野

前言

如没看过上一章,请点我跳转

上一章我们使用Tomcat镜像搭建了一个WEB服务端。
本章,我们将从零开始搭建一个Tomcat服务端。大体需要以下步骤:

  1. 在容器中安装一个系统(我使用Ubuntu)
  2. 在容器中安装JDK并配置环境变量以运行Tomcat
  3. 在容器中拷贝Tomcat

既然目标已经明确,那么我们就开始吧。

初始化项目

下载文件

在项目开始之前,我们需要下载所需的文件:

JDK 1.8
Tomcat 9

解压文件

将JDK和Tomcat的压缩包解压,并新建一个文件夹用于存放该镜像所需的文件,把解压后的文件夹拷贝到该文件夹中。

1adler@localhost ~/dockerTomcat: tar -zxvf jdk-8u201-linux-x64.tar.gz
2adler@localhost ~/dockerTomcat: tar -zxvf apache-tomcat-9.0.13.tar.gz
3adler@localhost ~/dockerTomcat: ls
4apache-tomcat-9.0.13 jdk1.8.0_201

Dockerfile

Dockerfile就像一个脚本语言,它用于告知Docker如何制作一个镜像。让我们在Docker目录中新建一个Dockerfile文件,编辑内容:

 1FROM ubuntu
 2MAINTAINER AdlerED
 3ENV REFRESHED_AT 2019-04-14
 4
 5WORKDIR /usr
 6RUN mkdir jdk
 7RUN mkdir tomcat
 8ADD jdk1.8.0_201 /usr/jdk
 9ADD apache-tomcat-9.0.13 /usr/tomcat
10
11ENV JAVA_HOME=/usr/jdk
12ENV JRE_HOME=$JAVA_HOME/jre
13ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
14ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
15
16EXPOSE 8080
17ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]

看不懂?没关系,这里有常用命令解释:

 1FROM 使用镜像
 2RUN 执行命令
 3ADD 添加文件
 4COPY 拷贝文件
 5CMD 执行命令
 6EXPOSE 执行命令
 7WORKDIR 指定路径
 8MAINTAINER 维护者
 9ENV 设定环境变量
10USER 指定路径
11VOLUME 逻辑卷挂载点

这样,我们就在Ubuntu的基础上安装了JDK并配置好了环境。

制作镜像

保存Dockerfile。下面让我们构造一个Docker镜像:

注意:命令中有一个".",表示当前目录下的所有文件/文件夹。

 1adler@localhost ~/dockerTomcat: docker build -t tom1 .
 2Sending build context to Docker daemon    465MB
 3Step 1/14 : FROM ubuntu
 4latest: Pulling from library/ubuntu
 5898c46f3b1a1: Already exists
 663366dfa0a50: Already exists
 7041d4cd74a92: Already exists
 86e1bee0f8701: Already exists
 9Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
10Status: Downloaded newer image for ubuntu:latest
11 ---> 94e814e2efa8
12Step 2/14 : MAINTAINER AdlerED
13 ---> Running in 0d8881a48673
14Removing intermediate container 0d8881a48673
15 ---> 096a71fce35c
16Step 3/14 : ENV REFRESHED_AT 2019-04-14
17 ---> Running in cc70cde8bbdf
18Removing intermediate container cc70cde8bbdf
19 ---> 5e729baf8ba6
20Step 4/14 : WORKDIR /usr
21 ---> Running in ffafbb0c2f39
22Removing intermediate container ffafbb0c2f39
23 ---> 5c67d2c834b8
24Step 5/14 : RUN mkdir jdk
25 ---> Running in 456ba09c5f78
26Removing intermediate container 456ba09c5f78
27 ---> 4b20a82e75b2
28Step 6/14 : RUN mkdir tomcat
29 ---> Running in 4e37fa2c7f1e
30Removing intermediate container 4e37fa2c7f1e
31 ---> 36be7992366e
32Step 7/14 : ADD jdk1.8.0_201 /usr/jdk
33 ---> b73582ceb345
34Step 8/14 : ADD apache-tomcat-9.0.13 /usr/tomcat
35 ---> de37ef37b5f0
36Step 9/14 : ENV JAVA_HOME=/usr/jdk
37 ---> Running in 2fb661484354
38Removing intermediate container 2fb661484354
39 ---> 65486f651010
40Step 10/14 : ENV JRE_HOME=$JAVA_HOME/jre
41 ---> Running in 589b25aee5c9
42Removing intermediate container 589b25aee5c9
43 ---> 21ff9fc63c15
44Step 11/14 : ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
45 ---> Running in 0041fb914b69
46Removing intermediate container 0041fb914b69
47 ---> d4e69f027c43
48Step 12/14 : ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
49 ---> Running in dca277cebf53
50Removing intermediate container dca277cebf53
51 ---> 1d17efbfa7f7
52Step 13/14 : EXPOSE 8080
53 ---> Running in 3c34d45b2b12
54Removing intermediate container 3c34d45b2b12
55 ---> cb23d57bbad3
56Step 14/14 : ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]
57 ---> Running in a568509006bf
58Removing intermediate container a568509006bf
59 ---> c3f64777810c
60Successfully built c3f64777810c
61Successfully tagged tom1:latest

这样,我们就成功将Tomcat制作为了一个镜像。让我们运行它:

1adler@localhost ~/dockerTomcat: docker run -it -p 8080:8080 tom1

不出意外的话,访问http://localhost:8080,你应该可以看到Tomcat的默认页了。

后语

此时,我们成功搭建了一个Tomcat的运行环境,它基于Ubuntu。至此,你已经成功入门了Docker!