1. 程式人生 > >Centos下Docker使用映象和DockerFile方式搭建JAVA Web 開發環境

Centos下Docker使用映象和DockerFile方式搭建JAVA Web 開發環境

1、環境

1、1先決條件

1.必須是64位CPU架構的計算機,Docker目前不支援32位CPU;

2.執行Linux3.8或更高版本核心,CentOS時核心必不小於3.10;

3.核心必須支援一種合適的儲存驅動,可以是Device Manager、AUFS、vfs、btrfs、以及預設的驅動Device Mapper中的一個;

4.核心必須支援並開啟cgroup和名稱空間namespace功能。

安裝分兩種比較常見的情況:一種是Ubuntu環境下安裝,一種是CentOS環境下進行安裝,Ubuntu環境下的安裝參見《第一本Docker書》,書中有詳細的步驟,此處只討論CentOS環境下的安裝。本文用的版本為CentOS7.1。

1、2檢查前提條件

1.核心

通過uname命令來檢查核心版本資訊。

uname -a

2.檢查Device Mapper

ls -l /sys/class/misc/device-mapper

2、安裝Docker

1)使用root許可權登入系統

2)更新系統包到最新

yum -y update

3)新增yum倉庫

# cat>/etc/yum.repos.d/docker.repo <<-EOF

[dockerrepo]

name=DockerRepository

baseurl=https://yum.dockerproject.org/repo/main/centos/7

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

EOF

完成後如下:


4)安裝docker包

yum install -y docker-engine

yum install -y docker-selinux

在使用現成的安裝包安裝的時候selinux的安裝一定要在docker-engine之前。

yum list installed | grep docker  檢視安裝的docker列表

       5)啟動docker

systemctl start docker.service

6)驗證docker已經正常安裝

 docker run hello-world


7)使用yum解除安裝do ker

1.列出安裝的軟體包

yum list installed | grep docker

2.移除軟體包

 yum -y remove docker-engine.x86_64

上面的命令不會刪除映象、容器,卷組和使用者自配置檔案。

3.刪除所有映象、容器和組

 rm -rf /var/lib/docker

3、建立JavaWeb開發環境映象

3.1下載映象

就像曾經安裝軟體一樣,我們首先需要有一張刻錄了該軟體的光碟,如果您使用的是虛擬光碟機,那麼就需要執行一種名為“映象”的檔案,通過它來安裝軟體。在 Docker 的世界裡,也有一個名為“映象”的東西,已經安裝我們所需的作業系統,我們一般成為“Docker 映象”,本文簡稱“映象”。

那麼問題來了,我們從哪裡下載映象呢?

一個是docker的官網 http://www.docker.com/ 當然這個是國外的啦,下載起來很慢的。所以我推薦一個國內的阿里雲映象:https://dev.aliyun.com

下面就在阿里雲上面下載映象。

進入網站,然後去映象倉庫找自己想要的映象

我選擇centos,拉取命令如下

docker pull centos

預設拉取最新的映象 版本號是latest

使用如下命令,檢視本地所有的映象

docker images

如果看到以上輸出,說明您可以使用“centos”這個映象了,或將其稱為倉庫(Repository),該映象有一個名為“latest”的標籤(Tag),此外還有一個名為“12c9d795d85a”的映象 ID(可能您所看到的映象 ID 與此處的不一致,那是正常現象,因為這個數字是隨機生成的)。此外,我們可以看到該映象只有 204,非常小巧,而不像虛擬機器的映象檔案那樣龐大。

現在映象已經有了,我們下面就需要使用該映象,來啟動容器。

3.2啟動容器

容器是在映象的基礎上來執行的,一旦容器啟動了,我們就可以登入到容器中,安裝自己所需的軟體或應用程式。既然映象已經下載到本地,那麼如何才能啟動容器呢?

只需使用以下命令即可啟動容器

docker run -i -t -v /root/software/:/mnt/software/ 12c9d795d85a /bin/bash 

看到這樣的情況,說明我們現在已經登入到容器中了。

我們來看下上一條命令的大概意思

docker run <相關引數> <映象 ID> <初始命令> 

其中,相關引數包括:

-i:表示以“互動模式”執行容器

-t:表示容器啟動後會進入其命令列

-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>

