網站首頁 編程語言 正文
了解Docker是如何的與眾不同,如此的蒂花之秀后,我們緊接著從Docker的基礎循序漸進的講解。
一、Docker的基本組成
1、Docker服務端和客戶端
在對Docker的基本組成講解之前,我們需要明白的是Docker是一個客戶端-服務端(C/S)架構程序。不明白什么是C/S架構對吧,我這里就簡單說明下,一般來說,應用程序架構分為兩種:
客戶端-服務端(C/S) :
Client - Server(C/S) = 客戶端 - 服務器。例如: QQ,迅雷,快播等。夜深人靜的時候,你躲在被子里,用自己安裝的快播神器看不知名的大片,快播軟件就需要和服務器進行通信,服務器源源不斷的把各種畫面信息返回給快播神器。
這種需要安裝軟件才能與服務器進行數據通信的方式就是C/S架構。
C/S系統結構
瀏覽器 - 服務端(B/S) :
Browser - Server(B/S) = 瀏覽器 - 服務器。例如:所有的網站都是B/S架構,你找你朋友,借一步說話,要了個網址,直接瀏覽器輸入就可以樂呵呵的看不知名的大片。這種不需要安裝軟件,直接有個網址就能看片的方式就屬于B/S架構。
B/S系統結構
總的來說,C/S每一個客戶端都必須安裝和配置專用的軟件。B/S最大的優點就是不用安裝任何專門的軟件,只要有一個瀏覽器就可以。
docker引擎是一個c/s結構的應用。Docker客戶端只需要向Docker服務端或者守護進程發出請求,服務端或者守護進程完成所有工作返回結果主要組件見下圖:
- Server是一個常駐進程
- REST API 實現了client和server間的交互協議
- CLI 實現容器和鏡像的管理,為用戶提供統一的操作界面
2、Docker的基本組成
從上節,我們可以知道Docker使用的是C/S架構,Client 通過接口與Server進程通信實現容器的構建,運行和發布。client和server可以運行在同一臺集群,也可以通過跨主機實現遠程通信。
鏡像(image):
Docker 鏡像就是一個只讀的模板,可以通過這個模板來創建容器。一個鏡像是可以創建多個容器的,就好像java里的類和對象一樣,類是鏡像,容器是對象。
容器(container):
Docker 利用容器來運行應用。容器是從鏡像創建而來的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
倉庫(repository):
倉庫就是存放鏡像的地方,分為公有倉庫(Public)和私有倉庫(Private)兩種形式,其中官方倉庫 Docker Hub是國外的,而國內很多公司,像阿里云,華為云等都有自己的容器服務,Docker默認使用的是國外的倉庫,我們在國內訪問就很慢,所以我們在學習的時候就需要配置鏡像加速。
上面的介紹,我想可能對于剛剛學習Docker的老鐵來說,有點生澀難懂,我剛剛學習Docker的時候也是一樣。不過沒關系,我舉個通俗的例子講解:
我們需要注意的是Docker本身并不是容器,它只是創建容器的工具,是應用容器引擎。
要想搞明白Docker,只需要知道兩點即可:
第一點,Build, Ship and Run 譯為:構建鏡像,運輸鏡像,運行鏡像
Build
(構建鏡像):鏡像就像是集裝箱包括文件以及運行環境等等資源。
Ship
(運輸鏡像):主機和倉庫間運輸,這里的倉庫就像是超級碼頭一樣。
Run
(運行鏡像):運行的鏡像就是一個容器,容器就是運行程序的地方。
舉個例子:
我爹年紀大了,想回老家蓋房子,我們來到老家,找了平時比較熱鬧的地方,買了塊地基準備蓋房,于是我和我爹搬水泥,石頭,各種材料,費了九牛二虎之力終于蓋好房子了。結果,住了一段時間,我爹說這兒太吵了,想換個清靜地方。按照傳統的辦法,我們只能再次搬石頭、砍木頭、畫圖紙、蓋房子。但是,哆啦A夢從百寶袋里掏出一個魔法棒,可以把我和我爹蓋的房子,打包做成“鏡像”,放在我的背包里。
等我到了安靜的地方,找塊空地,就用這個“鏡像”,復制一套房子,擺在那邊,拎包入住。所以Docker的第二點就是:Build once ,Run anywhere 譯為: 一次搭建,到處能用。
從上面的例子,放在我包里的鏡像就是 Docker鏡像,而我在安靜的空地,用魔法棒復制的一套房子就是一個Docker容器,我的背包,就是Docker倉庫。
既然,我和我爹蓋的房子可以打包做成鏡像,那么別人房子也可以做成鏡像,這樣一來,我們是不是就可以直接住各種豪宅,豈不美滋滋。這么多房子做成的鏡像,那就得需要一個大的包來裝,于是乎,這個大包就變成了專業術語里的倉庫(repository)。因此,官方提供了一個 Docker Hub給大家進行共享房子鏡像,當然你也可以搞私有倉庫,獨樂樂,不共享自己的房子鏡像給別人。
二、Docker的在線安裝
Docker官方建議在Ubuntu中安裝,因為Docker是基于Unbantu發布的,而且一般Docker出現的問題Ubuntu是最先更新或者打補丁的,在很多版本的Centos中是不支持更新最新的一些補丁包的。
由于我們學習的環境都使用的Centos,因此這里將Docker安裝到Centos上。
注意:
Linux要求內核3.0以上
CentOS 需要是7版本的
既然有官方提示的注意,那么我們如何查看系統內核呢?
1、使用uname命令驗證
[root@localhost docker]# uname -r 3.10.0-1127.el7.x86_64
2、卸載已安裝的Docker
如果已經安裝過Docker,請先卸載,再重新安裝,來確保整體的環境是一致的。
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3、安裝yum工具包和存儲驅動
yum install -y yum-utils
4、設置鏡像的倉庫
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo #上述方法默認是從國外的,不推薦 #推薦使用國內的,阿里云docker鏡像 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、安裝docker
注意 : docker-ce 社區版 而ee是企業版。這里我們使用社區版即可。
yum install docker-ce docker-ce-cli containerd.io
6、啟動docker
systemctl start docker
7、設置開機啟動
systemctl enable docker
8、安裝后查看Docker版本
[root@localhost docker]# docker version Client: Docker Engine - Community Version: 19.03.13 API version: 1.40 Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:03:45 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.13 API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 4484c46d9d Built: Wed Sep 16 17:02:21 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.3.7 GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
9、配置阿里云鏡像加速
鑒于國內網絡問題,后續拉取 Docker 鏡像十分緩慢,我們可以需要配置加速器來解決這個問題。
登錄阿里云
搜索 “ 容器鏡像服務 ”
獲取加速器地址
通過修改 daemon 配置文件 /etc/docker/daemon.json
來使用加速器
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://pak31uuv.mirror.aliyuncs.com"] } EOF # 重啟 Docker systemctl daemon-reload systemctl restart docker
注意:
阿里云的本人自己賬號的鏡像地址(需要自己注冊有一個屬于你自己的): https://xxxx.mirror.aliyuncs.com
10、驗證配置是否成功
docker info # 輸出如下 Client: Debug Mode: false Server: Containers: 15 Running: 12 Paused: 0 Stopped: 3 Images: 24 Server Version: 19.03.6 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: systemd Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: runc version: init version: Security Options: apparmor seccomp Profile: default Kernel Version: 4.15.0-96-generic Operating System: Ubuntu 18.04.4 LTS OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.767GiB Name: docker-services ID: YZSB:WJFB:RS4K:V22L:IVGK:GZVZ:UQL4:MCCR:MQ4X:6HRE:T5RM:53M5 Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://k7da99jp.mirror.aliyuncs.com/ https://dockerhub.azk8s.cn/ https://registry.docker-cn.com/ Live Restore Enabled: false WARNING: No swap limit support
三、Docker內網環境的離線安裝
由于在很多情況下需要安裝docker的虛擬機或服務器無法訪問互聯網,因此需要離線安裝docker。
準備工作
一臺可以訪問互聯網的虛擬機或服務器,操作系統不限,改機器可以訪問擬安裝docker的機器
STEP 1 : 以下操作在可以訪問互聯網的機器進行
下載安裝包
訪問https://download.docker.com/linux/static/stable/ 選擇合適的版本并下載,
筆者用的是 :
https://download.docker.com/linux/static/stable/x86_64/docker-18.09.6.tgz
STEP 2: 將下載的安裝包上傳到擬安裝的機器
STEP 3: 以下操作在擬安裝的機器上進行
1、解壓縮安裝包
tar -zxvf docker-18.09.6.tgz
2、復制解壓縮后的文件到指定文件夾
cp docker/* /usr/bin/
3、注冊編輯docker服務
vim /etc/systemd/system/docker.service
4、復制下列內容到該文檔中
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
5、添加權限后啟動
chmod +x /etc/systemd/system/docker.service
6、重新加載配置文件
systemctl daemon-reload
7、啟動Docker
systemctl start docker
8、設置開機自啟
systemctl enable docker.service
9、驗證是否安裝成功
systemctl status docker docker -v
四、運行第一個容器
我們以 Nginx 為例,體驗 Docker 是如何運行容器的
# 下載鏡像 docker pull nginx # 運行容器 docker run --name nginx-container -p 80:80 -d nginx
瀏覽器輸入虛擬機地址即可訪問 Nginx
原文鏈接:https://blog.csdn.net/shujuelin/article/details/123082220
相關推薦
- 2023-01-05 Kotlin啟動協程的三種方式示例詳解_Android
- 2022-05-29 Android超詳細講解彈出多選框的實現_Android
- 2022-11-16 注意import和from?import?的區別及說明_python
- 2022-10-04 .NET??Smobiler的復雜控件的由來與創造_ASP.NET
- 2024-01-11 org.apache.commons.collections.MapUtils Map集合工具類
- 2022-07-13 交換單鏈表第n和n+1個鏈點
- 2022-09-15 C++中的幾個特殊符號說明_C 語言
- 2023-01-07 基于Go語言實現選擇排序算法及優化_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支