運維架構服務docker:docker入門
一、確保docker就緒
查看docker程序是否存在,功能是否正常

Docker可執行程序的info命令,該命令會返回所有容器和鏡像的數量、Docker使用的執行驅動和存儲驅動以及Docker的基本配置。
二、構建第一個容器
啟動容器,用docker run命令創建容器
docker run -i -t centos /bin/bash

命令解釋:告訴docker執行docker run命令,並指定了-i和-t兩個命令行參數,-i: 以交互模式運行容器,通常與 -t 同時使用;-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
命令中用的是centos鏡像,首先docker會檢查本地是否存在centos鏡像,如果本地還沒有該鏡像的話,那么docker就會連接官方維護的Docker Hub Registry,查看Docker Hub中是否有該鏡像。Docker一旦找到該鏡像,就會下載該鏡像並將其保存到本地宿主機。
之后,Docker在文件系統內部用這個鏡像創建一個新容器。該容器擁有自己的網絡、IP地址。以及一個用來和宿主機進行通信的橋接網絡接口。最后,告訴Docker在新容器中要運行什么命令,本例中運行/bin/bash命令啟動了一個Bash shell。
當容器創建完畢后,Docker就會執行容器中的/bin/bash命令,這時就會看到容器內的shell。[root@4f6fdd17f86f /]#
三、容器使用
1、容器ID

可以看到hostname就是容器的ID
查看cat /etc/hosts

Docker已在Hosts文件為該容器的IP地址添加了一條主機配置項。
2、容器中安裝軟件
容器中安裝vim軟件,可以在容器中做任何想做的事情,退出的時候輸入exit,就可以返回到centos宿主機的命令行提示符。
[root@4f6fdd17f86f /]# yum install vim

3、退出容器

用docker ps –a查看當前系統中容器的列表
![]()
默認情況下docker ps只能看到正在運行的容器,但是加上-a會列出所有的容器,包括正在運行的和已經停止的。
docker ps –l 會列出最后一次運行的容器,包括正在運行的和已經停止的。
從該命令的輸出結果中我們可以看到容器的很多有用信息:ID、用於創建該容器的鏡像、容器最后執行的命令、創建時間以及容器的退出狀態(上面退出狀態為0,因為容器是通過正常的exit命令退出)
4、容器命名
Docker會為我們創建的每一個容器自動生成一個隨機的名稱。如果想為容器指定一個名稱,而不是使用自動生成的名稱,則可以用—name標志來實現。
[root@dst6 ~]# docker run --name bigdata_container -i -t centos /bin/bash
[root@503b4ba12b02 /]# exit
容器的名稱必須是唯一的。如果我們試圖創建兩個名稱相同的容器,則命令失敗。如果要使用的容器名稱已經存在,可以先用docker rm命令刪除已有的同名容器后,再來創建新的容器。
5、啟動停止的容器
可以用容器ID或者容器name來啟動容器。
docker start name/ID

6、附着到容器上
通過命令,重新附着到已經運行的容器上。
docker attch name/ID

如果推出shell,則容器也會停止。
7、創建守護式容器
除了創建交互式運行的容器,可以創建長期運行的容器。守護式容器沒有交互式會話,非常適合運行應用程序和服務。
docker run --name bigdata_daemon -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"
如上命令用了-d參數,因此Docker會將容器放到后台運行。

在容器里運行了一個while循環,該循環會一直打印hello world,直到容器或進程停止運行。
通過組合使用參數,可以發現docker run命令並沒有像上一個容器一樣將主機的控制台附着到新的shell會話上,而是僅僅返回了一個容器ID而已。可以用docker ps查看正在運行的容器,或者docker attch附着到容器上查看。
![]()

可以用docker logs來獲取容器的日志:

Docker會輸出最后幾條日志項並返回。也可以用-f參數來監控Docker的日志,與tail –f命令非常類似。

也可以跟蹤容易日志的某一個片段,只需要在logs后使用tail命令即可。
docker logs --tail 10 bigdata_daemon獲取日志的最后10行內容。
docker logs --tail 0 –f bigdata_daemon來跟蹤某個容器的最新日志而不必讀取整個日志文件。
為了方便調試,可以使用-t標志來為每條日志減傷時間戳。

8、查看容器內的進程
docker top bigdata_daemon

執行之后,可以看到容器內的所有進程、運行進程的用戶及進程ID。
9、容器內部運行進程
如上面的例子,如果我們運行了while循環之后,想打開一個新的shell交互式任務,可以用exec命令。
docker exec -t -i bigdata_daemon /bin/bash

10、停止容器
docker stop name/ID
docker stop bigdata_daemon

11、自動重啟容器
如果由於某種錯誤而導致容器停止運行,還可以通過—restart標志,讓Docker自動重新啟動該容器。--restart標志會檢查容器的退出代碼,並據此來決定是否重啟容器。默認Docker不會重啟容器的。
docker run --restart=always --name bigdata_daemon -d centos /bin/sh -c "while true;do echo hello world;sleep 1;done"

除了always,還可以將標志設為on-failure,這樣,只有當容器的退出代碼為非0值的時候,才會自動重啟。另外,on0failure還接受一個可選的從起次數參數。
--restart=on-failure:5
當容器退出代碼為非0時,Docker會自動重啟該容器,最多重啟5次。
12、深入容器
docker ps可以獲取容器的信息。用docker inspect來獲取更多的容器信息。
docker inspect bigdata_daemon

docker inspect命令會對容器進行詳細的檢查,然后返回其配置信息,包括名稱、命令、網絡配置以及很多有用的數據。
也可以用-f或者--format標志來選定查看結果。
docker inspect --format='{{.State.Running}}' bigdata_daemon
![]()
也可以同時制定多個容器,並顯示每個容器的輸出結果。
13、刪除容器
用docker rm命令來刪除。
docker rm bigdata_daemon
運行中的容器是無法產出的,必須通過docker stop或者docker kill命令停止容器,才能將其刪除。
一次刪除所有容器:docker rm ‘docker ps -a -q’
-a標志代表列出所有的容器,-q標志則表示返回容器的ID而不會返回其他信息
