Docker
是一個開源工具,它可讓建立和管理Linux
容器變得簡單。容器就像是輕量級的虛擬機,而且能夠以毫秒級的速度來啓動或中止。Docker
幫助系統管理員和程序員在容器中開發應用程序,而且能夠擴展到成千上萬的節點。html
這是一隻鯨魚,它託着許多集裝箱。咱們能夠把宿主機可當作這隻鯨魚,把相互隔離的容器可當作集裝箱,每一個集裝箱中都包含本身的應用程序。node
Docker
技術的體系架構:容器和虛擬機(VM
)的主要區別是:linux
CPU
、內存和硬盤)的徹底隔離。G
,而容器可能只須要幾百兆。Docker
平臺基本上由三部分組成:程序員
Docker
提供的工具(CLI
以及API
等)來構建,上傳鏡像併發布命令來建立和啓動容器。Docker registry
上下載鏡像並啓動和託管容器。Docker
鏡像倉庫,用於保存鏡像,並提供鏡像上傳和下載。一個容器在某個時刻可能處於如下幾種狀態之一:web
created:已經被建立 (使用docker ps -a
命令能夠列出) 可是尚未被啓動,使用docker ps
命令還沒法列出。 running:容器在這正常運行中。 paused:容器的進程被暫停了。 restarting:容器的進程正在重啓過程當中。 exited:上圖中的stopped
狀態,表示容器以前運行過可是如今處於中止狀態 (要區別於created
狀態,它是指一個新建立的還沒有運行過的容器)。能夠經過start
命令使其從新進入running
狀態。 destroyed:容器從宿主機刪除了,不再存在了。docker
RedHat/CentOS
必需要6.6
版本以上,或者7.x
才能安裝docker
,建議在RedHat/CentOS 7
上使用docker
,由於RedHat/CentOS 7
的內核升級到了kernel 3.10
,對lxc
容器支持更好。編程
查看Linux
內核版本(內核版本必須是3.10
或者以上):json
cat /proc/version
uname -a
lsb_release -a
##沒法執行命令安裝
yum install -y redhat-lsb
複製代碼
更新yum
安裝源:後端
yum install docker -y
複製代碼
檢查docker
版本:centos
docker -v
複製代碼
安裝完成後,使用下面的命令來啓動docker
服務,並將其設置爲開機啓動:
service docker start
chkconfig docker on
複製代碼
下載官方的CentOS
的docker
鏡像:
docker pull centos
複製代碼
檢查CentOS
鏡像是否被成功拉取到本地宿主機:
# 查看本地鏡像列表
docker images
# 刪除鏡像
docker rmi <image id>
# 刪除鏡像(針對多個相同image id的鏡像)
docker rmi repository:tag
複製代碼
鏡像下載完成後,你應該會看到:
[root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker images centos
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 3fa822599e10 3weeks ago 203.5 MB
複製代碼
若是看到以上輸出,說明你可使用docker.io/centos
這個鏡像了,或將其稱爲倉庫(Repository
),該鏡像有一個名爲latest
的標籤(Tag
),此外還有一個名爲3fa822599e10
的鏡像ID
(可能您所看到的鏡像 ID 與此處的不一致,那是正常現象,由於這個數字是隨機生成的)。 此外,咱們能夠看到該鏡像只有203.5MB
,很是小巧,而不像虛擬機的鏡像文件那樣龐大。
重命名TAG
爲centos
:
# docker tag IMAGE_ID(鏡像id) REPOSITORY:TAG(倉庫:標籤)
docker tag 3fa822599e10 docker.io/centos:centos
複製代碼
啓動CentOS
的容器:
docker run -i -t -v /root/software/:/mnt/software/ 3fa822599e10 /bin/bash
複製代碼
命令參數說明: docker run <相關參數> <鏡像ID> <初始命令>
-i
:表示以交互模式運行容器-t
:表示容器啓動後會進入其命令行-v
:表示須要將本地哪一個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>更多參數詳解:
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach=false 指定容器運行於前臺仍是後臺,默認爲false
-i, --interactive=false 打開STDIN,用於控制檯交互
-t, --tty=false 分配tty設備,該能夠支持終端登陸,默認爲false
-u, --user="" 指定容器的用戶
-a, --attach=[] 登陸容器(必須是以docker run -d啓動的容器)
-w, --workdir="" 指定容器的工做目錄
-c, --cpu-shares=0 設置容器CPU權重,在CPU共享場景使用
-e, --env=[] 指定環境變量,容器中可使用該環境變量
-m, --memory="" 指定容器的內存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主機名
-v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄
--volumes-from=[] 給容器掛載其餘容器上的卷,掛載到容器的某個目錄
--cap-add=[] 添加權限,權限清單詳見:http://linux.die.net/man/7/capabilities
--cap-drop=[] 刪除權限,權限清單詳見:http://linux.die.net/man/7/capabilities
--cidfile="" 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法
--cpuset="" 設置容器可使用哪些CPU,此參數能夠用來容器獨佔CPU
--device=[] 添加主機設備給容器,至關於設備直通
--dns=[] 指定容器的dns服務器
--dns-search=[] 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件
--entrypoint="" 覆蓋image的入口點
--env-file=[] 指定環境變量文件,文件格式爲每行一個環境變量
--expose=[] 指定容器暴露的端口,即修改鏡像的暴露端口
--link=[] 指定容器間的關聯,使用其餘容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc時使用
--name="" 指定容器名字,後續能夠經過名字進行容器管理,links特性須要使用名字
--net="bridge" 容器網絡設置:
bridge 使用docker daemon指定的網橋
host //容器使用主機的網絡
container:NAME_or_ID >//使用其餘容器的網路,共享IP和PORT等網絡資源
none 容器使用本身的網絡(相似--net=bridge),可是不進行配置
--privileged=false 指定容器是否爲特權容器,特權容器擁有全部的capabilities
--restart="no" 指定容器中止後的重啓策略:
no:容器退出時不重啓
on-failure:容器故障退出(返回值非零)時重啓
always:容器退出時老是重啓
--rm=false 指定容器中止後自動刪除容器(不支持以docker run -d啓動的容器)
--sig-proxy=true 設置由代理接受並處理信號,可是SIGCHLD、SIGSTOP和SIGKILL不能被代理
複製代碼
咱們能夠把Docker
的命令大概地分類以下:
## 鏡像操做:
build Build an image from a Dockerfile
commit Create a new image from a container's changes images List images load Load an image from a tar archive or STDIN pull Pull an image or a repository from a registry push Push an image or a repository to a registry rmi Remove one or more images search Search the Docker Hub for images tag Tag an image into a repository save Save one or more images to a tar archive history 顯示某鏡像的歷史 inspect 獲取鏡像的詳細信息 ## 容器及其中應用的生命週期操做: create 建立一個容器 kill Kill one or more running containers inspect Return low-level information on a container, image or task pause Pause all processes within one or more containers ps List containers rm 刪除一個或者多個容器 rename Rename a container restart Restart a container run 建立並啓動一個容器 start 啓動一個處於中止狀態的容器 stats 顯示容器實時的資源消耗信息 stop 中止一個處於運行狀態的容器 top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until a container stops, then print its exit code attach Attach to a running container exec Run a command in a running container port List port mappings or a specific mapping for the container logs 獲取容器的日誌 ## 容器文件系統操做: cp Copy files/folders between a container and the local filesystem diff Inspect changes on a container's filesystem
export Export a container's filesystem as a tar archive import Import the contents from a tarball to create a filesystem image Docker registry 操做: login Log in to a Docker registry. logout Log out from a Docker registry. ## Volume操做: volume Manage Docker volumes ## 網絡操做: network Manage Docker networks ## Swarm 相關操做: swarm Manage Docker Swarm service Manage Docker services node Manage Docker Swarm nodes ## 系統操做: version Show the Docker version information events 持續返回docker 事件 info 顯示Docker 主機系統範圍內的信息 複製代碼
# 查看運行中的容器
docker ps
# 查看全部容器
docker ps -a
# 退出容器
按Ctrl+D 便可退出當前容器【但退出後會中止容器】
# 退出不中止容器:
組合鍵:Ctrl+P+Q
# 啓動容器
docker start 容器名或ID
# 進入容器
docker attach 容器名或ID
# 中止容器
docker stop 容器名或ID
# 暫停容器
docker pause 容器名或ID
#繼續容器
docker unpause 容器名或ID
# 刪除容器
docker rm 容器名或ID
# 刪除所有容器--慎用
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
#保存容器,生成鏡像
docker commit 容器ID 鏡像名稱
#從 host 拷貝文件到 container 裏面
docker cp /home/soft centos:/webapp
複製代碼
docker run
只在第一次運行時使用,將鏡像放到容器中,之後再次啓動這個容器時,只須要使用命令docker start
便可。
docker run
至關於執行了兩步操做:將鏡像放入容器中(docker create
),而後將容器啓動,使之變成運行時容器(docker start
)。
而docker start
的做用是,從新啓動已存在的鏡像。也就是說,若是使用這個命令,咱們必須事先知道這個容器的ID
,或者這個容器的名字,咱們可使用docker ps
找到這個容器的信息。
由於容器的ID
是隨機碼,而容器的名字又是看似無心義的命名,咱們可使用命令:
docker rename jovial_cori centos
複製代碼
給這個容器命名。這樣之後,咱們再次啓動或中止容器時,就能夠直接使用這個名字:
docker [stop] [start] new_name
複製代碼
而要顯示出全部容器,包括沒有啓動的,可使用命令:
docker ps -a
複製代碼
更改存儲目錄:
#複製docker存儲目錄
rsync -aXS /var/lib/docker/. /home/docker
#更改 docker 存儲文件目錄
ln -s /home/docker /var/lib/docker
複製代碼
查看啓動容器的具體信息:
docker inspect <container_id>
複製代碼
要獲取全部容器名稱及其IP
地址只需一個命令:
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
複製代碼
註冊一個阿里雲賬號:
阿里雲會自動爲用戶分配一個鏡像加速器的地址,登陸後進入」管理中心」 —> 」加速器」,裏面有分配給你的鏡像加速器的地址以及各個環境的使用說明。
鏡像加速器地址示例:https://xxxxx.mirror.aliyuncs.com
針對Docker
客戶端版本大於1.10.0
的用戶,能夠經過修改daemon
配置文件/etc/docker/daemon.json
來使用加速器**:
{
"registry-mirrors": ["<your accelerate address>"]
}
複製代碼
重啓Docker Daemon
:
sudo systemctl daemon-reload
sudo systemctl restart docker
複製代碼
歡迎關注技術公衆號: 零壹技術棧
本賬號將持續分享後端技術乾貨,包括虛擬機基礎,多線程編程,高性能框架,異步、緩存和消息中間件,分佈式和微服務,架構學習和進階等學習資料和文章。