正因爲容器的這些輕、快的特點,所以容器技術右叫做「輕量虛擬化」技術,在很多場合下,容器技術比傳統虛擬化技術更有優勢。
Docker之前的各種容器技術,最大問題是使用起來不方便,只有少數技術高手才能熟練應用。而Docker的最大優勢就是讓容器的管理變得極其方便,不需要掌握高深的技術就能使用。
每個Docker容器運行在獨立的虛擬環境中,虛擬環境包括多個方面,其中最重要的就是獨立的文件系統;在這個文件系統的讀寫操作,即不影響宿主機的文件系統,也不影響其他容器的文件系統。
Docker鏡像是一個比較複雜的概念,現階段,我們可以簡單地把Docker鏡像理解成一個目錄。Docker Server在啓動容器的時候,先根據這個鏡像目錄,複製出一個新的目錄,然後在容器進程啓動時,讓這個進程chroot到這個新的目錄下。這樣,這個目錄就成了這個容器的根文件系統(rootfs)。
Tips: 在宿主機中使用chroot aufs/mnt/容器編號 可以進入容器的文件系統
通過docker images指令來查看本地有哪些鏡像
Docker剛安裝完,本地Registry是空的。因此我們需要從Docker官方Registry來拉取鏡像。docker pull命令用於從官方Registry拉取鏡像。
如果從Docker官方Registry拉取鏡像的速度很慢,可以嘗試daocloud提供的加速器服務。https://dashboard.daocloud.io/mirror有詳細使用方法介紹。
docker run命令用於運行容器。
docker run是最常用也是最複雜的命令,通過docker help run我們可以看到該命令有很多選項,其中最常用的選項包括:
容器運行成功後,會返回一個64字符的容器ID,作爲容器的唯一標識。類似於鏡像ID,容器ID也可以採用簡寫形式。
通過如下命令來運行一個交互式容器:
sudo docker run -it centos:6 /bin/bash
通過如上的命令,我們啓動了新的shell,並運行在容器環境中。由於是一個交互式容器,所有我們會離開當前的shell,被這個新的shell帶入到容器的虛擬世界中,此後我們在這個shell裏面執行的任何命令,都是相對於這個虛擬世界的。
當我們在新的shell裏面執行exit,就結束了這個bash進程,從而也結束了這個容器,我們從虛擬世界又返回到宿主機的現實世界。
交互式容器適合一些臨時性的任務,當退出bash的時候,交互式容器的生命也就結束了。大多數場合下,我們需要的是守護式容器。
sudo docker run -d redis
沒有指定命令,那麼會使用鏡像所提供的默認命令。redis鏡像的默認命令是/entrypoint.sh redis-server
守護式容器運行在後臺,這樣我們就可以繼續留在當前shell中進行其他操作。
sudo docker ps 查看運行中的容器
Tips : 在上述命令後加上-a ,可以查看所有運行過的容器,包括已經退出的。
docker ps命令只能查看容器的基本信息;
sudo docker inspect [ID]
docker inspect返回的信息是JSON格式的,非常豐富。有時候我們需要獲取這些信息來進行二次開發。
docker inspect -f 則可以指定查看某種信息,例如查看容器的IP地址:
sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' [ID]
sudo docker stop [ID]
sudo docker rm [ID]
Tips:容器停止後,並不會被自動刪除
刪除完之後再運行docker ps -a,會發現容器已經消失了
目前Docker已可以安裝到絕大多數Linux發行版上,包括Ubuntu、CentOS、Redhat等,也可以安裝到蘋果Mac OS上。
需要注意的是,目前Docker只支持64位操作系統。
在Ubuntu系統上通過apt-get命令來安裝軟件
Ubuntu官方軟件倉庫提供了Docker的穩定版,通過如下步驟進行安裝:
Docker是一個經典的CS架構:
實驗描述:
本實驗模擬了需要兩個機器,分別運行客戶端和服務端程序的場景
實驗步驟:
什麼是Docker?
什麼是容器?
如何安裝Docker?
Docker鏡像和鏡像倉庫。
Docker容器的創建、刪除、停止、查看等基本命令。