假設我們的所有安裝程式都放在了宿主機的/root/software/目錄下,現在需要將其掛載到容器的/mnt/software/目錄下。

需要說明的是,不一定要使用“映象 ID”,也可以使用“倉庫名:標籤名”,例如:centos:latest。

初始命令表示一旦容器啟動,需要執行的命令,此時使用“/bin/bash”,表示什麼也不做,只需進入命令列即可。

3.3安裝相關軟體

我們先進入 /opt目錄

預設將軟體安裝到這裡

安裝jdk1.8

可以用wget從網站下載,也可以在本地下載完後上傳到docker掛載的伺服器目錄。我們這裡因為本地已經下載過,所以直接從本地上傳到docker掛載的伺服器目錄。

用wget從官網下載的時候要注意,因為oracle現在要同意協議才能下載,直接使用wget加連結下載不到,所以要加上前面的那些程式碼

解壓壓縮包

tar-zxf jdk-8u65-linux-x64.tar.gz

幫目錄改個名,方便後面配環境變數

mv jdk1.8.0_65 jdk 

下載tomcat8

wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.30/bin/apache-tomcat-8.0.30.tar.gz

解壓

tar-zxf apache-tomcat-8.0.30.tar.gz

幫目錄改個名,方便後面配環境變數

mv apache-tomcat-8.0.30 tomcat

設定環境變數,這裡要注意,虛擬機器的時候也可以設定到/etc/profile中,但是docker只能設定到這個檔案中。(也許是環境或者版本不同導致的,在測試安裝的時候如果安裝到/etc/profile中,在docker啟動映象的時候會提示找不到jdk)

vi~/.bashrc

在檔案末尾新增如下配置

export JAVA_HOME=/opt/jdk 

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

最後,需要使用source命令,讓環境變數生效:

source~/.bashrc

然後輸入 java 能看到一大堆東西就說明OK了。

我們需要編寫一個執行指令碼,當啟動容器時,執行該指令碼,啟動 Tomcat,具體過程如下:

首先,建立執行指令碼:

vi /root/run.sh

新增如下內容

#!/bin/bash 

source ~/.bashrc 

sh /opt/tomcat/bin/catalina.sh run (start)

注意:這裡必須先載入環境變數,然後使用 Tomcat 的執行指令碼來啟動 Tomcat 服務。

最後,為執行指令碼新增執行許可權:

chmod u+x  /root/run.sh

退出容器

說明退出了。

隨後,可使用如下命令檢視正在執行的容器:

docker ps

此時,您應該看不到任何正在執行的程式,因為剛才已經使用exit命令退出的容器,此時容器處於停止狀態,可使用如下命令檢視所有容器:

docker ps –a

記住以上CONTAINER ID(容器 ID),隨後我們將通過該容器,建立一個可執行 Java Web 的映象。

3.3建立JavaWeb映象

使用如下命令提交剛才建立的docker web容器為映象

docker commit 3fb5c3089f22 lzg/javaweb:0.1

該容器的 ID 是“3fb5c3089f22 ”,所建立的映象名是“lzg/javaweb:0.1”,隨後可使用映象來啟動 Java Web 容器。

使用docker images命令能看到如下內容:

可見,此時已經看到了最新建立的映象“lzg/javaweb:0.1”,其映象 ID 是“b7be71fb07079”。正如上面所描述的那樣,我們可以通過“映象名”或“映象 ID”來啟動容器,與上次啟動容器不同的是,我們現在不再進入容器的命令列,而是直接啟動容器內部的 Tomcat 服務。此時,需要使用以下命令:

docker run -d -p 58080:8080 --name javaweb lzg/javaweb:0.1 /root/run.sh docker容器埠號與宿主機埠號繫結

稍作解釋:

-d:表示以“守護模式”執行/root/run.sh指令碼,此時 Tomcat 控制檯不會出現在輸出終端上。

-p:表示宿主機與容器的埠對映,此時將容器內部的 8080 埠對映為宿主機的 58080 埠,這樣就向外界暴露了 58080 埠,可通過 Docker 網橋來訪問容器內部的 8080 埠了。

--name:表示容器名稱,用一個有意義的名稱命名即可。

