Docker安裝+HelloWorld+運行Tomcat

前言

只有光頭才能變強。
文本已收錄至個人GitHub倉庫,歡迎Star: https://github.com/ZhongFuCheng3y/3y

上一篇已經講解了爲何須要Docker?,相信你們已經對Docker有一個簡單的認識了。html

這篇我來說講Docker入門的相關概念和經常使用的命令,跟你們一塊兒入門Docker!java

Docker

1、Docker相關術語

通常從零學習一門技術(語言),都是從HelloWorld開始的,但此次我偏不。我先來說講Docker的相關術語~mysql

  • 鏡像
  • 容器
  • 倉庫

在以前分享的Docker科普文,也通俗易懂地講解了這三個術語:linux

鏡像、容器、倉庫的概念能夠 類比代碼、進程、github

若是讓我來給徹底不懂Docker解釋這三個術語,我會這樣作:c++

  • 鏡像就是鏡像,咱們重裝系統/搞虛擬機的時候都要用鏡像,沒鏡像哪來系統
  • 咱們安裝完鏡像,就能夠跑起來一個系統(Windows也好、Centos也好),因而咱們就能夠愉快地使用咱們經過鏡像安裝好的系統了。git

    • 在Docker中,經過鏡像運行起來的東西叫作容器
  • 倉庫就是專門存放鏡像的地方
鏡像(image)【image除了圖片/圖像的意思外,還有鏡像的意思】

容器(container)經過鏡像運行起來的實例github

倉庫(reposity)專門存放鏡像的地方web

2、安裝Docker與HelloWorld

首先須要明確本身所使用的環境,就我而言,我使用的是CentOS 7。據我所知,CentOS 7CentOS 6.8在安裝中都是有區別的。redis

因此,若是你想跟着我一塊兒安裝Docker,先明確本身的版本是不是CentOS 7,若是不是隻能找其餘的教程來進行安裝。sql

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案例,就打印了一句話,沒意思

3、體驗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等等鏡像來玩玩~~

4、命令說明

Docker的命令無非就是對鏡像、對容器進行增刪改查。我是不太喜歡拉出每一個命令來寫文章的,因此這些命令仍是你們自行學習吧~~

以前收集資料的時候,我也找到了一張關於Docker的思惟導圖,對着來看看,感受就沒問題了:

Docker的思惟導圖

關注個人公衆號,回覆 腦圖 便可獲取原圖(.xmind和.png格式)

最後

留下幾個問題:

  • 咱們知道Tomcat運行起來須要Java的支持,那麼咱們在Docker拉取下來的Tomcat鏡像是否是也有Java環境呢?
  • 容器退出了(比如Linux進程退出了),容器的數據就沒了,咱們想要保留容器內的數據,怎麼辦?
  • 從上面咱們能夠看出,經過commit能夠在原有的容器基礎上,建立出屬於咱們本身的鏡像,還有其餘方式建立新的鏡像嗎?
樂於輸出 乾貨的Java技術公衆號:Java3y。公衆號內有200多篇 原創技術文章、海量視頻資源、精美腦圖,不妨來 關注一下!

帥的人都關注了

以爲個人文章寫得不錯,不妨點一下

相關文章
相關標籤/搜索