提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 一、Docker概述
- 1、docker是什么
- 2、Docker的設計宗旨
- 3、容器在內核中支持2種重要技術:
- 三、Docker的核心概念
- 四、Docker相關命令
- 1.安裝依賴包
- 2.設置阿里云鏡像源
- 3.安裝Docker-CE
- 五、Docker鏡像的操作
- 1.搜索鏡像
- 2.獲取鏡像
- 3.鏡像加速下載
- 4.查看鏡像信息
- 5.添加新標簽(打標簽)
- 6.刪除鏡像
- 7.將鏡像存儲到本機上,命名為nginx_latest
- 8.載入鏡像
- 9.上傳鏡像
- 六、容器操作
- ?1.容器創建?
- 2.查看容器運行狀態?
- 3.啟動、停止、重啟容器
- 4.運行容器
- ??5.進入、退出容器
- ??6.容器導出、導入
- 7.刪除容器
- 總結
一、Docker概述
1、docker是什么
??Docker 是在Linux容器例運行應用的開源工具,是一種輕量級的虛擬機。
Docker是一個開源的應用容器引擎,基于go語言開發并遵循了apache2.0協議開源。Docker是在Linux容器里運行應用的開源工具,是一種輕量級的“虛擬機"。
Docker 的容器技術可以在一臺主機上輕松為任何應用創建一個輕量級的、可移植的、自給自足的容器。
Docker的Logo設計為藍色鯨魚,拖著許多集裝箱。鯨魚可看作為宿主機,集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應用程序。
2、Docker的設計宗旨
??Build,ship and Run Any App , Anywhere??
??即通過對應用組件的封裝、發布、部署、運行等生命周期的管理,達到應用組件級別的"???一次封裝,到處運行???"的目的。這里的組件,既可以是一個應用,也可以是一套服務,甚至是一個完整的操作系統。??
??容器化越來越受歡迎,因為容器是:??
??靈活:即使是最復雜的應用也可以集裝箱化。??
輕量級:容器利用并共享主機內核。??
可互換:可以即時部署更新和升級。??
便攜式:可以在本地構建,部署到云,并在任何地方運行。??
可擴展:可以增加并自動分發容器副本。??
可維疊:可以垂直和即時堆疊服務。
3、容器在內核中支持2種重要技術:
docker本質就是宿主機的一個進程,docker是通過namespace實現資源隔離,通過cgroup實現資源限制,通過寫時復制技術(copy-on-write)實現了高效的文件操作(類似虛擬機的磁盤比如分配500g并不是實際占用物理磁盤500g)。
mount | 文件系統,掛載點——>一個文件系統內,不能重復掛載一個指定目錄,列如:/mnt |
---|---|
user | 操作進程的用戶和用戶組 |
pid | 進程編號 |
uts | 主機名和主機域 |
ipc | 信號量、消息隊列、共享存儲(理解,不同的應用調用內存資源的時候應該使用不同的內存空間) |
net | 網絡設備、網絡協議棧、端口等 |
三、Docker的核心概念
Docker客戶端向Docker服務器發出請求,使用遠程API來管理和創建Docker容器:
鏡像(Image):鏡像是Docker中的一個模板。通過 Docker鏡像 來創建 Docker容器,一個鏡像可以創建出多個容器。 鏡像是由一系列指令一步一步構建出來。
容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
倉庫(Repository):倉庫可看成一個代碼控制中心,用來保存鏡像。
四、Docker相關命令
1.安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2#yum-utils提供了yum-config-manager
#device mapper存儲驅動程序需要device-mapper-persistent-data和lvm2
#Device Mapper 是Linux內核中支持邏輯卷管理的通用設備映射機制,它為實現用于存儲資源管理的塊設備驅動提供了一個高度模塊化的內核架構。
2.設置阿里云鏡像源
代碼如下(示例):
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安裝Docker-CE
#安裝 Docker-CE并設置為開機自動啟動
yum install -y docker-ce docker-ce-cli containerd.iosystemctl start docker.service
systemctl enable docker.service
--------------------------------------------------------------------------------------------
安裝好的Docker系統有兩個程序,Docker服務端和Docker客戶端。其中Docker服務端是一個服務進程,負責管理所有容器。 Docker客戶端則扮演著Docker服務端的遠程控制器,可以用來控制Docker的服務端進程。大部分情況下Docker服務端和客戶端運行在一臺機器上。
--------------------------------------------------------------------------------------------
docker version 查看docker版本信息
五、Docker鏡像的操作
1.搜索鏡像
docker search 服務名
例如:
docker search nginx
2.獲取鏡像
格式:docker pull 倉庫名稱[:標簽]
#如果下載鏡像時不指定標簽,則默認會下載倉庫中最新版本的鏡像,即選擇標簽為 latest 標簽。
docker pull nginx
3.鏡像加速下載
瀏覽器訪問https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取鏡像加速器配置mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://1azni81n.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
4.查看鏡像信息
docker images
docker inspect 鏡像的ID
例如
docker images
docker inspect af62dd757b58鏡像下教后存放在/var/ lib/ docker 。
Docker相關的本地資源存放在/var/lib/docker/目錄下,其中 containers日錄存放容器信息,image目錄存放鏡像信息,overlay2目錄下存放具體的鏡像底層文件。
#查看下載的鏡像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
5.添加新標簽(打標簽)
docker tag 倉庫名:原鏡像名 倉庫名:新鏡像名
例如:
docker tag nginx:latest nginx:test
docker images
docker images | grep test
6.刪除鏡像
??指定鏡像ID刪除的時候,要求該鏡像不能有標簽
#=====刪除鏡像
格式:
docker rmi 倉庫名稱:標簽 #當一個鏡像有多個標簽時,只是刪除其中指定的標簽
或者
docker rmi 鏡像ID號 #會徹底刪除該鏡像注意:如果該鏡像已經被容器使用,正確的做法是先刪除依賴該鏡像的所有容器,再去刪除鏡像。docker rmi nginx:web
7.將鏡像存儲到本機上,命名為nginx_latest
docker save -o 存放鏡像的位置 倉庫名:鏡像名
例如:
docker save -o /opt/nginx_latest nginx:latest#存出鏡像====:將鏡像保存成為本地文件
格式:docker save -o 存儲文件名 存儲的鏡像
docker save -o nginx nginx:latest #存出鏡像命名為nginx存在當前目錄下
ls -lh
8.載入鏡像
#載入鏡像====:將鏡像文件導入到鏡像庫中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件docker load < nginx
9.上傳鏡像
將本地的鏡像上傳到公有的鏡像倉庫,要先登陸到鏡像倉庫
??上傳鏡像前要修改標簽,標簽前面要加上Docker官網的賬號名??
??標簽格式: Docker官網的賬號名/倉庫名:鏡像名??
不過一般不會上傳到公有倉庫中,公司內部都使用私有倉庫
docker push [OPTIONS] NAME[:TAG]例如:按照下面的流程就可以上傳到公有云,有興趣的可以上傳
注冊網址 :https://hub.docker.com/
#改標簽
docker tag 倉庫名:鏡像名 用戶名/倉庫名:鏡像名
#登錄
docker login
Username: #用戶名
Password: #密碼#上傳
docker push 用戶名/倉庫名:鏡像名默認上傳到 docker Hub 官方公共倉庫,需要注冊使用公共倉庫的賬號。https://hub.docker.com
可以使用 docker login 命令來輸入用戶名、密碼和郵箱來完成注冊和登錄。
在上傳鏡像之前,還需要先對本地鏡像添加新的標簽,然后再使用 docker push 命令進行上傳。docker tag nginx:latest soscscs/nginx:web #添加新的標簽時必須在前面加上自己的dockerhub的username
docker login #登錄公共倉庫
Username:soscscs
password:abc123456
docker push soscscs/nginx:web #上傳鏡像
六、容器操作
?1.容器創建?
容器創建:就是將鏡像加載到容器的過程。??
??新創建的容器???默認處于停止狀態???,不運行任何程序,需要在其中發起一個進程來啟動容器
格式:docker create [選項] 鏡像
常用選項:
-i:讓容器開啟標準輸入
-t:讓 Docker 分配一個偽終端 tty
-it :合起來實現和容器交互的作用,運行一個交互式會話 shell docker create -it nginx:latest /bin/bash
2.查看容器運行狀態?
容器的STATUS狀態?
???up是正在運行的??
Exited (0)是正常停止的容器??
Exited (非0)異常停止的容器docker ps -a #-a 選項可以顯示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson容器的ID號 加載的鏡像 運行的程序 創建時間 當前的狀態 端口映射 名稱
3.啟動、停止、重啟容器
docker start 容器ID:啟動一個或多個已經被停止的容器
docker stop 容器ID:停止一個運行中的容器
docker restart 容器ID:重啟容器
例:
docker start 875e301d22b5
docker ps -a
docker stop 875e301d22b5
docker ps -a
docker restart 875e301d22b5
4.運行容器
run和start的作用有些類似,準確來說run相當于create+start??
??一般第一次可以使用run,后面維護還是使用start/stop/restart
docker run [選項] 鏡像 [命令] [變量]
-d: 后臺運行容器,并返回容器ID;
-i: 以交互模式運行容器,通常與 -t 同時使用
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用
-c 命令表示后面的參數將會作為字符串讀入作為執行的命令
-v: 綁定一個卷
-P: 隨機端口映射,容器內部端口隨機映射到主機的端口
-p: 指定端口映射,格式為:主機(宿主)端口:容器端口
--name="名稱": 為容器指定一個名稱
--link name:alias 添加鏈接到另一個容器,格式“--link容器名:別名”
可以直接執行 docker run 命令, 等同于先執行 docker create 命令,再執行 docker start 命令。
注意:容器是一個與其中運行的 shell 命令共存亡的終端,命令運行容器運行, 命令結束容器退出。docker 容器默認會把容器內部第一個進程,也就是 pid=1 的程序作為docker容器是否正在運行的依據,如果docker容器中 pid = 1 的進程掛了,那么docker容器便會直接退出,也就是說Docker容器中必須有一個前臺進程,否則認為容器已經掛掉。
當利用 docker run 來創建容器時, Docker 在后臺的標準運行過程是:
(1)檢查本地是否存在指定的鏡像。當鏡像不存在時,會從公有倉庫下載;
(2)利用鏡像創建并啟動一個容器;
(3)分配一個文件系統給容器,在只讀的鏡像層外面掛載一層可讀寫層;
(4)從宿主主機配置的網橋接口中橋接一個虛擬機接口到容器中;
(5)分配一個地址池中的 IP 地址給容器;
(6)執行用戶指定的應用程序,執行完畢后容器被終止運行。
#在后臺持續運行 docker run 創建的容器
需要在 docker run 命令之后添加 -d 選項讓 Docker 容器以守護形式在后臺運行。并且容器所運行的程序不能結束。docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"docker ps -a #可以看出容器始終處于 UP,運行狀態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chateletdocker run -itd --name test1 centos:7 /bin/bash #創建容器并持續運行容器#=======終止容器運行
格式:docker stop 容器的ID/名稱
docker stop 2592d3fad0fbdocker ps -a
??5.進入、退出容器
??進入的容器狀態一定要是運行狀態
需要進入容器進行命令操作時,可以使用 docker exec 命令進入運行著的容器。格式:docker exec -it 容器ID/名稱 /bin/bash
-i 選項表示讓容器的輸入保持打開;
-t 選項表示讓 Docker 分配一個偽終端。docker start 2592d3fad0fb #進入容器前,確保容器正在運行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在運行
docker ps -adocker run -it centos:7 bash #不加 -d 選項會創建容器后直接進入容器,但是退出容器,容器也會停止
??6.容器導出、導入
用戶可以將任何一個 Docker 容器從一臺機器遷移到另一臺機器。在遷移過程中,可以使用docker export 命令將已經創建好的容器導出為文件,無論這個容器是處于運行狀態還是停止狀態均可導出。可將導出文件傳輸到其他機器,通過相應的導入命令實現容器的遷移。#導出格式:docker export 容器ID/名稱 > 文件名
docker export 2592d3fad0fb > centos7.tar#導入格式:cat 文件名 | docker import – 鏡像名稱:標簽
cat centos7.tar | docker import - centos7:test #導入后會生成鏡像,但不會創建容器#容器導出
docker export 容器ID > 備份文件名#容器導入(會生成鏡像,而不會創建容器)
cat 備份文件名 | docker import - 倉庫名:鏡像名例如:
docker export a4b09cb9c4d8 > nginx_up
docker export 3a198d9be5e2 > nginx_exitedcat nginx_up | docker import - nginx:web
7.刪除容器
格式:docker rm [-f] 容器ID/名稱
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb #刪除已經終止狀態的容器docker rm -f 2592d3fad0fb #強制刪除正在運行的容器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) #批量清理后臺停止的容器docker rm 容器ID
例如:
docker rm a4b09cb9c4d8
//批量刪除容器
docker ps -a | awk '{print "docker rm "$1}' | bash
//強刪
docker rm 3a198d9be5e2 -f
總結
提示:這里對文章進行總結:
例如:以上就是今天要講的內容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數據的函數和方法。