您好,登錄后才能下訂單哦!
Docker 是一個能夠把開發應用程序自動部署到容器的開源引擎。它由Docker公司的團隊編寫,基于Apache 2.0開源協議授權。它提供了一個簡單、輕量的建模方式,使開發生命周期更高效快速,鼓勵了面向服務的架構設計。Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
Docker 的特點:
更快速的交付和部署
更高效的虛擬化
更輕松的遷移和擴展
更簡單的管理
容器技術與傳統虛擬機性能對比
Docker與虛擬機建構對比
Docker 容器本質上是宿主機上的一個進程。Docker 通過 namespace 實現了資源隔離,通過 cgroups 實現了資源的限制,通過寫時復制機制(copy-on-write)實現了高效的文件操作。
Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,為了隔離有問題的應用,Docker運用Namespace將進程隔離,為進程或進程組創建已隔離的運行空間,為進程提供不同的命名空間視圖。這樣,每一個隔離出來的進程組,對外就表現為一個container(容器)。需要注意的是,Docker讓用戶誤以為自己占據了全部資源,但這并不是”虛擬機”。
Docker 中的三個概念:鏡像,容器,倉庫
鏡像(image):Docker 鏡像就是一個只讀的模板,鏡像可以用來創建 Docker 容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下載一個已經做好的鏡像來直接使用。
鏡像是一種文件結構。Dockerfile中的每條命令都會在文件系統中創建一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建于這些聯合的文件系統之上。Docker官方網站專門有一個頁面來存儲所有可用的鏡像,網址是:index.docker.io。
容器( Container):容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。鏡像是只讀的,容器在啟動的時候創建一層可寫層作為最上層。
倉庫:倉庫是集中存放鏡像文件的場所,倉庫注冊服務器(Registry)上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。
Docker倉庫用來保存我們的images,當我們創建了自己的image之后我們就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另外一臺機器上使用這個image時候,只需要從倉庫上pull下來就可以了。Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的服務。
[root@localhost ~]# docker search mysql
//查找鏡像
這樣查找相當于在https://hub.docker.com/中查找,大家盡量使用官方的鏡像
[root@localhost ~]# docker pull busybox
//拉取鏡像
[root@localhost ~]# docker save -o busybox.tar busybox:latest
//把鏡像導出到本地 -o:相當--output導出
[root@localhost ~]# docker images
//查看本地鏡像
倉庫(鏡像名稱) 鏡像標簽 鏡像id 創建時間 大小
雖然我們看到鏡像標簽為latest(最新的),但并不表示他一定是最新的。而且鏡像如果沒有寫標簽,默認以latest為標簽。
[root@localhost ~]# docker rmi busybox:latest
//刪除鏡像
[root@localhost ~]# docker images
//查看本地鏡像這里沒有busybox
[root@localhost ~]# docker load -i busybox.tar
//根據本地鏡像包導入鏡像
[root@localhost ~]# docker images
//查看本地鏡像這里又有busybox
[root@localhost ~]# docker ps
//查看容器-正在運行的
[root@localhost ~]# docker ps -a
//查看所有容器
[root@localhost ~]# docker rm c3bb3a6f73eb
//刪除容器 id或鏡像名稱(不能刪除正在運行的容器)
[root@localhost ~]# docker stop test
//停止容器運行 (記得驗證一下docker ps -a)
[root@localhost ~]# docker start test
//啟動容器 (記得驗證一下docker ps -a)
[root@localhost ~]# docker rm test -f
//強制刪除容器 (記得驗證一下docker ps -a)
[root@localhost ~]# docker ps -a -q | xargs docker rm -f
//強制刪除所有容器(生產環境嚴禁使用)
[root@localhost ~]# docker ps -a -q | xargs docker start -f
//強制開啟所有容器(生產環境嚴禁使用)
[root@localhost ~]# docker ps -a -q | xargs docker stop -f
//強制關閉所有容器(生產環境嚴禁使用)
[root@localhost ~]# docker run -it --name test1 busybox:latest
//開啟一個容器
-i:可交互
-t:偽終端
-d:守護進程
--name:容器命名
--restart=always:始終保持運行(隨著docker開啟而運行)
[root@localhost ~]# docker run -itd --name test2 --restart=always busybox:latest
//docker重啟后,始終保持運行(隨著docker開啟而運行)
路由轉發
[root@localhost ~]# vim /etc/sysctl.conf
//添加路由轉發
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
進入容器方法
[root@localhost ~]# docker exec -it test2 /bin/sh
//進入一個容器(退出容器后還在運行)
[root@localhost ~]# docker attach test2
//也是進入一個容器(退出容器不在運行)
區別:exec進入的方式需要添加-i -t選項,后邊還需要給容器一個shell環境。
但attach就不需要這么麻煩。
exec進入的方式:如果執行exit退出, 容器仍然保持運行。
attach:如果執行exit退出, 容器會被關閉。如果想要保持容器不被關閉,可以使用用鍵盤: Ctrl + p Ctrl +q可以實現。
本質上去區別: exec 進入的方法,會生產新的進程。
attach不會生產新進程。
強制刪除鏡像
[root@localhost ~]# docker rmi centos:7 -f
//強制刪除鏡像
上面是把鏡像標簽給刪了,要想徹底刪除鏡像,用下面的命令把鏡像id也刪了,docker有緩存機制,即使把這個鏡像給刪了,但是會有緩存,其他的容器依舊可以使用
基于centos: 7鏡像運行-個容器,并且,在這個容器內部署Nginx服務。
1)下載centos:7鏡像[root@localhost ~]# docker pull centos:7
[root@localhost ~]# rz
上傳一個nginx包
2)運行容器[root@localhost ~]# docker run -itd --name webapp --restart=always centos:7
3)進入容器,開始部署nginx服務
[root@localhost ~]# docker cp nginx-1.14.0.tar.gz webapp:/root
//將nginx包導入到容器內
[root@localhost ~]# docker exec -it webapp /bin/bash
//進入容器
[root@8604fb370aab /]# ls root
安裝nginx
[root@8604fb370aab /]# cd /root
[root@8604fb370aab ~]# tar zxf nginx-1.14.0.tar.gz
[root@8604fb370aab ~]# yum -y install gcc pcre pcre-devel openssl-devel zlib zlib-devel make
//安裝nginx所需依賴
[root@8604fb370aab ~]# cd nginx-1.14.0
[root@8604fb370aab nginx-1.14.0]# useradd -M -s /sbin/nologin nginx
//創建用戶
[root@8604fb370aab nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
//編譯安裝
[root@8604fb370aab nginx-1.14.0]# ln -s /usr/local/nginx/sbin/
nginx /usr/local/sbin/
//鏈接命令目錄
[root@8604fb370aab nginx-1.14.0]# nginx
//啟動nginx
[root@8604fb370aab nginx-1.14.0]# cd /usr/local/nginx/html/
[root@8604fb370aab html]# echo This is a testweb in container > index.html
//創建一個測試頁面
[root@8604fb370aab html]# curl 127.0.0.1
//訪問網頁
[root@8604fb370aab /]# yum provides ip
//查看哪一個組件支持這條命令
[root@8604fb370aab /]# yum -y install net-tools
//安裝支持這條命令的
[root@8604fb370aab /]# ifconfig
//查看ip
宿主機查看網頁
[root@localhost ~]# curl 172.17.0.4
[root@localhost ~]# docker commit webapp myweb:xgp
//把容器制作成鏡像 (會返回一個哈希值,代表的是鏡像的id號)增加可移植性
[root@localhost ~]# docker images
//查看鏡像
[root@localhost ~]# docker run -itd --name webapp-2 myweb:xgp
[root@localhost ~]# docker exec -it webapp-2 /bin/bash
[root@e8d15e9aef29 /]# nginx
[root@e8d15e9aef29 /]# curl 127.0.0.1
This is a testweb in container
[root@e8d15e9aef29 /]# ifconfig
查看網頁
[root@localhost ~]# curl 172.17.0.5
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。