Docker的理解總結及Centos7下Docker安裝JDK的配置與鏡像導出

由於同時開7個vmware的虛擬機對筆記本仍是有些壓力,因此最近學習一下docker的用法,看看能不能在這個下邊發佈redis的集羣和zookeeper的集羣等。mysql


在對docker進行了一番折騰後大概理解的容器和鏡像的關係以下linux

image.png

安裝docker的centos7是個人一個vmware的虛擬機,我在這下邊安裝了一個docker。docker的鏡像(如下用Image指代)和容器(如下用Container)在我理解就是docker的靜態文件和動態運行時。當我要啓動一個docker的Container時我必需要有一個Image,當我用這個Image啓動成功後就有了一個基於這個Image運行的Container。全部後續咱們要作的事情都是在這個Container當中來進行。好比安裝mysql或者tomcat,或得redis等等。redis


這個Container運行起來以後也如同一個簡易的小操做系統環境同樣,它就能夠和外部的虛擬機或者實際的操做系統進行文件交換了sql


在作導出的時候有對Image的導出,也有對Container的導出。對鏡像的導出實際就是對container所運行需基於的Image的導出。和Container自己沒有什麼太大的關係。好比我在一開始練習時在Container中配置了一個JDK,那麼我導出相應的Image後(不管Container是否運行),再把這個Image導入進來,再啓動這個Image仍是不會看到我剛剛安裝的JDK.docker


而對Container進行Image導出則會導出容器中所安裝的JDK等信息。再導入作爲鏡像時,這個新的鏡像中就包含我剛剛安裝的JDK。我理解的docker中分層的概念也就是從這裏提取到的。就是能夠把Image運行成爲Container後進行安裝,安裝後再導出就行動新一層的Image。新一層的Image再運行成爲Container再進行安裝配置。這樣逐層疊加。json


瞭解了容器和鏡像的關係,也就能理順了爲何啓動容器的時候命令語句是要用 Image的名稱或者Image ID,centos


docker run -di --name mas-centos7-jdk Image名稱(Id)tomcat


而退出的時候命令中要用到Container IDbash


docker stop containerIdoracle



下邊是在docker中安裝JDK的操做記錄

(附加一個將下載的jdk tar 解壓的命令  tar -zxvf jdk-8u241-linux-x64.tar.gz,將從oracle官網下載的tar包進行解壓)


將docker的centos7的image運行起來後,將虛擬機下的jdk拷入到container中,

docker cp /home/zsj/jdk1.8.0_241 062b2a1bdf40 cdb:/etc  

(按剛纔描述的,062b2a1bdf40  這裏就應該是一個containerId,由於是在和Container打交道)

image.png


拷貝進去後,就能夠在docker的容器下看到這個相應的文件目錄了,細心的同窗可能發現我這兩個containerID

不同,這是由於我是在反覆練習中分別截的圖,因此容器號再也不是同樣的了。

image.png


在Container下對JDK進行配置,這個和常配的linux下配置同樣,vi /etc/profile便可

(仍是記住4個命令便可 Insert鍵或者i進行編輯模式,ESC鍵退出編輯模式,:q退出不保存,:wq保存並退出,退出時先退出編輯模式)

對應的環境變量文本以下,能夠直接複製粘貼,替換下路徑和JDK版本便可

export JAVA_HOME=/etc/jdk1.8.0_241

export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar

export PATH=$PATH:${JAVA_HOME}/bin

image.png


安裝完後刷一下環境變量 執行 source /etc/profile

而後正常無誤的話就能夠看到jdk的環境變量,若是有錯誤提示或者無反應,注意查看一下JAVA_HOME配置的路徑是否有誤

image.png


配置完成後,就能夠對這個當前container進行導出了。以前在練習的時候一直導出的是Image因此老是再啓動container後沒有看到安裝的jdk

docker commit mas-centos7-jdk mas-centos7-jdk  (這裏邊我寫成同樣的了,前邊的mas-centos7-jdk是我啓動的container名稱,也能夠放containerID,後邊的是我要導出的鏡像的命名)

image.png


再打docker image命令就能看到剛剛導出的Image了,再根據這個新的Image來啓動Container就會啓動一個包含剛剛安裝的JDK的cotainer了


以上,完成一個簡單的JDK配置以container鏡像的導出


下附一些在安裝中用到的docker的基本命令以作備查(基於centos7,centos8的同窗能夠先關注下podman)


yum install -y docker  新裝docker


yum -y remove docker 卸載docker


systemctl start docker 啓動docker


systemctl start docker 重橷啓動docker(當頭一次裝完docker後可能修改下daemon.json文件中的默認下載路徑,那麼修改完後可使用這個命令來從新啓動一下)


docker Images 看看當前本地有哪些鏡像(剛安裝後沒有任何鏡像)


docker pull centos:7 拉取鏡像 centos是要拉取的軟件 7是版本號 : 鏈接符


docker run -it --name=centos7 centos:7 /bin/bash  以交互命令行的方式啓動container

centos7 是啓動的container的名稱  centos:7  啓動的container所基於的Image


這個方式啓動成功以後會直接進入到container中,當退出後相應的容器也會退出。對於新使用的同窗來講可能會出現再次進不去也不知道爲何的狀況。因此能夠用下邊的命令來進入


docker run -di --name=centos7 centos:7 /bin/bash 這個方式啓動container後當前並不會進入到container中,須要手工再執行命令進入,好處是退出後再次進入的時候能夠直接進入,退出後以docker ps 命令查看,相應的container仍是up的狀態


對container進行中止

docker stop containerID 


docker ps 能夠查看當前正常的container

docker ps -a 能夠查看當前全部的container 包括不能正常啓動的,和操做退出後變成不可用狀態的


docker commit mas-centos7-jdk mas-centos7-jdk 基於container導出Image


docker load -i mas-centos7-jdk 導入Image


docker start centos:7 進入基於某個Image的Container

相關文章
相關標籤/搜索