Docker安装与镜像的使用
大數(shù)據(jù)技術(shù)AI
Flink/Spark/Hadoop/數(shù)倉(cāng),數(shù)據(jù)分析、面試,源碼解讀等干貨學(xué)習(xí)資料
102篇原創(chuàng)內(nèi)容
公眾號(hào)
1、docker簡(jiǎn)介
=============
1.1 什么是docker
docker官網(wǎng)地址:https://docs.docker.com/
Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國(guó)期間發(fā)起的一個(gè)公司內(nèi)部項(xiàng)目,它是基于 dotCloud 公司多年云服務(wù)技術(shù)的一次革新,并于 2013 年 3 月以 Apache 2.0 授權(quán)協(xié)議開(kāi)源,主要項(xiàng)目代碼在 GitHub 上進(jìn)行維護(hù)。Docker 項(xiàng)目后來(lái)還加入了 Linux 基金會(huì),并成立推動(dòng)開(kāi)放容器聯(lián)盟(OCI)。
Docker 使用 Google 公司推出的 Go 語(yǔ)言進(jìn)行開(kāi)發(fā)實(shí)現(xiàn),基于 Linux 內(nèi)核的 cgroup,namespace,以及 OverlayFS 類(lèi)的 Union FS 等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離,屬于操作系統(tǒng)層面的虛擬化技術(shù)。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器。最初實(shí)現(xiàn)是基于 LXC,從 0.7 版本以后開(kāi)始去除 LXC,轉(zhuǎn)而使用自行開(kāi)發(fā)的 libcontainer,從 1.11 開(kāi)始,則進(jìn)一步演進(jìn)為使用 runC 和 containerd。
Docker 在容器的基礎(chǔ)上,進(jìn)行了進(jìn)一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等,極大的簡(jiǎn)化了容器的創(chuàng)建和維護(hù)。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷。
1.2 為什么要用docker
1.2.1 docker的優(yōu)勢(shì)
- 更高效的利用系統(tǒng)資源
由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開(kāi)銷(xiāo),Docker 對(duì)系統(tǒng)資源的利用率更高。無(wú)論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)技術(shù),一個(gè)相同配置的主機(jī),往往可以運(yùn)行更多數(shù)量的應(yīng)用。
- 更快速的啟動(dòng)時(shí)間
傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘,而 Docker 容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無(wú)需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí)、甚至毫秒級(jí)的啟動(dòng)時(shí)間。大大的節(jié)約了開(kāi)發(fā)、測(cè)試、部署的時(shí)間。
- 一致的運(yùn)行環(huán)境
開(kāi)發(fā)過(guò)程中一個(gè)常見(jiàn)的問(wèn)題是環(huán)境一致性問(wèn)題。由于開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境不一致,導(dǎo)致有些 bug 并未在開(kāi)發(fā)過(guò)程中被發(fā)現(xiàn)。而 Docker 的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境一致性,從而不會(huì)再出現(xiàn) 「這段代碼在我機(jī)器上沒(méi)問(wèn)題啊」 這類(lèi)問(wèn)題。
- 持續(xù)交付和部署
對(duì)開(kāi)發(fā)和運(yùn)維(DevOps)人員來(lái)說(shuō),最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行。
使用 Docker 可以通過(guò)定制應(yīng)用鏡像來(lái)實(shí)現(xiàn)持續(xù)集成、持續(xù)交付、部署。開(kāi)發(fā)人員可以通過(guò) Dockerfile 來(lái)進(jìn)行鏡像構(gòu)建,并結(jié)合持續(xù)集成(Continuous Integration) 系統(tǒng)進(jìn)行集成測(cè)試,而運(yùn)維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合 持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進(jìn)行自動(dòng)部署。
而且使用 Dockerfile 使鏡像構(gòu)建透明化,不僅僅開(kāi)發(fā)團(tuán)隊(duì)可以理解應(yīng)用運(yùn)行環(huán)境,也方便運(yùn)維團(tuán)隊(duì)理解應(yīng)用運(yùn)行所需條件,幫助更好的生產(chǎn)環(huán)境中部署該鏡像。
- 更輕松的遷移
由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易。Docker 可以在很多平臺(tái)上運(yùn)行,無(wú)論是物理機(jī)、虛擬機(jī)、公有云、私有云,甚至是筆記本,其運(yùn)行結(jié)果是一致的。因此用戶可以很輕易的將在一個(gè)平臺(tái)上運(yùn)行的應(yīng)用,遷移到另一個(gè)平臺(tái)上,而不用擔(dān)心運(yùn)行環(huán)境的變化導(dǎo)致應(yīng)用無(wú)法正常運(yùn)行的情況。
- 更輕松的維護(hù)和擴(kuò)展
Docker 使用的分層存儲(chǔ)以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得非常簡(jiǎn)單。此外,Docker 團(tuán)隊(duì)同各個(gè)開(kāi)源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的 官方鏡像,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎(chǔ)進(jìn)一步定制,大大的降低了應(yīng)用服務(wù)的鏡像制作成本。
1.2.2 docker與傳統(tǒng)虛擬機(jī)的比較
| 啟動(dòng) | 秒級(jí) | 分鐘級(jí) |
| 硬盤(pán)使用 | 一般為 MB | 一般為 GB |
| 性能 | 接近原生 | 弱于 |
| 系統(tǒng)支持量 | 單機(jī)支持上千個(gè)容器 | 一般幾十個(gè) |
| 隔離性 | 安全隔離 | 完全隔離 |
2、docker的核心概念
Docker 包括三個(gè)基本概念
-
鏡像(Image)
-
容器(Container)
-
倉(cāng)庫(kù)(Repository)
理解了這三個(gè)概念,就理解了 Docker 的整個(gè)生命周期。
2.0 Docker架構(gòu)
Docker使用客戶端 - 服務(wù)器架構(gòu)。Docker客戶端與Docker守護(hù)程序交談,該守護(hù)程序是大量的建筑,運(yùn)行和分配您的Docker容器。Docker客戶端和守護(hù)程序可以在同一系統(tǒng)上運(yùn)行,或者您可以將Docker客戶端連接到遠(yuǎn)程Docker守護(hù)程序。Docker客戶端和守護(hù)進(jìn)程使用REST API進(jìn)行通信,通過(guò)UNIX套接字或網(wǎng)絡(luò)接口。另一個(gè)Docker客戶端是Docker撰寫(xiě),可允許您使用由一組容器組成的應(yīng)用程序。
2.1 鏡像(Image)
Docker鏡像類(lèi)似于一個(gè)虛擬機(jī)鏡像(xxx.iso), 可以將它理解為一個(gè)只讀的模板!
例如, 一個(gè)鏡像可以包含一個(gè)基本的操作系統(tǒng)環(huán)境, 里面僅安裝了 Apache應(yīng)用程序(或用戶需要的其他軟件). 可以把它稱為Apache鏡像.
鏡像是創(chuàng)建Docker容器的基礎(chǔ).
通過(guò)版本管理和增量的文件系統(tǒng), Docker提供了一套十分簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建和更新現(xiàn)有的鏡像, 用戶甚至可以從網(wǎng)上下載一個(gè)已經(jīng)做好的應(yīng)用鏡像, 并直接使用它.
2.2 容器(Container)
Docker 容器類(lèi)似于一個(gè)輕量級(jí)的沙箱, Docker 利用容器來(lái)運(yùn)行和隔離應(yīng)用。
容器是從鏡像創(chuàng)建的應(yīng)用運(yùn)行實(shí)例。它可以啟動(dòng)、開(kāi)始、停止、刪除,而這些容器都是彼此相互隔離、互不可見(jiàn)的。
可以把容器看作一個(gè)簡(jiǎn)易版的 Linux 系統(tǒng)環(huán)境(包括 root 用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)以及運(yùn)行在其中的應(yīng)用程序打包而成的盒子。
注意:
-
鏡像自身是只讀的。
-
容器從鏡像啟動(dòng)的時(shí)候,會(huì)在鏡像的最上層創(chuàng)建一個(gè)可寫(xiě)層。
2.3 倉(cāng)庫(kù)(Repository)
Docker 倉(cāng)庫(kù)類(lèi)似于代碼倉(cāng)庫(kù),是 Docker 集中存放鏡像文件的場(chǎng)所
根據(jù)所存儲(chǔ)的鏡像公開(kāi)分享與否, Docker 倉(cāng)庫(kù)可以分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。
目前,最大的公開(kāi)倉(cāng)庫(kù)是官方提供的 Docker Hub ,其中存放著數(shù)量龐大的鏡像供用戶下載。國(guó)內(nèi)不少云服務(wù)提供商(如騰訊云 、 阿里云等)也提供了倉(cāng)庫(kù)的本地源,可以提供穩(wěn)定的國(guó)內(nèi)訪問(wèn) 。
當(dāng)然,用戶如果不希望公開(kāi)分享自己的鏡像文件, Docker 也支持用戶在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)只能自己訪問(wèn)的私有倉(cāng)庫(kù)。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到指定的公有或者私有倉(cāng)庫(kù)。這樣用戶下次在另外一臺(tái)機(jī)器上使用該鏡像時(shí),只需要將其從倉(cāng)庫(kù)上 pull 下來(lái)就可以了。
3、Centos安裝Docker引擎
Docker 目前支持 CentOS 7 及以后的版本, 內(nèi)核版本必須是3.10.
查看操作系統(tǒng)版本: cat /etc/redhat-release
[root@hadoop01 root]$ cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)查看內(nèi)核版本: uname -r
[root@hadoop01 root]$ uname -r3.10.0-862.el7.x86_643.1 卸載舊版本
官網(wǎng)說(shuō)明:https://docs.docker.com/engine/install/centos/
舊版本的 Docker 被叫做 docker 或 docker-engine,如果安裝了舊版本的 Docker ,需要卸載掉它。
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine [root@hadoop01 root]$ sudo yum remove docker \> docker-client \> docker-client-latest \> docker-common \> docker-latest \> docker-latest-logrotate \> docker-logrotate \> docker-engine[sudo] duo 的密碼:已加載插件:fastestmirror, langpacks參數(shù) docker 沒(méi)有匹配參數(shù) docker-client 沒(méi)有匹配參數(shù) docker-client-latest 沒(méi)有匹配參數(shù) docker-common 沒(méi)有匹配參數(shù) docker-latest 沒(méi)有匹配參數(shù) docker-latest-logrotate 沒(méi)有匹配參數(shù) docker-logrotate 沒(méi)有匹配參數(shù) docker-engine 沒(méi)有匹配不刪除任何軟件包3.2 安裝Docker方法一
官網(wǎng)安裝地址:https://docs.docker.com/engine/install/centos/
3.2.1 安裝依賴的軟件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm23.2.2 添加Docker文檔版本的yum源
官方的yum源安裝docker比較慢, 我們配置國(guó)內(nèi)比較快的yum源(阿里云)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.2.3 安裝最新版本的docker引擎(社區(qū)版)
sudo yum -y install docker-ce docker-ce-cli containerd.io3.3 安裝Docker方法二:使用腳本自動(dòng)安裝
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun注意:自動(dòng)安裝腳本會(huì)自動(dòng)檢測(cè)系統(tǒng)信息并進(jìn)行相應(yīng)配置
[root@hadoop01 root]$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be+ sudo -E sh -c 'yum install -y -q yum-utils'+ sudo -E sh -c 'yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docke r-ce.repo'已加載插件:fastestmirror, langpacksadding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repograbbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/doc ker-ce.reporepo saved to /etc/yum.repos.d/docker-ce.repo+ '[' stable '!=' stable ']'+ sudo -E sh -c 'yum makecache'已加載插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile* base: mirrors.ustc.edu.cn* centos-sclo-rh: mirrors.ustc.edu.cn* centos-sclo-sclo: mirrors.ustc.edu.cn* extras: mirrors.ustc.edu.cn* updates: mirrors.ustc.edu.cnbase | 3.6 kB 00:00:00centos-sclo-rh | 3.0 kB 00:00:00centos-sclo-sclo | 3.0 kB 00:00:00docker-ce-stable | 3.5 kB 00:00:00extras | 2.9 kB 00:00:00updates | 2.9 kB 00:00:00(1/12): docker-ce-stable/7/x86_64/filelists_db | 29 kB 00:00:00(2/12): docker-ce-stable/7/x86_64/updateinfo | 55 B 00:00:00(3/12): centos-sclo-sclo/x86_64/filelists_db | 935 kB 00:00:00(4/12): centos-sclo-sclo/x86_64/other_db | 185 kB 00:00:01(5/12): extras/7/x86_64/filelists_db | 259 kB 00:00:00(6/12): docker-ce-stable/7/x86_64/primary_db | 70 kB 00:00:01(7/12): docker-ce-stable/7/x86_64/other_db | 122 kB 00:00:00(8/12): extras/7/x86_64/other_db | 145 kB 00:00:00(9/12): updates/7/x86_64/filelists_db | 7.0 MB 00:00:09(10/12): centos-sclo-rh/x86_64/filelists_db | 12 MB 00:00:13(11/12): updates/7/x86_64/other_db | 904 kB 00:00:13(12/12): centos-sclo-rh/x86_64/other_db | 1.5 MB 00:00:15元數(shù)據(jù)緩存已建立+ '[' -n '' ']'+ sudo -E sh -c 'yum install -y -q docker-ce'warning: /var/cache/yum/x86_64/7/docker-ce-stable/packages/docker-ce-20.10.12-3.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEYdocker-ce-20.10.12-3.el7.x86_64.rpm 的公鑰尚未安裝導(dǎo)入 GPG key 0x621E9F35:用戶ID : "Docker Release (CE rpm) <docker@docker.com>"指紋 : 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35來(lái)自 : https://mirrors.aliyun.com/docker-ce/linux/centos/gpgsetsebool: SELinux is disabled.+ version_gte 20.10+ '[' -z '' ']'+ return 0+ sudo -E sh -c 'yum install -y -q docker-ce-rootless-extras'軟件包 docker-ce-rootless-extras-20.10.12-3.el7.x86_64 已安裝并且是最新版本================================================================================To run Docker as a non-privileged user, consider setting up theDocker daemon in rootless mode for your user:dockerd-rootless-setuptool.sh installVisit https://docs.docker.com/go/rootless/ to learn about rootless mode.To run the Docker daemon as a fully privileged service, but granting non-rootusers access, refer to https://docs.docker.com/go/daemon-access/WARNING: Access to the remote API on a privileged Docker daemon is equivalentto root access on the host. Refer to the 'Docker daemon attack surface'documentation for details: https://docs.docker.com/go/attack-surface/================================================================================3.4 啟動(dòng)docker服務(wù)
sudo systemctl start docker [duo@hadoop01 hive]$ sudo systemctl start docker[duo@hadoop01 hive]$ ps -ef | grep dockerroot 28682 1 5 15:34 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/conta inerd.sockduo 28821 5782 0 15:35 pts/1 00:00:00 grep --color=auto docker3.5 驗(yàn)證Docker是否可用
sudo docker run hello-world3.6 把普通用戶添加到docker 組
每次使用docker的時(shí)候都需要使用root用戶, 比較麻煩. 可用把普通用戶添加到docker組, 避免每次都添加sudo.
退出當(dāng)前shell, 重新進(jìn)入shell, 使剛才的配置生效
sudo usermod -aG docker duo4、鏡像基本操作
鏡像是 Docker 三大核心概念中最重要的,自 Docker 誕生之日起鏡像就是相關(guān)社區(qū)最為熱門(mén)的關(guān)鍵詞。Docker 運(yùn)行容器前需要本地存在對(duì)應(yīng)的鏡像,如果鏡像不存在Docker 會(huì)嘗試先從默認(rèn)鏡像倉(cāng)庫(kù)下載,用戶也可以通過(guò)配置, 使用自定義的鏡像倉(cāng)庫(kù)。
4.1 列出本機(jī)鏡像
docker images [duo@hadoop01 ~]$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest feb5d9fea6a5 3 months ago 13.3kB說(shuō)明:
-
**REPOSITORY:**來(lái)源倉(cāng)庫(kù)
-
**TAG:**鏡像的標(biāo)簽信息, 表示鏡像的版本. 只是標(biāo)記, 并不能表示鏡像內(nèi)容
-
**IMAGE ID:**鏡像id, 唯一表示一個(gè)鏡像. 如果兩個(gè)鏡像的 ID 相同, 說(shuō)明它們實(shí)際上指向了同一 個(gè)鏡像, 只是具有不同標(biāo)簽名稱而已;
-
**CREATED:**鏡像的最后更新時(shí)間.
-
**SIZE:**鏡像大小
4.2 獲取一個(gè)新鏡像
當(dāng)我們?cè)诒镜刂鳈C(jī)上使用一個(gè)不存在的鏡像時(shí) Docker 就會(huì)自動(dòng)下載這個(gè)鏡像。如果我們想預(yù)先下載這個(gè)鏡像,我們可以使用 docker pull 命令來(lái)下載它。
docker pull hello-world下載完成后, 可以使用這個(gè)鏡像來(lái)運(yùn)行容器
4.3 配置國(guó)內(nèi)鏡像源地址
下載鏡像的時(shí)候, 默認(rèn)是從官方地址下載, 服務(wù)器在國(guó)外, 速度比較慢, 可以換成國(guó)內(nèi)鏡像.
4.3.1 國(guó)內(nèi)常用加速地址:
網(wǎng)易:http://hub-mirror.c.163.com
中國(guó)科技大學(xué):https://docker.mirrors.ustc.edu.cn
阿里云容器服務(wù):https://cr.console.aliyun.com/
4.3.2 配置方法
sudo vim /etc/docker/daemon.json{"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://123456.mirror.aliyuncs.com"]}4.3.3 說(shuō)明:
https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.550.469742c75wmmC8
重啟 docker: sudo systemctl restart docker
查看是否配置成功: docker info
4.4 搜索鏡像
docker search hello-world4.5 刪除鏡像
- 使用tag刪除鏡像
注意:
如果刪除的時(shí)候報(bào)錯(cuò): 有容器使用了該鏡像, 則需要先刪除使用過(guò)該鏡像的容器, 才能刪除該鏡像.
刪除容器, 再刪鏡像
- 使用id刪除鏡像
- 清理鏡像
使用 Docker 一段時(shí)間后,系統(tǒng)中可能會(huì)遺留一些臨時(shí)的鏡像文件,以及一些沒(méi)有被使用的鏡像,可以通過(guò) docker image prune -f 命令來(lái)進(jìn)行清理。
總結(jié)
以上是生活随笔為你收集整理的Docker安装与镜像的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 超好看的情侣纪念日记录单页HTML自适应
- 下一篇: 网站服务器端口扫描,服务器端口扫描工具