關於 Docker 網橋的內容,需要補充說明一下。實際上 Docker 在宿主機與容器之間,搭建了一座網路通訊的橋樑,我們可通過宿主機 IP 地址與埠號來對映容器內部的 IP 地址與埠號,在一系列引數後面的是“映象名”或“映象 ID”,怎麼方便就怎麼來。最後是“初始命令”,它是上面編寫的執行指令碼,裡面封裝了載入環境變數並啟動 Tomcat 服務的命令。

當執行以上命令後,會立即輸出一長串“容器 ID”,我們可通過docker ps命令來檢視當前正在執行的容器。

然後通過 linux宿主的 ip:58080訪問,就能看到 tomcat的主頁了。

注意:這裡使用的是宿主機的 IP 地址,與對外暴露的埠號 58080,它對映容器內部的埠號 8080。

4、DockerFile建立JavaWeb開發環境

在宿主機建立docker執行資料夾:/var/local/software/dockerimage

拷貝docker環境執行所需軟體到資料夾,並解壓:

編寫dockerFile檔案,檔案中使用到的軟體名稱要與解壓後的軟體名稱對應:

#Buildjava web app container image

FROMcentos:latest

MAINTAINERwufaliang<[email protected]>

#Makejava and tomcat install directory

RUNmkdir /usr/local/java

RUNmkdir /usr/local/tomcat

#Copyjre and tomcat into image

ADDjdk8 /usr/local/java

ADDtomcat7 /usr/local/tomcat

ADDstart_tomcat.sh /etc/init.d/tomcat.sh

RUNchmod 755 /etc/init.d/tomcat.sh

#Exposehttp port

EXPOSE8080

#Define default command. 

ENTRYPOINT/etc/init.d/tomcat.sh && tail -f /usr/local/tomcat/logs/catalina.out

編寫start_tomcat.sh內容:

#!/bin/bash

echo"Start Tomcat ..."

echo"export JAVA_HOME=/usr/local/java" >> /root/.bashrc

echo"exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar">> /root/.bashrc

echo"export PATH=$PATH:$JAVA_HOME/bin" >> /root/.bashrc

source/root/.bashrc

sh /usr/local/tomcat/bin/catalina.shstart

dockerFile檔案生成映象:

dockerbuild -t firstdocker:0.1 -f ./firstDockerFile.sh/var/local/software/dockerimage(docker內容在宿主機的資料夾)

dockerrun -t -i -p 8080:8080 --name firstDocker -v /var/local/software/dockerimage/webapps/:/webapps/ firstdocker:0.1

docker run -d -p 8080:8080--name firstDocker  -v/var/local/software/dockerimage/webapps/:/webapps/ firstdocker:0.1

2、   Docker常用命令

檢視容器相關的資訊

docker inspect 容器id

檢視docker IP

docker inspect --format '{{ .NetworkSettings.IPAddress }}'0f7827e09162

iptables -t nat -L -n檢視防火牆策略

進入正在執行的容器

docker attach ea0928cfcad2

docker exec -i -t ea0928cfcad2

docker exec -i -t ea0928cfcad2 /bin/bash

docker ps -a:輸出所有容器列表

docker ps -l:檢視最新被建立的容器

docker start 0f7827e09162:啟動一個已存在的容器

docker commit 0f7827e09162 lzg/javaweb:0.1 使用容器建立映象 建立的時候要注意:在容器啟動狀態下建立

docker run -d -p 8080:8080 --name javaweb lzg/javaweb:0.1/root/run.sh docker容器埠號與宿主機埠號繫結

docker rm 72474b2358b1 刪除終止狀態的容器

docker rmi bb12a5cd7811 刪除映象

docker stop 停止docker

docker kill 直接停止docker

檢視docker日誌

docker logs -f -t --since="2017-05-31" --tail=10edu_web_1

--since : 此引數指定了輸出日誌開始日期,即只輸出指定日期之後的日誌。

-f : 檢視實時日誌

-t : 檢視日誌產生的日期

-tail=10 : 檢視最後的10條日誌。

edu_web_1 : 容器名稱

centos中docker開啟遠端訪問:

    vi開啟檔案 vi /usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd 修改為 

    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 

    重新載入檔案 systemctl daemon-reload 

    重啟docker服務 systemctl restart docker

關注微信公眾號和今日頭條,精彩文章持續更新中。。。。。