讓自己的電腦做網(wǎng)站的服務(wù)器營(yíng)銷軟文是什么意思
文章目錄
- 1. Docker容器的基本概述
- 1.1 簡(jiǎn)介
- 1.2 容器的優(yōu)點(diǎn)
- 1.3 Docker與虛擬機(jī)的區(qū)別
- 1.4 Docker核心組成
- 1.4.1 鏡像
- 1.4.2 容器
- 1.4.3 倉(cāng)庫(kù)
- 1.5 容器在內(nèi)核中支持2種重要技術(shù)
- 1.5.1 linux六大namespace(命名空間)
- 1.6 Docker的使用場(chǎng)景
- 2. Docker的部署
- 2.1 前置準(zhǔn)備
- 2.2 安裝Drocker
- 3. Docker 鏡像操作
- 3.1 搜索鏡像
- 3.2 獲取鏡像
- 3.3 查看鏡像信息
- 3.4 為本地的鏡像添加新的標(biāo)簽
- 3.5 刪除鏡像
- 3.6 鏡像的存出、載入
- 3.6.1 存出鏡像 ---- 將鏡像保存成為本地文件
- 3.6.2 載入鏡像 ---- 將鏡像文件導(dǎo)入到鏡像庫(kù)中
- 3.7 上傳鏡像
- 4. Docker 容器操作
- 4.1 容器的創(chuàng)建
- 4.2 容器的啟動(dòng)
- 4.3 停止容器
- 4.5 刪除容器
- 4.6 容器的進(jìn)入
- 4.7 復(fù)制到容器中
- 4.8 從容器復(fù)制文件到主機(jī)
- 4.9 容器的導(dǎo)出和導(dǎo)入
- 4.9.1 容器的導(dǎo)入
- 4.9.2 容器的導(dǎo)出
- 4.10 創(chuàng)建并啟動(dòng)容器
1. Docker容器的基本概述
1.1 簡(jiǎn)介
- Docker是一個(gè)開源的應(yīng)用容器引擎,基于
go語(yǔ)言
開發(fā)并遵循了apache2.0協(xié)議
開源。 - Docker是在Linux容器里運(yùn)行應(yīng)用的開源工具,是一種輕量級(jí)的“虛擬機(jī)”。
- Docker 的容器技術(shù)可以在一臺(tái)主機(jī)上輕松為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。
1.2 容器的優(yōu)點(diǎn)
- 靈活:即使是最復(fù)雜的應(yīng)用也可以集裝箱化。
- 輕量級(jí):容器利用并共享主機(jī)內(nèi)核。
- 可互換:可以即時(shí)部署更新和升級(jí)。
- 便攜式:可以在本地構(gòu)建,部署到云,并在任何地方運(yùn)行。
- 可擴(kuò)展:可以增加并自動(dòng)分發(fā)容器副本。
- 可堆疊:可以垂直和即時(shí)堆疊服務(wù)。
1.3 Docker與虛擬機(jī)的區(qū)別
特性 | Docker容器 | 虛擬機(jī) |
---|---|---|
啟動(dòng)速度 | 秒級(jí) | 分鐘級(jí) |
計(jì)算能力損耗 | 幾乎無 | 損耗 50%左右 |
性能 | 接近原生 | 弱于 |
系統(tǒng)支持量(單機(jī)) | 上千個(gè) | 幾十個(gè) |
隔離性 | 資源隔離/限制 | 完全隔離 |
容器是在linux上本機(jī)運(yùn)行,并與其他容器共享主機(jī)的內(nèi)核,它運(yùn)行的是一個(gè)獨(dú)立的進(jìn)程,不占用其他任何可執(zhí)行文件的內(nèi)存,非常輕量。
虛擬機(jī)運(yùn)行的是一個(gè)完整的操作系統(tǒng),通過虛擬機(jī)管理程序?qū)χ鳈C(jī)資源進(jìn)行虛擬訪問,相比之下需要的資源更多。
1.4 Docker核心組成
1.4.1 鏡像
是創(chuàng)建容器的基礎(chǔ),是一個(gè)只讀的模板文件,里面包含運(yùn)行容器中的應(yīng)用程序所有需要的所有內(nèi)容(應(yīng)用程序文件、配置文件、運(yùn)行庫(kù)文件、依賴包等)
1.4.2 容器
是用鏡像運(yùn)行的實(shí)例,容器可以被創(chuàng)建、啟動(dòng)、停止、刪除,每個(gè)容器之間默認(rèn)是相互隔離的
1.4.3 倉(cāng)庫(kù)
是用來保存鏡像的地方,有公有倉(cāng)庫(kù)和私有倉(cāng)庫(kù)之分
Docker 的鏡像、容器、日志等內(nèi)容全部都默認(rèn)存儲(chǔ)在 /var/lib/docker
1.5 容器在內(nèi)核中支持2種重要技術(shù)
docker本質(zhì)就是宿主機(jī)的一個(gè)進(jìn)程,docker是通過namespace
實(shí)現(xiàn)資源隔離,通過cgroup
實(shí)現(xiàn)資源限制
1.5.1 linux六大namespace(命名空間)
namespace | 系統(tǒng)調(diào)用參數(shù) | 隔離內(nèi)容 |
---|---|---|
UTS | CLONE_NEWUTS | 主機(jī)名和域名 |
IPC | CLONE_NEWWIPS | 信號(hào)量,消息隊(duì)列和共享內(nèi)存 |
PID | CLONE_NEWPID | 進(jìn)程編號(hào) |
NETWORK | CLONE_NEWNET | 網(wǎng)絡(luò)設(shè)備,網(wǎng)絡(luò)棧,端口等 |
MOUNT | CLONE_NEWNS | 掛載點(diǎn)(文件系統(tǒng)) |
USER | CLONE_NEWUSER | 用戶和用戶組(3.8以后的內(nèi)核才支持) |
1.6 Docker的使用場(chǎng)景
-
使用Docker容器開發(fā)、測(cè)試、部署服務(wù)
-
創(chuàng)建隔離的運(yùn)行環(huán)境3.搭建測(cè)試環(huán)境
-
構(gòu)建平臺(tái)即服務(wù)PaaS基礎(chǔ)設(shè)施
-
提供軟件即服務(wù)SaaS應(yīng)用程序
-
高性能、超大規(guī)模宿主機(jī)部署
2. Docker的部署
2.1 前置準(zhǔn)備
systemctl stop firewalld.service
setenforce 0#如果是最小化安裝需要安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2 --------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux內(nèi)核中支持邏輯卷管理的通用設(shè)備映射機(jī)制,它為實(shí)現(xiàn)用于存儲(chǔ)資源管理的塊設(shè)備驅(qū)動(dòng)提供了一個(gè)高度模塊化的內(nèi)核架構(gòu)。
device mapper存儲(chǔ)驅(qū)動(dòng)程序需要 device-mapper-persistent-data 和 lvm2。
-------------------------------------------------------------------------------------------
2.2 安裝Drocker
#設(shè)置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安裝 Docker-CE并設(shè)置為開機(jī)自動(dòng)啟動(dòng)
yum install -y docker-ce docker-ce-cli containerd.io
--------------------------------------------------------------------------------------------
安裝好的Docker系統(tǒng)有兩個(gè)程序,Docker服務(wù)端和Docker客戶端。其中Docker服務(wù)端是一個(gè)服務(wù)進(jìn)程,負(fù)責(zé)管理所有容器。 Docker客戶端則扮演著Docker服務(wù)端的遠(yuǎn)程控制器,可以用來控制Docker的服務(wù)端進(jìn)程。大部分情況下Docker服務(wù)端和客戶端運(yùn)行在一臺(tái)機(jī)器上。
--------------------------------------------------------------------------------------------
systemctl start docker.service
systemctl enable docker.service
#查看 docker 版本信息
docker version#docker 信息查看
docker info
3. Docker 鏡像操作
3.1 搜索鏡像
#基本格式:
docker search 關(guān)鍵字
#示例
docker search nginx
3.2 獲取鏡像
#基本格式:
docker pull 倉(cāng)庫(kù)名稱[:標(biāo)簽]
#如果下載鏡像時(shí)不指定標(biāo)簽,則默認(rèn)會(huì)下載倉(cāng)庫(kù)中最新版本的鏡像,即選擇標(biāo)簽為 latest 標(biāo)簽。
#鏡像加速下載
瀏覽器訪問 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取鏡像加速器配置mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
docker pull nginx
docker pull nginx:1.12
#指定下載鏡像版本
3.3 查看鏡像信息
#鏡像下載后存放在 /var/lib/docker 。
#Docker 相關(guān)的本地資源存放在 /var/lib/docker/ 目錄下,其中 containers 目錄存放容器信息,image 目錄存放鏡像信息,overlay2 目錄下存放具體的鏡像底層文件。#查看下載的鏡像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看下載到本地的所有鏡像
docker images
REPOSITORY:鏡像屬于的倉(cāng)庫(kù);
TAG:鏡像的標(biāo)簽信息,標(biāo)記同一個(gè)倉(cāng)庫(kù)中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號(hào),唯一標(biāo)識(shí)一個(gè)鏡像;
CREATED:鏡像創(chuàng)建時(shí)間;
VIRTUAL SIZE:鏡像大小;
#根據(jù)鏡像的唯一標(biāo)識(shí) ID 號(hào),獲取鏡像詳細(xì)信息
#基本格式:
docker inspect 鏡像ID號(hào)
#示例
docker inspect bc649bab30d1
lowerdir是鏡像層,目錄或者文件是只讀的,其實(shí)就是rootfs,image layer可以分很多層,所以對(duì)應(yīng)的lowerdir是可以有多個(gè)目錄
upperdir是在lowerdir之上的容器層,這層是可讀可寫的,在啟動(dòng)一個(gè)容器時(shí)候會(huì)進(jìn)行創(chuàng)建,所有的對(duì)容器數(shù)據(jù)更改都發(fā)生在這里層
MergedDir是表現(xiàn)層,是容器的掛載點(diǎn)
3.4 為本地的鏡像添加新的標(biāo)簽
#基本格式:
docker tag 名稱:[標(biāo)簽] 新名稱:[新標(biāo)簽]
#示例
docker tag nginx:latest nginx:webdocker images | grep nginx
3.5 刪除鏡像
#基本格式:
docker rmi 倉(cāng)庫(kù)名稱:標(biāo)簽 #當(dāng)一個(gè)鏡像有多個(gè)標(biāo)簽時(shí),只是刪除其中指定的標(biāo)簽
或者
docker rmi 鏡像ID號(hào) #會(huì)徹底刪除該鏡像注意:如果該鏡像已經(jīng)被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。
docker rmi nginx:web
3.6 鏡像的存出、載入
3.6.1 存出鏡像 ---- 將鏡像保存成為本地文件
#基本格式:
docker save -o 存儲(chǔ)文件名 存儲(chǔ)的鏡像
docker save -o nginx1.12.tar nginx:1.12 #存出鏡像命名為nginx存在當(dāng)前目錄下
ls -lh
3.6.2 載入鏡像 ---- 將鏡像文件導(dǎo)入到鏡像庫(kù)中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
docker load < nginx1.12.tar
3.7 上傳鏡像
默認(rèn)上傳到 docker Hub 官方公共倉(cāng)庫(kù)
,需要注冊(cè)使用公共倉(cāng)庫(kù)的賬號(hào)。
https://hub.docker.com
可以使用 docker login 命令
來輸入用戶名、密碼和郵箱來完成注冊(cè)和登錄。
在上傳鏡像之前,還需要先對(duì)本地鏡像添加新的標(biāo)簽,然后再使用 docker push 命令進(jìn)行上傳。
#基本格式
docker login #默認(rèn)登錄官方公有倉(cāng)庫(kù)
docker push 你的倉(cāng)庫(kù)名/鏡像名:標(biāo)簽
docker tag nginx:latest soscscs/nginx:web #添加新的標(biāo)簽時(shí)必須在前面加上自己的dockerhub的username
docker login #登錄公共倉(cāng)庫(kù)
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上傳鏡像
4. Docker 容器操作
4.1 容器的創(chuàng)建
就是將鏡像加載到容器的過程。
新創(chuàng)建的容器默認(rèn)處于停止?fàn)顟B(tài),不運(yùn)行任何程序,需要在其中發(fā)起一個(gè)進(jìn)程來啟動(dòng)容器。
#基本格式:
docker create [選項(xiàng)] 鏡像 鏡像的啟動(dòng)命令常用選項(xiàng):
-i:讓容器開啟標(biāo)準(zhǔn)輸入接受用戶輸入命令
-t:讓 Docker 分配一個(gè)偽終端 tty
-it :合起來實(shí)現(xiàn)和容器交互的作用,運(yùn)行一個(gè)交互式會(huì)話 shell
docker create -it nginx:latest /bin/bash
#使用/bin/bash來啟動(dòng)鏡像
docker ps -a
#查看容器的運(yùn)行狀態(tài)
4.2 容器的啟動(dòng)
#基本格式:
docker start 容器的ID/名稱
docker start suspicious_paynedocker ps -a
4.3 停止容器
#基本格式:
docker stop 容器的ID/名稱
或
docker kill 容器名
#強(qiáng)停
docker stop suspicious_payne
docker ps -a
4.5 刪除容器
#基本格式:
docker rm [-f] 容器ID/名稱-f 強(qiáng)制刪除
#容器正在運(yùn)行是無法刪除的
docker stop suspicious_paynedocker rm suspicious_payne
#刪除已經(jīng)終止?fàn)顟B(tài)的容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stopdocker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量刪除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rmdocker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量刪除鏡像
docker images | grep none | awk '{print $3}' | xargs docker rmi #刪除none鏡像docker rm $(docker ps -a -q) #批量清理后臺(tái)停止的容器
4.6 容器的進(jìn)入
需要進(jìn)入容器進(jìn)行命令操作時(shí),可以使用 docker exec 命令
進(jìn)入運(yùn)行著的容器。
#基本格式:
docker exec -it 容器ID/名稱 /bin/bash-i 選項(xiàng)表示讓容器的輸入保持打開;
-t 選項(xiàng)表示讓 Docker 分配一個(gè)偽終端。
docker start sleepy_raman
#進(jìn)入容器前,確保容器正在運(yùn)行docker exec -it sleepy_raman /bin/bash
4.7 復(fù)制到容器中
cp 容器名|容器ID:絕對(duì)路徑 宿主機(jī)路徑
或
echo abc123 > ~/test.txt
docker cp ~/test.txt sleepy_raman:/opt/
4.8 從容器復(fù)制文件到主機(jī)
#基本路徑
cp 宿主機(jī)路徑 容器名|容器ID:絕對(duì)路徑
docker cp sleepy_raman:/opt/test.txt ~/abc123.txt
4.9 容器的導(dǎo)出和導(dǎo)入
用戶可以將任何一個(gè) Docker 容器從一臺(tái)機(jī)器遷移到另一臺(tái)機(jī)器。在遷移過程中,可以使用docker export 命令將已經(jīng)創(chuàng)建好的容器導(dǎo)出為容器快照文件,無論這個(gè)容器是處于運(yùn)行狀態(tài)還是停止?fàn)顟B(tài)均可導(dǎo)出。
可將導(dǎo)出文件傳輸?shù)狡渌麢C(jī)器,通過相應(yīng)的導(dǎo)入命令實(shí)現(xiàn)容器的遷移。
4.9.1 容器的導(dǎo)入
cat 文件名 | docker import – 鏡像名稱:標(biāo)簽
#示例
cat centos7.tar | docker import - centos7:test
#導(dǎo)入后會(huì)生成鏡像,但不會(huì)創(chuàng)建容器
4.9.2 容器的導(dǎo)出
export -o 容器模板文件 容器名|容器ID
或
export 容器名|容器ID > 容器模板文件
docker export sleepy_raman > centos7.tar
4.10 創(chuàng)建并啟動(dòng)容器
可以直接執(zhí)行 docker run
命令, 等同于先執(zhí)行 docker create
命令,再執(zhí)行 docker start
命令。
注意:容器是一個(gè)與其中運(yùn)行的 shell 命令/進(jìn)程共存亡的終端,命令/進(jìn)程運(yùn)行容器運(yùn)行, 命令/進(jìn)程結(jié)束容器退出。
docker 容器默認(rèn)會(huì)把容器內(nèi)部第一個(gè)進(jìn)程,也就是 pid=1 的程序作為docker容器是否正在運(yùn)行的依據(jù),如果docker容器中 pid = 1 的進(jìn)程掛了,那么docker容器便會(huì)直接退出,也就是說Docker容器中必須有一個(gè)前臺(tái)進(jìn)程,否則認(rèn)為容器已經(jīng)掛掉。
當(dāng)利用 docker run 來創(chuàng)建容器時(shí), Docker 在后臺(tái)的標(biāo)準(zhǔn)運(yùn)行過程是:
- 檢查本地是否存在指定的鏡像。當(dāng)鏡像不存在時(shí),會(huì)從公有倉(cāng)庫(kù)下載;
- 利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器;
- 分配一個(gè)文件系統(tǒng)給容器,在只讀的鏡像層外面掛載一層可讀寫層;
- 從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬機(jī)接口到容器中;
- 分配一個(gè)地址池中的 IP 地址給容器;
- 執(zhí)行用戶指定的應(yīng)用程序,執(zhí)行完畢后容器被終止運(yùn)行。
#在后臺(tái)持續(xù)運(yùn)行 docker run 創(chuàng)建的容器
#基本格式
docker run -d [選項(xiàng)] 鏡像名:標(biāo)簽 [容器啟動(dòng)命令]-i -t --name --rm
#-d 在前臺(tái)運(yùn)行容器
#示例
docker run -it --name s1 nginx:1.12
#在前臺(tái)啟動(dòng)容器,后臺(tái)運(yùn)行容器,退出后容器直接關(guān)閉
docker run -itd --name s2 centos:7 /bin/bash
#創(chuàng)建容器并持續(xù)運(yùn)行容器