Docker虛擬機器常用指令介紹

CentOS安裝Docker

yum update -y

yum install -y docker

常用管理命令

啟動、關閉、重啟

service docker start

service docker stop

service docker restart

左上角的 DockerFile 檔案定義了映象要安裝程式和配置的環境,通過 build 指令可以建立出我們想要的映象;

一旦建立出映象,如果想要將映象分發給其他主機的docker虛擬機器,一種方法是藉助docker倉庫來實現,我們可以通過 push 指令把本地映象上傳到倉庫中,其他主機就可以通過 search 指令到倉庫中去查詢上傳的映象,找到上傳的映象之後可以通過 pull 指令將映象下載到本地,這樣別的主機的docker虛擬機器就可以擁有這個映象了;另一種方式是通過檔案的方式,將映象匯出為壓縮檔案,別的主機再用壓縮檔案匯入為映象就可以了,匯出指令是 save 或 export,匯入的指令是 load 或 import;

映象一旦建立出來也是可以刪除的,通過 rmi 指令可以將映象刪除;

如果想要檢視映象的詳細資訊,可以使用 inspect 指令;

如果想要檢視docker虛擬機器內的所有映象,可以使用 images 指令;

映象是用來建立容器的,從映象建立出容器的指令是 run;

建立出容器之後,這個容器就直接執行了,如果想要停止容器執行或者刪除容器,可以使用指令 pause 指令暫停,如果恢復執行可以使用 unpause 指令;如果想要徹底停止容器的指令是 stop ,恢復執行指令為 start;

檢視容器詳細資訊可以使用指令 inspect;

如果想要檢視docker虛擬機器內的所有所有容器可以使用 ps 指令,如果刪除容器可以使用 rm 指令;

容器可以儲存為映象,在容器裡面安裝程式,配置環境,然後儲存為映象,可以使用 commit 指令。

安裝Java映象

docker search java #搜尋與java相關的的映象

docker pull java #下載指定的映象

國外映象倉庫下載速度較慢,建議使用國內映象倉庫,如 DaoCloud, DaoCloud映象配置 , 找到Linux的配置,將其複製貼上到終端

Linux 下配置

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

配置完後還需要修改配置檔案

vim /etc/docker/daemon.json

修改前:

{"registry-mirrors": ["http://f1361db2.m.daocloud.io"],}

將最後的 , 逗號去掉就行了

修改後:

{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}

接下來搜尋與java有關的映象

docker search java

這裡使用的是 docker.io/java ,將映象的名稱複製貼上到下面程式碼中

docker pull docker.io/java

然後使用下面命令顯示docker裡面安裝的映象是什麼

docker images

匯出匯入映象

安裝了docker映象,如果想備份映象,把映象匯出,儲存為壓縮檔案,用到的指令是 save。如果要從壓縮檔案匯入映象,使用的指令是 load。

語法

docker save java > /home/java.tar.gz #匯出映象

docker load < /home/java.tar.gz #匯入映象

docker images #檢視docker虛擬機器裡面匯入匯出的映象有哪些

docker rmi java #刪除映象

實操

匯出剛才安裝的java映象

檢視一下是否匯出成功

現在將docker虛擬機器裡面的映象刪掉

檢視映象

匯入映象

檢視映象

啟動容器

示例

docker run ...

使用該指令可以建立並啟動一個容器(啟動映象會建立出一個執行狀態的容器)

語法

docker run -it --name myjava java bash

    • -it: 啟動容器之後開啟一個互動的介面
    • –name: 給容器起一個名字,可選引數,如果不給容器起名字,它就沒有名字,我們管理容器的時候可以根據容器的id去管理容器,比如關閉容器,檢視容器資訊都可以使用id查詢到這個容器
    • myjava: 容器的名字
    • java: 映象的名字
    • bash:啟動的容器執行什麼樣的程式,執行的是bash命令列

另外還有一些其他引數,比如啟動容器之後開啟什麼埠,把這個埠對映到宿主機上等

docker run -it --name myjava -p 9000:8080 -p 9001:8085 java bash

  • -p: 對映埠
  • 9000:8080: 9000 代表的是宿主機的埠,:8080 是容器的埠,這句話的意思說把容器 8080 的埠對映到真實主機 9000 埠上;
  • -p: 對映另外一組埠,容器想對映多少個埠就寫多少個 -p 引數就可以了;後面的表示把 8085 埠對映到真實宿主機9001 埠上;

還可以把宿主機上的檔案或資料夾對映到容器中,比如將來跑資料庫的時候資料庫儲存的資料一定要儲存到宿主機上的,不應該儲存到容器裡面,資料一定要在容器之外去儲存,將來在備份和恢復的時候就非常方便。

docker run -it --name myjava -v /home/project:/soft --privileged java bash

    • -v: 對映檔案,如果有多個對映就使用多個 -v;
    • /home/project:/soft: 宿主機資訊,以冒號 : 分隔,/home/project 表示宿主機的目錄,這句表示把宿主機的 /home/project 目錄對映到容器中的 /soft 目錄裡面;
    • –privileged: 在linux系統建立檔案和讀取檔案都是有讀寫許可權的,我把宿主機的目錄對映到容器的目錄中,soft 目錄就可以看到真實主機的 project 目錄中的一些東西了,如果我們想在 soft 目錄中去建立檔案和讀寫檔案,真實的宿主機會不會給 soft 這樣的許可權呢? 後面就需要加上 --privilged 這樣的引數,這個引數就告訴docker在執行的時候容器在操作對映目錄和對映檔案的時候是擁有最高許可權的,讀寫都是可以的。

操作

我們首先在 /home 目錄中建立一個資料夾,將來把資料夾對映到容器裡面。

啟動映象,並將8080埠對映到真實主機9000上,把8085埠對映到9001埠上,還有目錄的對映

docker run -it -p 9000:8080 -p 9001:8085 -v /home/project:/soft --privileged --name myjava docker.io/java bash

回車後會發現前面的提示都變了,現在的介面是進入到了容器裡面,剛才命令我們新增了 -it 引數,該引數就是啟動一個互動的介面,這裡啟動的是一個java的容器,裡面安裝了jdk,我們檢測一下java環境,輸入 javac

檢視一下java版本 java -version

檢視一下對映的目錄,會發現沒有任何的東西。

在 soft 目錄中建立一個檔案,並向裡面寫入內容

退出當前容器

進入宿主機的 /home 目錄檢視裡面內容

暫停容器

docker pause myjava

恢復容器

docker unpause myjava

徹底停止

docker stop myjava

恢復執行

docker start -i myjava

之前我們在容器的互動介面使用 `exit` 退出容器,該命令不僅是退出容器,還停止執行了,使容器進入到 `stop` 狀態裡面,如果要執行執行容器的話就必須使用 `start` 命令去重新啟動容器

重新啟動剛才關閉的容器

重新開啟一個終端,並連線到linux上,在這裡面將 myjava 的容器暫停一下

恢復容器

如果想刪除容器,前提是必須徹底停止容器,然後再去刪除容器

檢視容器