創作不易,來了的客官點點關注,收藏,訂閱一鍵三連?😜

前言
運維之基礎——Linux,我是一個即將畢業的大學生,超超,如果你也在學習Linux,不妨跟著萌新超超一起學習Linux,拿下Linux,一起加油,共同努力,拿到理想offer!
系列文章
Linux進階 | 2萬字總結最詳細的Docker的安裝、底層隔離機制和簡單使用!建議收藏,持續更新?
Linux | 詳解系統監控和常用命令(top free dstat)
Linux | 超超講解SSH的原理與SSH的實作!建議收藏?
Linux | 萬字總結用戶與組的權限那些事兒!建議收藏!
概述
Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用介面,它是目前最流行的 Linux 容器解決方案,本期內容為Docker第二期,通過本期內容將會掌握docker的如何創建容器、容器之間的網路連接、如何實作容器的資料持久化以及volume的使用,
目錄
前言
概述
超超Docker學習思維導圖
云服務(cloud server)
云計算(cloud computing)
nginx的初探
nginx的安裝和web服務的部署
yum方式安裝
使用docker啟動nginx web服務
容器之間網路連接
容器的資料保存——資料持久化
容器的結構有什么問題?
容器的結構問題如何解決?
容器的資料如何保存?
正常停止容器,容器里的資料會丟失嗎?
volume(資料卷)
volume是什么?
volume的常用命令
實作volume掛載的兩種方法
方法一:-v
方法二:--mount
練習
練習一:volume練習題
練習二:創建centos和Ubuntu鏡像的容器
超超Docker學習思維導圖

Docker思維導圖將持續更新,歡迎大家訂閱Linux欄目!
云服務(cloud server)


Iass(基礎設施即服務):給其他個人或企業提供虛擬機(cpu,記憶體,網卡等),(賣云服務器)
Pass(平臺即服務):云平臺對外提供某個軟體的服務,例如資料庫平臺,對外提供資料庫服務(賣功能)
Saas(軟體即服務):提供一種軟體,(賣軟體)
Baas:區塊鏈服務
云計算(cloud computing)

云計算的好處:節約成本,集中力量做事情,集中調度
openstack :開源且免費的云計算軟體,將多臺服務器的資源整合,然后再分配,分配成一個個虛擬機,
公用云:公開給所有人(個人、企業、等)可以購買并使用的云,例如阿里云、谷歌云、騰訊云,
b2b:business to business 企業和企業之間做業務
b2c:business to sustomer 企業與個人做業務
私有云:只是自己使用,不對外公開的云,例如阿里云,騰訊云,華為云,ucloud,七牛云等,
混合云:一部分是公用云,另外一部分是私有云,不同業務使用不同的云,但是云之間有聯系,
云原生:對于k8s而言,k8s是docker,集群容器的編排工具,K8s是用來管理不同機器上的docker容器,
nginx的初探
Nginx 是高性能的 HTTP 和反向代理的web服務器,處理高并發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數,
其特點是占有記憶體少,并發能力強,事實上nginx的并發能力確實在同型別的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等,
nginx的安裝和web服務的部署
yum方式安裝
1.yum命令安裝
[root@docker ~]# yum install nginx -y
2.執行并查看nginx行程
[root@docker ~]# systemctl start nginx
[root@docker ~]# ps aux|grep nginx
root 347450 0.0 0.0 12324 1056 pts/0 S+ 22:59 0:00 grep --color=auto nginx
3.關閉防火墻并設定開機不啟動
[root@docker ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@docker ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@docker ~]# getenforce
Enforcing
4.編輯一個網站,編輯好后直接在網站輸入IP地址即可進入編輯好的頁面
[root@docker ~]# cd /usr/share/nginx/html/
[root@docker html]# vim index.html
[root@docker html]# cat index.html
<html>
<head>
<title>chaochao</title>
</head>
<body>
<p>name:chaochao</p>
<p>sex:male</p>
<p>tel:1517388321</p>
<img src=1.jpg>
<a href=rep.html>reputation</a>
</body>
</html>
[root@docker html]# vim rep.html
[root@docker html]# cat rep.html
<html>
<head>
<title>reputation</title>
</head>
<body>
<p>name:lizhichao</p>
<p>sex:male</p>
<p>tel:1517388321</p>
<img src=2.jpg>
<a href=http://www.baidu.com>girl</a>
</body>
</html>
效果圖:

