由於同時開7個vmware的虛擬機對筆記本仍是有些壓力,因此最近學習一下docker的用法,看看能不能在這個下邊發佈redis的集羣和zookeeper的集羣等。mysql
在對docker進行了一番折騰後大概理解的容器和鏡像的關係以下linux
安裝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打交道)
拷貝進去後,就能夠在docker的容器下看到這個相應的文件目錄了,細心的同窗可能發現我這兩個containerID
不同,這是由於我是在反覆練習中分別截的圖,因此容器號再也不是同樣的了。
在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
安裝完後刷一下環境變量 執行 source /etc/profile
而後正常無誤的話就能夠看到jdk的環境變量,若是有錯誤提示或者無反應,注意查看一下JAVA_HOME配置的路徑是否有誤
配置完成後,就能夠對這個當前container進行導出了。以前在練習的時候一直導出的是Image因此老是再啓動container後沒有看到安裝的jdk
docker commit mas-centos7-jdk mas-centos7-jdk (這裏邊我寫成同樣的了,前邊的mas-centos7-jdk是我啓動的container名稱,也能夠放containerID,後邊的是我要導出的鏡像的命名)
再打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