步驟1:搜索鏡像
使用docker search
命令進行搜索。
建議大家去Docker官方鏡像倉庫去搜索,地址https://hub.docker.com/,可以看到詳細的幫助文檔,和鏡像的倉庫源所支持的版本。
步驟2:下載Tomcat鏡像
使用docker pull
命令,從Docker鏡像庫中拉取鏡像。
[root@192 ~]# docker pull tomcat:9.0
9.0: Pulling from library/tomcat
b9a857cbf04d: Pull complete
d557ee20540b: Pull complete
3b9ca4f00c2e: Pull complete
667fd949ed93: Pull complete
661d3b55f657: Pull complete
511ef4338a0b: Pull complete
a56db448fefe: Pull complete
00612a99c7dc: Pull complete
326f9601c512: Pull complete
c547db74f1e1: Pull complete
Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 040bdb29ab37 2 months ago 649MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 3 months ago 209MB
步驟3:運行Tomcat鏡像
執行命令:docker run -d --name tomcat-01 -p 9999:8080 040bdb29ab37
,啟動Tomcat鏡像。
-d
:后台運行容器。--name
:給容器命名。-p 宿主機端口:容器內部端口
:配置Docker容器端口暴露,使外界能夠訪問Docker容器內部。通過宿主機的9999
端口就可以訪問容器的8080
端口的服務。
(原理看上一篇文章即可)
# 啟動Tomcat鏡像
[root@192 ~]# docker run -d --name tomcat-01 -p 9999:8080 040bdb29ab37
4de54013836c23a53f7b3943403b0543bfc4c390e81bb76f08810289d85813b3
查看宿主機正在運行的容器。
步驟4:本機和外網測試
進行本地訪問Tomcat容器服務,如下:
[root@192 ~]# curl localhost:9999
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTTP Status 404 – Not Found</title>
<style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style>
</head>
<body>
<h1>HTTP Status 404 – Not Found</h1>
<hr class="line" />
<p><b>Type</b> Status Report</p>
<p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p>
<hr class="line" />
<h3>Apache Tomcat/9.0.41</h3>
</body>
</html>
進行外網測試訪問Tomcat容器服務,如下:
我們發現本機訪問和外網訪問Docker容器的Tomcat服務,都是無法訪問到Tomcat服務的歡迎界面。
原因:阿里雲鏡像,默認是最小的鏡像,把所有不必要的都剔除掉。所以在Tomcat文件中的webapps
目錄中沒有文件,也就無法返回歡迎界面了。並不是我們的Tomcat容器無法接收請求。
因為阿里雲鏡像只保證最小可運行的環境,所以會出現:
- Linux命令缺少。
- Tomcat文件被精簡。
下面開始解決。
步驟5:解決問題
(1)進入到正在運行的Tomcat容器中。
[root@192 ~]# docker exec -it tomcat-01 /bin/bash
root@4de54013836c:/usr/local/tomcat#
(2)查看Tomcat中的webapps目錄。
# 查看Tomcat中的目錄
root@4de54013836c:/usr/local/tomcat# ls -l
total 128
-rw-r--r--. 1 root root 18982 Dec 3 11:48 BUILDING.txt
-rw-r--r--. 1 root root 5409 Dec 3 11:48 CONTRIBUTING.md
-rw-r--r--. 1 root root 57092 Dec 3 11:48 LICENSE
-rw-r--r--. 1 root root 2333 Dec 3 11:48 NOTICE
-rw-r--r--. 1 root root 3257 Dec 3 11:48 README.md
-rw-r--r--. 1 root root 6898 Dec 3 11:48 RELEASE-NOTES
-rw-r--r--. 1 root root 16507 Dec 3 11:48 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Jan 13 08:25 bin
drwxr-xr-x. 1 root root 22 Mar 17 09:22 conf
drwxr-xr-x. 2 root root 4096 Jan 13 08:25 lib
drwxrwxrwx. 1 root root 177 Mar 17 09:22 logs
drwxr-xr-x. 2 root root 134 Jan 13 08:25 native-jni-lib
drwxrwxrwx. 2 root root 30 Jan 13 08:25 temp
drwxr-xr-x. 2 root root 6 Jan 13 08:25 webapps
drwxr-xr-x. 7 root root 81 Dec 3 11:45 webapps.dist
drwxrwxrwx. 2 root root 6 Dec 3 11:43 work
# 查看webapps目錄中的內容
root@4de54013836c:/usr/local/tomcat# ls -l webapps
total 0
我們可以看到webapps
目錄中沒有任何文件。
(3)解決問題。
但是從上面我們可以看到在Tomcat中有一個webapps.dist
目錄,而webapps.dist
目錄中的內容就是我們需要的內容,包括歡迎界面等數據文件。
我們只需要把webapps.dist
目錄中的內容,全部拷貝到webapps
目錄中即可。
# 查看webapps.dist中的內容
root@4de54013836c:/usr/local/tomcat# ls -l webapps.dist/
total 4
drwxr-xr-x. 3 root root 223 Jan 13 08:25 ROOT
drwxr-xr-x. 15 root root 4096 Jan 13 08:25 docs
drwxr-xr-x. 7 root root 99 Jan 13 08:25 examples
drwxr-xr-x. 6 root root 79 Jan 13 08:25 host-manager
drwxr-xr-x. 6 root root 114 Jan 13 08:25 manager
# 把webapps.dist目錄中的內容,全部拷貝到webapps目錄中
root@4de54013836c:/usr/local/tomcat# cp -r webapps.dist/* webapps
# 查看webapps目錄中內容
root@4de54013836c:/usr/local/tomcat# ls -l webapps
total 4
drwxr-xr-x. 3 root root 223 Mar 17 09:56 ROOT
drwxr-xr-x. 15 root root 4096 Mar 17 09:56 docs
drwxr-xr-x. 7 root root 99 Mar 17 09:56 examples
drwxr-xr-x. 6 root root 79 Mar 17 09:56 host-manager
drwxr-xr-x. 6 root root 114 Mar 17 09:56 manager
這樣我們就可以訪問到歡迎界面了,不需要重啟Tomcat服務。
(4)直接外網訪問Docker容器中的Tomcat服務。
如上圖,我們成功看到了Tomcat服務的歡迎界面。
補充:--rm
選項
在看Tomcat鏡像的介紹時(官方鏡像倉庫網頁),有如下一條命令。
$ docker run -it --rm tomcat:9.0
說明該命令:
- 如果本地沒有Tomcat9鏡像,會先從鏡像庫中下載鏡像到本地宿主機,然后直接啟動容器。
- 當容器停止之后,直接刪除本地容器(下載到本地的Tomcat9鏡像不會刪除)。
--rm
選項也就是容器停止后,直接在本地刪除該容器,即容器用完即刪,一般測試的時候可以用用。