使用docker啟動nginx web服務
1.新建一個/web目錄存放web有關檔案
mkdir /web
cp /usr/share/nginx/html/* /web
2.運行命令
命令:
docker run --name sc-nginx-1 -v /web:/usr/share/nginx/html:ro -d -p 8080:80 daocloud.io/nginx
命令列解釋:
docker run --> 啟動容器
--name sc-nginx-2 --> 指定容器的名字
-v /web:/usr/share/nginx/html:ro --> 資料卷: 可以實作宿主機和容器直接的資料共享
/web --> 是宿主機里的目錄,需要自己新建
/usr/share/nginx/html --> 是容器里的系統的目錄的路徑
ro --> 只讀
-d --> deamon,在后臺啟動一個容器行程
-p 8080:80 --> 埠的映射:通過iptables的DNAT實作,8080:80 訪問宿主機的8080埠,轉發到容器里的80埠
daocloud.io/nginx --> 到daocloud.io網站去下載nginx的鏡像,可以直接用nginx鏡像
示例:
[root@docker web]# docker run --name chaochao-1 -v /web:/usr/share/nginx/html:ro -d -p 8070:80 daocloud.io/nginx
a7d27274426109a6644991560dd20b2e4ac6bd818b1c80cb20e49e7f008be63f
注:若命令執行失敗,需要重新啟動docker:
[root@sc-docker web]# service docker restart
Redirecting to /bin/systemctl restart docker.service
#重啟 docker 服務 ,會重新去添加docker自定義鏈在iptables里
容器之間網路連接
作用:網路埠的映射不是唯一的方法使一個container訪問另外一個container,容器之間可以使用主機名訪問 ,但Docker也具有一個linking system,我們可以將多個container連接在一起,相互之間發送連接資訊,當container被連接,關于來源container的資訊將被發送給接收container,這將是接收資訊放能夠看到來源container的資訊,
命令:docker run -d --name chao-nginx-1 --link chao-redis-1:redis nginx
# 將chao-redis-1這個容器起一個別名叫redis,目的是在chao-nginx-1這個容器的/etc/hosts添加一個決議記錄,
[root@docker ~]# docker run -d --name chao-redis-1 -p 6379:6379 redis
4f06900d478807c9839991566051cf25439f9a46d9adcbeb308bed10afed1db0
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f06900d4788 redis "docker-entrypoint.s…" 6 seconds ago Up 3 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp chao-redis-1
[root@docker ~]# docker run -d --name chao-nginx-1 --link chao-redis-1:redis nginx
# 查看:
[root@docker ~]# docker exec -it chao-nginx-redis1 /bin/bash
root@7123e3a3b5c1:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.7 redis 4f06900d4788 chao-redis-1
172.17.0.8 7123e3a3b5c1
root@7123e3a3b5c1:/#
容器的資料保存——資料持久化
容器的結構有什么問題?
1.關倍訓重啟容器,該容器的資料不會被影響,但是洗掉該容器,資料就會丟失,因為容器的資料是不會影響到鏡像
2.存在于聯合檔案系統中,不易于宿主機的訪問
3.容器間資料共享不方便
容器的結構問題如何解決?
實作資料持久化,將容器的資料保存到磁盤中
容器的資料如何保存?
啟動Docker時發現存盤目錄依舊是/var/lib/docker,但是實際上是存盤在資料盤(volume)的,你可以在資料盤上看到容量變化,
正常停止容器,容器里的資料會丟失嗎?
不會,會保存到/var/lib/docker/volumes/,
volume(資料卷)
volume是什么?
Docker Volume,通常翻譯為資料卷,用于保存持久化資料,當我們將資料庫例如MySQL運行在Docker容器中時,一般將資料通過Docker Volume保存在主機上,這樣即使洗掉MySQL容器,資料依然保存在主機上,有效保證了資料的安全性,這篇博客將通過簡單的實踐幫助大家理解什么是Docker Volume,
volume的常用命令
查看volume: docker volume ls
查看卷的詳細資訊:docker volume inspect 資料卷名
新建volume: docker volume create chaochao
示例:
[root@docker web]# docker volume ls
DRIVER VOLUME NAME
local 1845f87e990a3184728530d26a7b0d2c273c1de20ac3c88ff0e37d13e7f0a54c
[root@docker web]# docker volume create chaochao
chaochao
[root@docker web]# docker volume ls
DRIVER VOLUME NAME
local 1845f87e990a3184728530d26a7b0d2c273c1de20ac3c88ff0e37d13e7f0a54c
local chaochao
[root@docker web]# docker volume inspect chaochao
[
{
"CreatedAt": "2021-08-12T22:33:25+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/chaochao/_data",
"Name": "chaochao",
"Options": {},
"Scope": "local"
}
實作volume掛載的兩種方法
方法一:-v
[root@docker web]# docker run -d --name xuzz-3 -v chaochao:/usr/share/nginx/html nginx
58d99df640b7662f4ff625e7cde9d0e7f40250992f8fd1ad39bc48aeca162ddb
# 需要80埠才可以訪問web服務,chaochao是創建的volume
效果:

方法二:--mount
[root@docker web]# docker run -d --name lizhichao-nginx --mount source=chaochao,target=/usr/share/nginx/html/ -p 8060:80 nginx:latest
2710b596777b80fc9755a43a4070494b6fb7d682a2fa895a91d690e63bfed04d
[root@docker web]# cd /var/lib/docker/volumes/
[root@docker volumes]# ls
1845f87e990a3184728530d26a7b0d2c273c1de20ac3c88ff0e37d13e7f0a54c chaochao
backingFsBlockDev metadata.db
[root@docker volumes]# cd chaochao/
[root@docker chaochao]# ls
_data
[root@docker chaochao]# cd _data/
[root@docker _data]# cp /web/* .
cp:是否覆寫'./index.html'? y
[root@docker _data]# ls
1.jpg 50x.html index.html rep.html
效果圖:

練習
練習一:volume練習題
1.創建一個卷,在卷里創建一個index.html首頁檔案,內容welcome to chaochao
2.創建2個容器名字自己定義:rose-1 rose-2,啟動nginx,使用新建卷
3.測驗訪問
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local 1845f87e990a3184728530d26a7b0d2c273c1de20ac3c88ff0e37d13e7f0a54c
local chaochao
[root@docker ~]# docker volume create lizhichao
lizhichao
[root@docker ~]# docker volume ls
DRIVER VOLUME NAME
local 1845f87e990a3184728530d26a7b0d2c273c1de20ac3c88ff0e37d13e7f0a54c
local chaochao
local lizhichao
[root@docker ~]# docker volume inspect lizhichao
[
{
"CreatedAt": "2021-08-12T23:08:58+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/lizhichao/_data",
"Name": "lizhichao",
"Options": {},
"Scope": "local"
}
]
[root@docker ~]# cd /var/lib/docker/volumes/lizhichao/_data
[root@docker _data]# ls
[root@docker _data]# vim index.html
[root@docker _data]# ls
index.html
[root@docker _data]# docker run -d --name chao-nginx1 -p 8001:80 --mount source=lizhichao,target=/usr/share/nginx/html/ nginx:latest
e88ca98c52cb0e4c1c51771dc70de93f8958387c3067dd0fbb0cfd5fecb71f6b
[root@docker _data]# docker run -d --name chao-nginx2 -p 8002:80 --mount source=lizhichao,target=/usr/share/nginx/html/ nginx:latest
4cb9497e4b830a0eec6406d5be362adaf643982dc16a9cbcb68781b7d746bef2
測驗效果:


練習二:創建centos和Ubuntu鏡像的容器
1.拉取centos:7和Ubuntu的鏡像,并進入其中一個鏡像創建的容器
2.在里面安裝軟體 tree,nginx
3.鏡像匯出
4.在另外一臺機器里匯入
centos7:
[root@docker ~]# docker pull centos/python-35-centos7 #下載centos7鏡像
在容器內自己安裝鏡像:
[root@docker ~]# docker run -it -d --name lizhichao -p 8880:66 centos:7 #-p 做埠映射的時候,其實背后就是在iptables里添加DNAT和SNAT策略
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
67b50ec7b21b899725a05c5fab60106dfc2cdb4239db7a92a0addd1c5e6d9389
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
67b50ec7b21b centos:7 "/bin/bash" 24 seconds ago Up 20 seconds 0.0.0.0:8880->66/tcp, :::8880->66/tcp lizhichao
進入互動式環境:
[root@docker ~]# docker exec -it lizhichao /bin/bash
[root@67b50ec7b21b /]# hostname
67b50ec7b21b
[root@67b50ec7b21b /]# yum install tree -y
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
連不上網,下載不了,怎么辦?解決步驟如下!
[root@docker ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
[root@docker ~]# service docker restart
Redirecting to /bin/systemctl restart docker.service
接著作答:
[root@docker ~]# docker run -it -d --name lizhichao2 -p 8888:68 centos:7
5f13988c81497674e2d8c8c7fe52ceec66e99b6ca6d9054372ce9fef452355ca
# 在centos7鏡像創建lizhichao2容器
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f13988c8149 centos:7 "/bin/bash" 5 seconds ago Up 3 seconds 0.0.0.0:8888->68/tcp, :::8888->68/tcp lizhichao2
[root@docker ~]# docker exec -it lizhichao2 /bin/bash # 進入容器
[root@5f13988c8149 /]# hostname
5f13988c8149
[root@5f13988c8149 /]# ping www.baidu.com #檢查是否能上網
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=127 time=28.9 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=127 time=28.0 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 28.010/28.490/28.971/0.509 ms
[root@5f13988c8149 /]# yum install tree vim -y 下載tree、vim包
[root@5f13988c8149 /]# vim chaochao.sh
[root@5f13988c8149 /]# bash chaochao.sh # 檢驗是否成功
i am chaochao
ubuntu:
lizhichao@chaochao:~$ sudo docker pull ubuntu #拉去Ubuntu鏡像
lizhichao@chaochao:~$ sudo docker run -it --name ubuntu-chaochao-1 -d ubuntu #創建一個容器并進入互動環境
d21b0ebe1fd336a346da6fdf47dd1dbc1f12f1c1a6c0585455ca6135c89fe46e
lizhichao@chaochao:~$ hostname
chaochao
lizhichao@chaochao:~$ sudo docker exec -it ubuntu-chaochao-1 /bin/bash #進入新建容器的互動式環境
root@d21b0ebe1fd3:/# hostname
d21b0ebe1fd3
root@d21b0ebe1fd3:/# cat /etc/issue
Ubuntu 20.04.2 LTS \n \l
從ubuntu匯出:
lizhichao@chaochao:~$ sudo scp ubuntu-chao.tar root@192.168.232.132:/root #scp傳遞到另外一臺服務器上
The authenticity of host '192.168.232.132 (192.168.232.132)' can't be established.
ECDSA key fingerprint is SHA256:H9UmgdDuOZykWs7ysydLjxzCS2tyNNrbylAGIa6pBgc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.232.132' (ECDSA) to the list of known hosts.
root@192.168.232.132's password:
ubuntu-chao.tar 100% 72MB 44.0MB/s 00:01
在centos上面查看并接收:
[root@docker ~]# cd /root
[root@docker ~]# ls
anaconda-ks.cfg ubuntu-chao.tar
[root@docker ~]# docker load -i ubuntu-chao.tar
7555a8182c42: Loading layer [==================================================>] 75.16MB/75.16MB
Loaded image: ubuntu:lates
創作不易,客官點個贊,評論一下吧!超超和你一起加油?😜
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/296545.html
標籤:其他
