Docker - Docker 簡單範例操作(在CentOS上安裝Java)

在前一篇(Docker - 輕量型虛擬化平台 Docker)限量已經介紹過Docker是什麼東西,接下來這一篇限量要來實際操作一下Docker,來看看Docker究竟為什麼比一般的VM還好用。


操作一:Docker基本操作

在Docker中,Image是佔有非常重要的角色,所以在這次操作中,我們會從簡單的command line進行Build Image,並操作一些Docker的基本指令,首先來Build Image:

1. 首先使用sudo docker images搜尋目前repository上有的Image檔。

目前有可用的Image有ubuntu與centos的Image。

2. 執行sudo docker pull Ubuntu取得ubuntu的Image。

3. 接著來試試如何啟動並使用剛剛載下來的ubuntu Image,執行sudo docker run ubuntu ping www.google.com。

4. 再來我們要來Base on ubuntu的Image來安裝Java,執行sudo docker run ubuntu apt-get update更新ubuntu套件來源,再來執行sudo docker ps -l來看看最新的Container的資訊。

5. 執行sudo docker commit -m "Update repository" -a "Author" <container_id> <image>將剛剛的修改另存成獨立的Image,-m參數是增加註解,-a則是增加修改的作者。

6. 再來就依序執行安裝Java的步驟:
sudo docker run <image> sudo apt-get install software-properties-common
sudo docker commit <container_id> <image>
sudo docker run <image> sudo add-apt-repository ppa:webupd8team/java
sudo docker commit <container_id> <image>
sudo docker run <image> sudo apt-get update
sudo docker commit <container_id> <image>
sudo docker run <image> sudo apt-get install install oracle-java8-installer

sudo docker commit <container_id> <image>

7. 經過一連串的run和commit就得到一個Base on ubuntu安裝Java的Image檔。
OPTION:執行sudo docker inspect <container_id>可以查看該container的資訊,包含修改的Log, 修改的作者, CPU架構, 記憶體…等虛擬機器資訊,Docker會將這些資訊以JSON格式的方式表示。

上述的操作方式是直接使用Command Line執行,可以發現建立Image時,每執行一道命令就要用docker commit來記錄下來,這樣實在是很消耗時間,所以接下來的操作範例將說明如何使用DockerFile快速Build Image。

操作二:使用DockerFile進行Build Image

接下來限量將使用DockerFile方式進行操作說明,接著來實際操作如何以DockerFile Build出一個Image。下列為Base在CentOS上安裝Java的DockerFile內容:


1 # java
2 #
3 # VERSION Java 8
4 # use the centos base image provided by dotCloud
5 FROM centos
6 MAINTAINER Marco Palladino, marco@mashape.com
7 ENV JAVA_VERSION 8u31
8 ENV BUILD_VERSION b13
9 # Upgrading system
10 RUN yum -y upgrade
11 RUN yum -y install wget
12 # Downloading Java
13 RUN wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/$JAVA_VERSION-$BUILD_VERSION/jdk-$JAVA_VERSION-linux-x64.rpm" -O /tmp/jdk-8-linux-x64.rpm
14 RUN yum -y install /tmp/jdk-8-linux-x64.rpm
15 RUN alternatives --install /usr/bin/java jar /usr/java/latest/bin/java 200000
16 RUN alternatives --install /usr/bin/javaws javaws /usr/java/latest/bin/javaws 200000
17 RUN alternatives --install /usr/bin/javac javac /usr/java/latest/bin/javac 200000
18 ENV JAVA_HOME /usr/java/latest

限量先來逐步解釋這個DockerFile的作用:
先來逐步說明這個DockerFile:
1. 第5行:FROM centos設定Base Image為CentOS的Image。
2. 第6行:MAINTAINER Marco Palladino, marco@mashape.com 標記此DockerFile的作者資訊。
3. 第7, 8行:設定環境變數JAVA_VERSION與BUILD_VERSION的值為8u31與b13,這邊設定的環境變數值會在後面(第13行)動態修改安裝的目錄名稱。
4. 第10行:執行CentOS的yum update指令,更新所有CentOS Repository的所以套件包。
5. 第11行:使用yum install指令安裝wget套件(Linux上可透過此套件到指令URL抓取檔案)。
6. 第13行:使用wget套件到Oracle網站下載Java套件包至/temp目錄。
7. 第14行:使用yum install安裝剛剛下載的Java套件包
8. 第15, 16, 17行:使用alternatives指令管理同時存在的多個不同版本的JDK。

9. 第18行:設定Java安裝目錄的環境變數。

看完了DockerFile的解說後就可以開始來使用DockerFile安裝了,以下為執行DockerFile的步驟:
1. 先使用文字編輯器編輯DockerFile或直接下載DockerFile範本來修改。
2. 在放置DockerFile的目錄下執行sudo docker build --tag="docker/test" .,Docker就會開始執行此目錄下的DockerFile,tag值為Repository的位置(<帳號/Repository>),注意在tag值可不能亂設定,因為會影響到要將此Image上傳至Repository時的情況,在這裡需要設定你有權限的Repository值。

3. Docker Engine逐步執行DockFile裡的命令,下圖為Build DockerFile時所顯示的各步驟Log:
4. 等待執行完成後,可輸入sudo docker images指令來看看剛剛Build的Image:

OPTION:如果要將Build好的Image上傳到自己的Repository裡可按照下列步驟:
1. 執行sudo docker login指令,並輸入帳號, 密碼, 電子郵件信箱進行登入。

2. 執行sudo docker push docker/test,Docker Engine就會將剛剛Build的Image上傳至自己的Repository上。

經過實際操作後真的覺得用Docker來建自己的Image檔真的是比一般VM還要快,但是唯一覺得可惜的地方是目前好像還沒有支援到GUI來建Image,全都要用指令就覺得一個頭兩個大,就在看看之後的Docker會發展成怎麼樣了。





站內相關連結:
Docker - 輕量型虛擬化平台 Docker







留言