Docker:
Docker 是一個開源項目,誕生于 2013 年初,最初是 dotCloud 公司內部的一個業余項目。它基于 Google 公司推出的 Go 語言實現。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。
Docker 自開源后受到廣泛的關注和討論,以至于 dotCloud 公司后來都改名為 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。
Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。由于使用LXC來創建和管理虛擬機不方便。
在 LXC 的基礎上 Docker 進行了進一步的封裝,就是用戶創建容器的一個工具。讓用戶不需要去關心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
Docker容器的六種模式空間:名稱空間;用戶空間;文件系統空間;網絡空間;進程id的空間;傳輸空間
Docker 容器只是為了運行單個應用程序的。(管理方便高效)
LXC: LinuX Container (Linux容器)
chroot,根切換;
namespaces:名稱空間
CGroups:控制組
簡單使用:
lxc-checkconfig:
檢查系統環境是否滿足容器使用要求;
lxc-create:創建lxc容器;
lxc-create -n NAME -t TEMPLATE_NAME
lxc-start:啟動容器;
lxc-start -n NAME -d
Docker的使用和安裝:
配置yum倉庫:
首先要配置extras源:(去官網查和本機系統所匹配的源:如系統是centos7.4然后源也必須是7.4的)
vault.centos.org (centos官網地址)
[extras]
name=extras
http://vault.centos.org/7.4.1708/extras/x86_64/
gpgcheck=0
在配置docker源地址:(可以去阿里云上去查找)
[docker]
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
最后還需要配置epel源,應為docker包依賴epel源里的包。
yum install docker-ce (安裝docker包)
配置文件:/etc/docker/daemon.json (文件夾和文件都需要自己建立)
添加鏡像加速器:
vim /etc/docker/daemon.json
{
"registry-mirrors": [“https://registry.docker-cn.com”]
} (添加此行)此為官網的鏡像加速器,還可以使用阿里云的鏡像加速器。
systemctl start docker.service (啟動服務)
docker命令:
Containers:管理容器
Images:管理鏡像、映像
docker version (查看版本信息)
docker info (查看詳細信息;運行的容器個數;暫停的個數;鏡像個數等)
鏡像的管理:
docker search:(搜尋官網上的docker鏡像,)例如:docker search nginx (搜尋nginx的鏡像)
docker image pull:(下載docker鏡像,從官網上)例如:docker pull nginx (下載搜索的nginx鏡像)
docker image list :(列出本地所有的docker鏡像)
docker image list nginx (只列出本地nginx版本的鏡像)
docker image rm : (刪除下載下來的本地鏡像) 例如:docker image rm nginx:1.14-alpine (鏡像+標簽)
容器的創建:(如果本地沒有鏡像文件,啟動時會自動到官網上下載)
docker create:(創建docker容器)例如:docker create -it –name b1 busybox:latest (只是busybox需要添加-it的命令來創建)其他容器的創建:docker create –name b2 nginx
docker start:(啟動docker容器) docker start -i b1 :(b1:為創建容器的自定義的名稱;-i 也只是busybox鏡像啟動的所添加的選項;啟動不成功可以通過-i -a這兩個選項來調節,)其他容器的啟動:docker start b1
docker run:(直接創建運行docker容器);如果本地沒人鏡像文件docker會自動去官網上查詢并下載。
例1 :docker run –name b1 -it busybox:latest (b1為自定義的容器名稱;-it 為開啟交互式界面,既打開容器的界面,busybox:latest :為打開的鏡像名稱和標簽號)
例2: docker run –name web1 -d nginx (運行nginx的鏡像;-d 不要運行在后臺,因為此docker容器只有一個程序;如果運行在后臺,容器上沒有運行的程序,默認會終止此容器)
例3 :docker run –name red1 -d redis:4-alpine (創建一個redis鏡像,版本號不指定,默認安裝的時latest,由于本地沒有鏡像,會去官網上自動去下載)
下載下來的鏡像存放到本地,可以使用:docker image ls 來查看。
docker container ls -a (查看處于停止狀態下的docker容器)
交互式的連接一個已經啟動的容器:
-i:–interactive,交互式;
-t:Allocate a pseudo-TTY
docker exec -it red2 /bin/sh (以交互式的方式進入到已經開啟的容器里面去)
docker ps:(列出容器的詳細信息在運行的容器)或者:docker container ps docker container ls 等命令都可以
docker ps -a (列出所有容器,包括運行的和不在運行的)
docker image ls (列出本地的所有的鏡像文件)
docker restart:(重新啟動docker容器) docker restart b1 (b1:為創建容器時定義的名稱)
docker stop:(停止docker容器)docker stop b1 (b1:為創建容器時定義的名稱)
docker kill:(強行停止docker容器)docker kill b1 (b1:為創建容器時定義的名稱)
docker rm (刪除創建的容器) docker rm b1 (b1:為創建容器時定義的名稱)
Docker鏡像:
官網上查找鏡像及版本號(tags)
在官網上搜尋docker的鏡像文件。 https://hub.docker.com/(官網搜尋地址)
docker pull nginx:1.14-alpine (后面為版本信息,在官網啊地址上搜尋的結果)如果不加版本信息:
docker pull nginx 則下載下來的默認標簽為latest(最新的)的版本的。
docker image list (查看已經下載下來的鏡像)
Docker鏡像的原理及組成
Docker鏡像含有啟動容器所需要的文件系統及其內容,因此, 其用于創建并啟動docker容器 。
結構:
采用分層構建機制,最底層為bootfs,其之為rootfs
bootfs:用于系統引導的文件系統,包括bootloader和kernel,容器啟動完 成后會被卸載以節約內存資源;
rootfs:位于bootfs之上,表現為docker容器的根文件系統;
傳統模式中,系統啟動之時,內核掛載rootfs時會首先將其掛載為“只讀”模式, 完整性自檢完成后將其重新掛載為讀寫模式
docker中,rootfs由內核掛載為“只讀”模式,而后通過“聯合掛載 ”技術額外掛 載一個“可寫”層;
位于下層的鏡像稱為父鏡像(parent image),最底層的稱為基礎 鏡像(base image)
最上層為“可讀寫”層,其下的均為“只讀”層
Registry (docker鏡像倉庫)
在下載鏡像時,如果不指定路徑,默認是下載Docker Hub官方的鏡像倉庫里的鏡像文件。
如果也沒有指定tags(版本號);則默認下載latest(最新的)的版本。
Registry用于保存docker鏡像,包括鏡像的層次結構和元數據
Repository :由單個類型的docker鏡像的所有迭代版本組成的鏡像倉庫 ;在鏡像倉庫之下。(例如:nginx;下面有多個版本的鏡像文件,都是nginx的標簽;但他都是nginx的鏡像文件)
一個 Registry是由多個Repository鏡像倉庫所組成的。
https://quay.io/ (另一個鏡像網站)
如果在此網上上下載格式為:docker pull quay.io/coreos/flannel:v0.10.0-arm64
(quay.io:官網地址:/coreos/flannel ;下圖中所搜尋的flannel的前綴;:v0.10.0-arm64:版本號)
鏡像的制作:
1 . 基于已有的容器,經過修改后,在制作后鏡像:
docker run –name b1 -it busybox:latest (啟動一個容器)
進去之后添加一個html的文件:
mkdir -p /data/html
cd /data/html/
vi index.html
hello
不能將容器關閉或者退出,在容器運行狀態下,另外開啟一個linux的終端界面:
docker commit -p b1 (基于b1做新的鏡像文件)由于此處并沒有命名所以此鏡像只有id號而沒有名稱:
docker tag 2e8b205a2902 magedu/http:1.0 (由于剛創建的鏡像沒有名稱和標簽,使用不方便,可以創建名稱和標簽:創建時要使用其id號來引用)
docker tag magedu/http:1.0 magedu/http:1.1 (給同一個鏡像創建多個標簽)
當一個鏡像有多個標簽時,刪除一個標簽不會將鏡像刪除,如果只有一個標簽了,刪除了最后一個標簽就會將鏡像刪除了。
docker image rm magedu/http:1.1 (刪除其中一個鏡像標簽)
docker inspect nginx (查看具體的鏡像里的內容)
docker run –name ttt -it magedu/http:1.0 (開啟新建的鏡像)
將鏡像推送到官網:
首先要在官網上注冊一個個人的賬號:https://hub.docker.com/
登陸后創建一個倉庫:Create Repository
magedu/httpd (倉庫的名稱)
登陸:
docker login -u lvchenyang (如果是推送到官網上,不用寫服務器的地址;如果不是則需要寫服務器的地址)
推送:
docker push magedu/httpd (如果不添加標簽的化默認推送magedu/httpd;所有版本的)
推送到阿里云的個人倉庫:
https://cr.console.aliyun.com/cn-hangzhou/repositories (官網)
注冊賬號,創建新的鏡像倉庫。
想要將自己的鏡像推送到阿里云上要將鏡像重新打上阿里云的標簽
53天第3個視頻里有:70分鐘左右
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104294