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
關注微信公眾號和今日頭條,精彩文章持續更新中。。。。。