文章目錄
什麼是Docker?
- 是一種輕量級的“虛擬機”
- 在linux容器裏運行應用的開源工具
官網:www.docker.com
官方文檔網站:www.docs.docker.com
一、docker概述
1、Docker概念
Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的Linux或Windows機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
- 鏡像
- 容器
- 倉庫
2、Docker設計的目標
- 提供簡單的應用程序打包工具
- 開發人員和運維人員邏輯分離
- 多環境保持一致性
3、docker的應用場景
-
打包應用程序簡化部署
-
可脫離底層硬件任意遷移
-
應用程序打包和發佈
-
應用程序隔離
-
持續集成
-
部署微服務
-
快速搭建測試環境
-
提供PaaS產品(平臺即服務)
4、Docker的組成
- Docker Client:客戶端
- Docker Daemon:守護進程
- Docker Images:鏡像
- Docker Container:容器
- Docker Registry:鏡像倉庫
客戶端,客戶操作的界面環境——會與守護進程daemon對接——下達指令創建鏡像,可以直接執行,也可以從倉庫中直接拉取到本地然後下載(防火牆原因,所以下載需要用第三方加速器,如阿里雲加速器)
不同的鏡像製作不同的容器,會提供一個端口,通過端口可以訪問應用容器
彼此應用間是隔離的,也就是解耦
具備彈性伸縮
5、docker與虛擬機的區別
vm→物理環境→宿主系統(linux)→虛擬化監控平臺(加載虛擬化資源:硬盤 網卡 內存)→安裝系統(完整的主機)
容器→物理環境→宿主系統(linux)→docker引擎(進程的管理機制)
docker 與宿主系統共享內核資源,如果某個容器資源悲情如,很容易影響到宿主系統,則會影響到其他的應用
面試中的注意點:
VM | Container容器 | |
---|---|---|
啓動速度 | 分鐘級 | 秒級 |
運行性能 | 5%左右損失 | 接近原生 |
磁盤佔用 | GB | MB |
數量 | 一般幾十臺 | 成百上千 |
隔離性 | 系統級(更徹底) | 進程級別 |
操作系統 | 幾乎所有 | 主要支持linux |
封裝程度 | 完整的操作系統 | 只打包項目代碼和依賴關係,共享宿主機內核 |
6、支持平臺
- Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
- Mac
- Windows
CentOS安裝Docker的兩種方式
- 使用curl 獲得Docker的安裝腳本進行安裝
- 使用yum倉庫來安裝Docker
二、部署19版Docker
1、環境部署
#關閉防火牆及核心防護
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i '7s/enforcing/disabled/' /etc/selinux/config
#安裝依賴包
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
2、設置阿里雲鏡像源
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安裝Docker-CE
[root@localhost ~]# yum install -y docker-ce
[root@localhost ~]# systemctl starat docker.service
[root@localhost ~]# systemctl enable docker.service
這時docker就已經啓動了,但是裏面是全空的。可以查到docker命令的位置,在/usr/bin中可以被系統所識別
4、鏡像加速
到目前爲止,只是將docker引擎開起來了
下載鏡像資源是從官方公有的倉庫,下載會很慢,會卡死,所以需要使用鏡像加速
鏡像加速地址如何獲取?
見:Docker鏡像加速
[root@localhost docker]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7rp8a2t8.mirror.aliyuncs.com"]
}
EOF
[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker.service
這時下載鏡像就會很快,不會卡死
5、網絡優化
在下載鏡像資源時會出現克重報錯,很大可能就是沒開啓數據包轉發功能
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -p //生效
#重啓網卡及docker
[root@localhost ~]# service network restart
[root@localhost ~]# systemctl restart docker.service
目前爲止docker引擎及環境全部部署好了
三、鏡像的操作管理
docker version //查看版本
docker search //搜索鏡像
docker pull //下載鏡像
docker images //查看已有鏡像***
docker inspect 231d //獲取鏡像信息docker tag //添加新標籤,相當於定義了一個別名
docker rmi //刪除鏡像:rmi i相當於image
docker save -o 文件名 鏡像
docker save -o nginx nginx:latest //存出鏡像命名爲nginx存在當前目錄下docker load < nginx //鏡像導入,建議使用load(docker --input nginx)
#查看版本信息:docker version
#需要安裝nginx應用,首先要搜索並下載nginx鏡像
語法:docker search 名稱 //搜索鏡像
[root@localhost ~]# docker search nginx //搜索關於nginx的所有鏡像,遍歷公有倉庫中所有nginx鏡像
#語法:docker pull 名稱 //下載鏡像
[root@localhost ~]# docker pull nginx //下載nginx鏡像
#語法:docker images //查看已有鏡像
#語法:docker inspect 鏡像ID //獲取鏡像信息
[root@localhost ~]# docker inspect ed21b7a8aee9
#語法:docker tag 原本標籤 更改後標籤 //添加新標籤,相當於定義了一個別名
[root@localhost ~]# docker tag nginx:latest nginx:web //新定義了一個web標籤
#語法:docker rmi 鏡像名 //刪除鏡像:rmi i相當於image
也可使用:docker rmi 鏡像ID
當前鏡像如果有多條標籤別名,按名稱標籤刪除只是刪除該條標籤的鏡像
如果只有最後一條鏡像,按名稱刪除後則徹底刪除了
[root@localhost ~]# docker rmi nginx:latest
#語法:docker save -o 定義文件名 鏡像 //導出鏡像並保存
[root@localhost abc]# docker save -o nginx nginx:latest //導出鏡像命名爲nginx保存在當前目錄下
#鏡像導入(不需要使用倉庫,之前已經保存在/abc中,現在可以直接執行導入),建議使用方法一
方法一:語法:docker load < 鏡像名
方法二:語法:docker --input 鏡像名
[root@localhost abc]# docker load < nginx
四、容器的操作管理
1、查看容器運行狀態
語法: docker ps [選項]
-a 列出最近一次啓動的容器
[root@localhost ~]# docker ps -a //查看容器狀態
此時並沒有容器
2、創建容器
語法:docker create [選項] 鏡像運行的程序
- -i 讓容器的標準輸入保持打開
- -t 讓docker分配一個僞終端
[root@localhost ~]# docker create -it nginx:latest /bin/bash
#現在在看一下,已經有容器了
3、啓動容器
語法:docker start 容器ID
4、run一次性執行
容器運行三部曲:下載鏡像——創建容器——啓動容器
比如下載一個centos7的容器
原本步驟應該是:
docker pull centos:7
docker create -it centos:7 /bin/bash
docker start 容器id
現在使用docker run 命令,一次性執行,執行完成直接關閉,狀態是exited,不會持續佔用系統資源
[root@localhost ~]# docker run centos:7 /usr/bin/bash -c ls
-c 啓動完成後會去執行ls
使用run命令:run會自動去找本地中有沒有需要的鏡像,如果有,則不會再去下載,會直接執行下面的創建啓動等操作,如果沒有,則會去倉庫中下載鏡像,然後繼續執行後面的操作
5、run持續後臺執行
使用dockrt run執行完成後是直接退出的,如果加上一個while死循環,則可以保持執行完成後不退出,繼續保持進程
[root@localhost ~]# docker run -d centos:7 /bin/bash -c "while true;do echo hello;done"
6、終止運行
語法:docker stop 容器ID
[root@localhost ~]# docker stop dd034572ae67
7、進入容器
進入有兩種方式
run:可以在容器未開啓,直接使用run進入
[root@localhost ~]# docker run -it nginx:latest /bin/bash
exec:只有在容器up開啓狀態才能進入
[root@localhost ~]# docker exec -it f169ab57906f /bin/bash
8、退出容器
exit就可以直接退出
9、容器導出
語法:docker export 容器ID > 自定義名稱
[root@localhost ~]# docker export f169ab57906f > nginx_ml
10、容器導入
會生成鏡像,而不會創建容器
語法:cat 容器名稱 | docker import - 定義鏡像名稱
[root@localhost ~]# cat nginx_ml | docker import - nginx:web
11、刪除容器
語法:docker rm 容器ID
12、批量刪除容器
容器在up開啓狀態是無法刪除的
如果想要批量刪除,僅保留up狀態的容器,其餘全部刪除,就可以使用批量刪除,提高效率
docker ps -a | awk ‘{print "docker rm "$1}’ | bash
以上均爲docker的基本操作,後續還會繼續學習併發布