在Docker中安裝JDK


所有的環境安裝,都是在centos系統中操作的,並非本地windows系統。

Docker 中國官方鏡像加速 http://www.docker-cn.com/registry-mirror

獲取JAVA鏡像:

在終端客戶端命令行輸入以下命令,獲取JAVA鏡像。

  • docker pull java

默認是從Docker Hub官方的倉庫中下載鏡像的。如果沒有指定對應的版本,默認會獲取版本為latest的鏡像。

注意:

latest是針對於鏡像所在的倉庫里面的軟件最新版本。並非是軟件本身的最新發布版本。

回車執行,一開始會進行下載對應的依賴庫,稍作等待:

在Docker中安裝JDK

出現下面的信息,說明鏡像下載完成:

在Docker中安裝JDK

查看下載的鏡像

命令行中執行命令,查看剛剛下載的JAVA鏡像:

 

docker images


在Docker中安裝JDK
如下圖所示:

啟動容器

命令行中執行命令,啟動JAVA鏡像容器:

 

docker run -d -it --name java java

如下圖所示,說明成功啟動了容器:
在Docker中安裝JDK

其中,–name后面的“java”是為容器指定了一個別名,而最后的那個“java”指的是下載鏡像時的名稱。

命令以及參數的含義:

run:啟動一個鏡像容器

-d:指定容器運行於后台

-it:-i 和 -t 的縮寫;

  • -i:以交互模式運行容器,通常與 -t 同時使用

  • -t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用

–name:指定容器名字,后續可以通過名字進行容器管理

具體更多的參數含義,可自行網上學習。

查看運行的容器

首先我們在命令行中執行命令,查看處於運行狀態的容器:

 

docker ps

因為在上面的操作步驟中,我們運行了java鏡像,所以你會看到有一個名稱為java的容器正在運行,如下圖:
在Docker中安裝JDK

通過輸出的信息可以看到,當前容器的ID是“9179eb86b007”,容器別名是java(最后一列的值)。

登錄容器

【詢問】:如果想查看容器中安裝的jdk版本,該怎么做呢?

如果直接在命令行輸入java -version會報錯的,如下圖:

在Docker中安裝JDK

原因是因為:jdk是安裝在容器里面的,需要進入容器,才能查看。意思就是說,jdk環境是在容器里面的,並非是宿主機。

進入容器內部

  • 使用attach進入容器,執行命令:docker attach 91


上面有提到過,我們啟動的java鏡像的容器ID是“9179eb86b007”,所以, docker attach 命令后面,你可以指定容器ID來進入具體的容器。可以指定91、9179、9179e等任意長度的值,都代表了當前的java容器。
其中的 “91” 指的是什么呢?

 

回車,效果如下圖:

在Docker中安裝JDK

如果回車后沒有反應,可以再次按下回車就可以進入容器的命令行模式了。

 

除了使用容器ID進入容器之外,也可以使用容器的別名進入容器:

docker attach java


使用exec命令進入容器
上面這種是通過容器的別名進入容器內部的。

【方式一】:通過容器別名進入容器:

docker exec -it java /bin/bash

【方式二】:通過容器ID進入容器:

docker exec -it 91 /bin/bash
 

回車之后,就會看到命令行發生了一些變化:

在Docker中安裝JDK

仔細看第二行的開頭,@符號后面的“9179eb86b007”就是我們的java容器的ID吧,這也就說明,我們已經進入了容器內部了,可以對容器進行操作了。

進入容器后,輸入 java -version 查看JDK版本信息

java -version


下面我們就分別使用這2個命令進入容器,來看看效果,如下圖所示:無論是通過attach還是exec進入的容器,我們都可以在命令行中輸入命令“java -version”來查看JDK版本信息。

  • attach命令進入容器,查看JDK版本信息

在Docker中安裝JDK

  • exec命令進入容器,查看JDK版本信息

在Docker中安裝JDK

登陸Docker容器的方式

上面已經簡單的介紹了attach、exec命令的使用,下面講解一下這兩個命令之間的區別。

對於運行在后台的Docker容器,我們運維人員時常是有登陸進去的需求。登陸Docker容器的方式:

  • 使用ssh登陸容器

這種方法需要在容器中啟動sshd,存在開銷和攻擊面增大的問題。同時也違反了Docker所倡導的一個容器一個進程的原則。

  • 使用自帶命令docker attach登陸容器

docker attach存在的問題是:當多個窗口同時attach到同一個容器時,所有的窗口都會同步的顯示,假如其中的一個窗口發生阻塞時,其它的窗口也會阻塞,docker attach命令可以說是最不方便的進入后台docker容器的方法

  • 使用自帶命令docker exec登陸容器

docker exec和docker attach是Docker的原生方法,大多數情況下就使用這兩種命令登陸容器。docker exec命令是在docker1.3之后出現的,比docker attach命令更加方便

分別使用attach與exec進入容器,查看它們的區別

1、Docker attach必須是登陸到一個已經運行的容器里。需要注意的是如果從這個容器中exit退出的話,就會導致容器停止!!這是極其不方便的!

見下圖所示結果:

在Docker中安裝JDK

你會發現通過attach進入容器的話,當使用exit退出容器的時候,對應的容器也停止運行了,所以在生產環境中很少使用。

2、docker exec登陸容器,注意有兩個參數:-t和-i,這兩個參數很重要!

對於 -t 、-i 的具體作用,可以參考 https://www.cnblogs.com/kevingrace/p/6656095.html

使用docker exec -it 進入容器和我們平常操作console界面類似。而且不像attach方式退出,導致整個容器退出,exec在生產環境中用的比較多。exec 比使用ssh 、nsenter、nsinit方式更方便,生產中常用的方式。

在使用docker exec登陸容器或執行容器中的命令時,最好都帶上-t和-i參數。

退出Docker容器

  • 如果是通過 attach 進入的容器,在退出容器的時候,如果不想讓容器停止運行的話,就不能使用exit命令或者Ctrl+D快捷鍵的形式退出,而是使用 Ctrl + P + Q 組合鍵退出容器。
  • 如果是通過 exec 命令進入的容器,在退出容器的時候,就可以使用exit或者Ctrl+D快捷鍵退出容器,同時容器不會停止運行,這也是exec與attach的最大區別。當然,你也可以使用Ctrl + P + Q 組合鍵退出容器,容器一樣不會停止運行。

所以,通過上面的比較,也就印證了exec在實際使用過程中用的最多的,也是建議使用的一種方式。尤其是生產環境下,強烈建議使用exec的方式。

停止容器

通過 docker stop (容器ID | 容器別名) 的命令,可以停止正在運行狀態的容器:

docker stop java

上面是通過容器別名來停止容器的,你也可以使用容器ID。

參考資料:
http://www.zuidaima.com/blog/4656110816087040.htm

-
-------------------------------------------------------------------------
性能測試溝通Q群,歡迎有興趣的小伙伴加入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM