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