所有的環境安裝,都是在centos系統中操作的,並非本地windows系統。
Docker 中國官方鏡像加速 http://www.docker-cn.com/registry-mirror
獲取JAVA鏡像:
在終端客戶端命令行輸入以下命令,獲取JAVA鏡像。
- docker pull java
默認是從Docker Hub官方的倉庫中下載鏡像的。如果沒有指定對應的版本,默認會獲取版本為latest的鏡像。
注意:
latest是針對於鏡像所在的倉庫里面的軟件最新版本。並非是軟件本身的最新發布版本。
回車執行,一開始會進行下載對應的依賴庫,稍作等待:
出現下面的信息,說明鏡像下載完成:
查看下載的鏡像
命令行中執行命令,查看剛剛下載的JAVA鏡像:
docker images
啟動容器
命令行中執行命令,啟動JAVA鏡像容器:
docker run -d -it --name java java
其中,–name后面的“java”是為容器指定了一個別名,而最后的那個“java”指的是下載鏡像時的名稱。
命令以及參數的含義:
run:啟動一個鏡像容器
-d:指定容器運行於后台
-it:-i 和 -t 的縮寫;
-i:以交互模式運行容器,通常與 -t 同時使用
-t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用
–name:指定容器名字,后續可以通過名字進行容器管理
具體更多的參數含義,可自行網上學習。
查看運行的容器
首先我們在命令行中執行命令,查看處於運行狀態的容器:
docker ps
因為在上面的操作步驟中,我們運行了java鏡像,所以你會看到有一個名稱為java的容器正在運行,如下圖:
通過輸出的信息可以看到,當前容器的ID是“9179eb86b007”,容器別名是java(最后一列的值)。
登錄容器
【詢問】:如果想查看容器中安裝的jdk版本,該怎么做呢?
如果直接在命令行輸入java -version會報錯的,如下圖:
原因是因為:jdk是安裝在容器里面的,需要進入容器,才能查看。意思就是說,jdk環境是在容器里面的,並非是宿主機。
進入容器內部
- 使用attach進入容器,執行命令:docker attach 91
上面有提到過,我們啟動的java鏡像的容器ID是“9179eb86b007”,所以, docker attach 命令后面,你可以指定容器ID來進入具體的容器。可以指定91、9179、9179e等任意長度的值,都代表了當前的java容器。其中的 “91” 指的是什么呢?
回車,效果如下圖:
如果回車后沒有反應,可以再次按下回車就可以進入容器的命令行模式了。
除了使用容器ID進入容器之外,也可以使用容器的別名進入容器:
docker attach java
使用exec命令進入容器上面這種是通過容器的別名進入容器內部的。
【方式一】:通過容器別名進入容器:
docker exec -it java /bin/bash
【方式二】:通過容器ID進入容器:
docker exec -it 91 /bin/bash
回車之后,就會看到命令行發生了一些變化:
仔細看第二行的開頭,@符號后面的“9179eb86b007”就是我們的java容器的ID吧,這也就說明,我們已經進入了容器內部了,可以對容器進行操作了。
進入容器后,輸入 java -version 查看JDK版本信息
java -version
下面我們就分別使用這2個命令進入容器,來看看效果,如下圖所示:無論是通過attach還是exec進入的容器,我們都可以在命令行中輸入命令“java -version”來查看JDK版本信息。
- attach命令進入容器,查看JDK版本信息
- exec命令進入容器,查看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退出的話,就會導致容器停止!!這是極其不方便的!
見下圖所示結果:
你會發現通過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群,歡迎有興趣的小伙伴加入











