午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識(shí)庫 > Python開發(fā)加薪利器之Docker的使用實(shí)踐

Python開發(fā)加薪利器之Docker的使用實(shí)踐

熱門標(biāo)簽:手機(jī)網(wǎng)頁嵌入地圖標(biāo)注位置 地圖標(biāo)注線上如何操作 開封語音外呼系統(tǒng)代理商 電銷機(jī)器人的風(fēng)險(xiǎn) 400電話辦理哪種 天津電話機(jī)器人公司 應(yīng)電話機(jī)器人打電話違法嗎 河北防封卡電銷卡 開封自動(dòng)外呼系統(tǒng)怎么收費(fèi)

1. Docker概述

  • Docker為什么火,因?yàn)槭值妮p巧。
  • Docker是基于Go語言開發(fā)的。

1.1 虛擬機(jī)技術(shù)VS容器化技術(shù)

虛擬機(jī)技術(shù):

  • 資源占用
  • 多冗余步驟多
  • 啟動(dòng)慢

容器化技術(shù):容器化技術(shù)不是模擬一個(gè)完整的操作系統(tǒng)。

1.2 名詞概念

鏡像(image)

docker鏡像好比是一個(gè)模版,可以通過這個(gè)模版來創(chuàng)建容器服務(wù),mysql鏡像==>run==>mysql01容器(提供服務(wù)),通過這個(gè)鏡像可以創(chuàng)建多個(gè)容器。

容器(container)

docker利用容器技術(shù),獨(dú)立運(yùn)行一個(gè)或者一組應(yīng)用。通過鏡像來創(chuàng)建的。

基本命令有啟動(dòng)、停止、刪除等。

目前可以把容器理解為就是一個(gè)簡(jiǎn)易的Linux系統(tǒng)。

倉庫(repository)

倉庫就是存放鏡像的地方。倉庫分為公有倉庫和私有倉庫。默認(rèn)是國外的倉庫(DockerHub),國內(nèi)有阿里云等(配置鏡像加速)

2. Docker安裝

2.1 環(huán)境查看

2.1.1 查看內(nèi)核版本

uname -r

2.1.2 查看系統(tǒng)信息

sudo cat /etc/os-release

2.2 卸載舊的版本

sudo apt-get remove docker docker-engine docker.io containerd runc

2.3 安裝必要的包

2.3.1 更新apt程序包索引

sudo apt-get update

2.3.2 安裝必要的包

sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    gnupg \

    lsb-release

2.4 添加GPG密鑰

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

上面是官網(wǎng)提供的,但是速度很慢,建議使用阿里云的GPG Key。

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

2.5 添加穩(wěn)定Docker-ce軟件源

echo \

  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \

  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

上面是官網(wǎng)提供的,但是速度很慢,建議使用阿里云提供的。

sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \

$(lsb_release -cs) stable"

注意:添加錯(cuò)了可以用以下命令刪除

#查詢keyid,下圖
sudo apt-key list
#keyid 就是9DC8那一串
sudo apt-key del keyid>
#加參數(shù)-r可以移除
sudo add-apt-repository -r "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

2.6 安裝Docker引擎

2.6.1 安裝apt包索引

這樣就可以安裝Docker Engine和containerd的最新版本

sudo apt-get update

2.6.2 安裝

sudo apt-get install docker-ce docker-ce-cli containerd.io

如果要安裝指定版本的Docker引擎,在repo中列出可用版本,然后選擇安裝

apt-cache madison docker-ce

sudo apt-get install docker-ce=VERSION_STRING> docker-ce-cli=VERSION_STRING> containerd.io

2.7 添加當(dāng)前用戶到 docker 用戶組

添加后,以后就可以不用 sudo 運(yùn)行 docker 了。

將當(dāng)前用戶添加到 docker 組

sudo gpasswd -a ${USER} docker

重新登錄或者用以下命令切換到docker組(建議重啟Ubuntu)

newgrp - docker

重啟docker服務(wù)

sudo service docker restart

不加sudo直接執(zhí)行docker命令檢查效果

docker ps

2.8 測(cè)試是否安裝成功

首先啟動(dòng)Docker

systemctl start docker

查看Docker版本來判斷是否安裝成功

docker version

2.9 配置阿里云鏡像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json -'EOF'
{
  "registry-mirrors": ["https://eko3tl65.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

3. Docker run 運(yùn)行流程圖

4. Docker工作原理

Docker是一個(gè)Client·Server結(jié)構(gòu)的系統(tǒng),Docker的守護(hù)進(jìn)程運(yùn)行在主機(jī)上,通過Socket從客戶端訪問,DockerServer接受到DockerClient的指令,就會(huì)去執(zhí)行這個(gè)指令。

5. Docker常見命令

5.1 幫助命令

# 顯示docker的版本信息
docker version

# 顯示docker的系統(tǒng)信息 包括鏡像和容器的數(shù)量
docker info

# 幫助命令
docker 命令 --help

幫助文檔地址:官方文檔

5.2 鏡像命令

5.2.1 docker images

查看所有本地的主機(jī)上的鏡像

malulu@malulu:~/桌面$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
nginx         latest    519e12e2a84a   4 days ago    133MB
hello-world   latest    d1165f221234   5 weeks ago   13.3kB

# 解釋
REPOSITORY	鏡像的倉庫源
TAG			鏡像的標(biāo)簽
IMAGE ID	鏡像的ID
CREATED		鏡像的創(chuàng)建時(shí)間
SIZE		鏡像的大小

# 可選項(xiàng)
  -a, --all             # 列出所有鏡像
  -q, --quiet           # 只顯示鏡像的ID

5.2.2 docker search

搜索鏡像

# 可選項(xiàng)
--filter=STARS=3000		# 搜索出來的鏡像就是STARS大于3000的

5.2.3 docker pull

下載鏡像

# 下載鏡像
docker pull 鏡像名[:tag]

malulu@malulu:~/桌面$ docker pull mysql
Using default tag: latest		# 如果不寫tag(版本) 默認(rèn)就是latest
latest: Pulling from library/mysql
f7ec5a41d630: Already exists	# 分層下載 docker image的核心 聯(lián)合文件系統(tǒng) 
9444bb562699: Pull complete 
6a4207b96940: Pull complete 
181cefd361ce: Pull complete 
8a2090759d8a: Pull complete 
15f235e0d7ee: Pull complete 
d870539cd9db: Pull complete 
5726073179b6: Pull complete 
eadfac8b2520: Pull complete 
f5936a8c3f2b: Pull complete 
cca8ee89e625: Pull complete 
6c79df02586a: Pull complete 
Digest: sha256:6e0014cdd88092545557dee5e9eb7e1a3c84c9a14ad2418d5f2231e930967a38	# 簽名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest	# 真實(shí)地址


# 下面兩條命令等價(jià)
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下載 必須在倉庫有這個(gè)版本
malulu@malulu:~/桌面$ docker pull mysql:5.7
5.7: Pulling from library/mysql
f7ec5a41d630: Already exists 
9444bb562699: Already exists 
6a4207b96940: Already exists 
181cefd361ce: Already exists 
8a2090759d8a: Already exists 
15f235e0d7ee: Already exists 
d870539cd9db: Already exists 
7310c448ab4f: Pull complete 
4a72aac2e800: Pull complete 
b1ab932f17c4: Pull complete 
1a985de740ee: Pull complete 
Digest: sha256:e42a18d0bd0aa746a734a49cbbcc079ccdf6681c474a238d38e79dc0884e0ecc
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

5.2.4 docker rmi

刪除鏡像

# 刪除指定的鏡像
docker rmi -f 鏡像ID

# 刪除多個(gè)鏡像
docker rmi -f 鏡像ID 鏡像ID 鏡像ID 鏡像ID 

# 刪除全部鏡像
docker rmi -f $(docker images -aq)

5.3 容器命令

說明:我們有了鏡像才可以創(chuàng)建容器。

這里下載一個(gè)centos鏡像來測(cè)試學(xué)習(xí)。

docker pull centos

5.3.1 新建容器并啟動(dòng)

docker run [可選參數(shù)] image

# 參數(shù)說明
--name="Name"	# 容器名字 mysql01 mysql02 用來區(qū)分容器
-d				# 后臺(tái)方式運(yùn)行
-it				# 使用交互方式運(yùn)行(需要提供一個(gè)控制臺(tái)) 進(jìn)入容器查看內(nèi)容
-p				# 指定容器的端口 -p 8080:8080
	-p ip:主機(jī)端口:容器端口
	-p 主機(jī)端口:容器端口 (常用)
	-p 容器端口
	容器端口
-P				# 隨機(jī)指定端口

# 測(cè)試
# 啟動(dòng)并進(jìn)入容器
malulu@malulu:~/桌面$ docker run -it centos /bin/bash
[root@a8d9ce9627a4 /]# ls	# 查看容器內(nèi)的centos 基礎(chǔ)鏡像 很多命令都是不完善的
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

# 從容器中退回主機(jī)
[root@a8d9ce9627a4 /]# exit
exit
malulu@malulu:~/桌面$ 

5.3.2 列出所有的運(yùn)行的容器

# 列出當(dāng)前正在運(yùn)行的容器
docker ps

# 可選項(xiàng)
-a		# 列出當(dāng)前正在運(yùn)行的容器 + 歷史運(yùn)行過的容器
-n=?	# 顯示最近創(chuàng)建的n個(gè)容器
-q		# 只顯示容器的編號(hào)

5.3.3 退出容器

exit	# 直接停止容器并退出
ctrl+P+Q	# 容器不停止退出

5.3.4 刪除容器

# 刪除指定的容器 不能刪除正在運(yùn)行的容器 強(qiáng)制刪除用rm -f
docker rm 容器ID

# 刪除所有的容器
# 方式一 常用
docker rm -f $(docker ps -aq)
# 方式二
docker ps -a -q|xargs docker rm

5.3.5 啟動(dòng)和停止容器的操作

docker start 容器ID	# 啟動(dòng)容器
docker restart 容器ID	# 重啟容器
docker stop 容器ID	# 停止當(dāng)前正在運(yùn)行的容器
docker kill 容器ID	# 強(qiáng)制刪除當(dāng)前容器

5.4 常見其他命令

5.4.1 后臺(tái)啟動(dòng)容器

# 后臺(tái)啟動(dòng)容器
docker run -d 鏡像名

# 比如 后臺(tái)啟動(dòng)centos
docker run -d centos

# 問題 docker ps 時(shí) 發(fā)現(xiàn) centos 停止了
# 常見的坑:docker容器使用后臺(tái)運(yùn)行,就必須要有一個(gè)前臺(tái)進(jìn)程,docker發(fā)現(xiàn)沒有應(yīng)用,就會(huì)自動(dòng)停止
# 比如nginx,容器啟動(dòng)后,發(fā)現(xiàn)自己沒有提供服務(wù),就會(huì)立刻停止,就是沒有程序了

5.4.2 查看日志

docker logs -f -t --tail number 容器ID

# 可選項(xiàng)
 -tf			# 顯示日志
 --tail number	# 要顯示日志條數(shù)

# 自己編寫一段shell腳本
docker run -d centos /bin/sh -c "while true;do echo 666;sleep 1;done"

5.4.3 查看容器中進(jìn)程信息

docker top 容器ID

5.4.4 查看鏡像的元數(shù)據(jù)

docker inspect 容器ID

5.4.5 進(jìn)入當(dāng)前正在運(yùn)行的容器

我們通常容器都是使用后臺(tái)方式運(yùn)行的,有時(shí)需要進(jìn)入容器,修改一些配置

# 方式一
# 命令
docker exec -it 容器ID bashShell
# 測(cè)試
malulu@malulu:~/桌面$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
9ff3b9c7ebd5   centos    "/bin/sh -c 'while t…"   8 seconds ago   Up 6 seconds             lucid_wright
malulu@malulu:~/桌面$ docker exec -it 9ff3b9c7ebd5 /bin/bash
[root@9ff3b9c7ebd5 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@9ff3b9c7ebd5 /]# 

# 方式二
docker attach 容器ID
# 測(cè)試
malulu@malulu:~/桌面$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
9ff3b9c7ebd5   centos    "/bin/sh -c 'while t…"   8 minutes ago   Up 8 minutes             lucid_wright
malulu@malulu:~/桌面$ docker attach 9ff3b9c7ebd5
666
666
666
666
666
666

# docker exec	# 進(jìn)入容器后開啟一個(gè)新的終端 可以在里面操作(常用)
# docker attach	# 進(jìn)入容器正在執(zhí)行的終端 不會(huì)啟動(dòng)新的終端

5.4.6 從容器內(nèi)拷貝文件到主機(jī)

注意:是從容器內(nèi)拷貝到主機(jī)。

docker cp 容器Id:容器內(nèi)路徑 目的的主機(jī)路徑

只要容器存在就可以,跟容器是否運(yùn)行沒有關(guān)系。

拷貝是一個(gè)手動(dòng)過程,后面我們使用 -V 數(shù)據(jù)卷的技術(shù),可以實(shí)現(xiàn)自動(dòng)同步。

5.4.5 小結(jié)

attach      Attach local standard input, output, and error streams to a running container
build       Build an image from a Dockerfile
commit      Create a new image from a container's changes
cp          Copy files/folders between a container and the local filesystem
create      Create a new container
diff        Inspect changes to files or directories on a container's filesystem
events      Get real time events from the server
exec        Run a command in a running container
export      Export a container's filesystem as a tar archive
history     Show the history of an image
images      List images
import      Import the contents from a tarball to create a filesystem image
info        Display system-wide information
inspect     Return low-level information on Docker objects
kill        Kill one or more running containers
load        Load an image from a tar archive or STDIN
login       Log in to a Docker registry
logout      Log out from a Docker registry
logs        Fetch the logs of a container
pause       Pause all processes within one or more containers
port        List port mappings or a specific mapping for the container
ps          List containers
pull        Pull an image or a repository from a registry
push        Push an image or a repository to a registry
rename      Rename a container
restart     Restart one or more containers
rm          Remove one or more containers
rmi         Remove one or more images
run         Run a command in a new container
save        Save one or more images to a tar archive (streamed to STDOUT by default)
search      Search the Docker Hub for images
start       Start one or more stopped containers
stats       Display a live stream of container(s) resource usage statistics
stop        Stop one or more running containers
tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top         Display the running processes of a container
unpause     Unpause all processes within one or more containers
update      Update configuration of one or more containers
version     Show the Docker version information
wait        Block until one or more containers stop, then print their exit codes

6. 實(shí)戰(zhàn)

6.1 部署Nginx

第一步:搜索鏡像,建議去DockerHub搜索,可以看到幫助文檔

https://registry.hub.docker.com/search?q=nginxtype=image

第二步:拉取鏡像

malulu@malulu:~/桌面$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f7ec5a41d630: Already exists 
aa1efa14b3bf: Pull complete 
b78b95af9b17: Pull complete 
c7d6bca2b8dc: Pull complete 
cf16cd8e71e0: Pull complete 
0241c68333ef: Pull complete 
Digest: sha256:75a55d33ecc73c2a242450a9f1cc858499d468f077ea942867e662c247b5e412
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
malulu@malulu:~/桌面$ 

第三步:運(yùn)行測(cè)試

# -d 后臺(tái)運(yùn)行
# --name 給容器命名
# -p 宿主機(jī)端口:容器內(nèi)部端口
malulu@malulu:~/桌面$ docker run -d --name nginx01 -p 3344:80 nginx
699b9cecd0a07f8db6e888722a2dada1c9b9be6d77efc7996c4b6758dd72f587
malulu@malulu:~/桌面$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                  NAMES
699b9cecd0a0   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:3344->80/tcp   nginx01
malulu@malulu:~/桌面$ curl localhost:3344

# 進(jìn)入容器
malulu@malulu:~/桌面$ docker exec -it nginx01 /bin/bash
root@699b9cecd0a0:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@699b9cecd0a0:/# cd /etc/nginx/
root@699b9cecd0a0:/etc/nginx# ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf
root@699b9cecd0a0:/etc/nginx# exit

第四步:公網(wǎng)訪問

6.2 端口暴露(端口轉(zhuǎn)發(fā))

6.3 部署Elasticsearch

# es 暴露的端口很多
# es 十分的耗內(nèi)存
# es 數(shù)據(jù)一般需要放置到安全目錄 掛載

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
# --net somenetwork 網(wǎng)絡(luò)配置
# 啟動(dòng) Elasticsearch
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.12.0
# 啟動(dòng)之后,服務(wù)器會(huì)特別卡

# 所以需要增加內(nèi)存的限制
# 修改配置文件 -e 環(huán)境配置修改
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.12.0
# 查看CPU使用情況
docker stats 容器ID

# 測(cè)試es是否安裝成功
curl localhost:9200

6.4 可視化 Portainer

Docker圖形化界面管理工具,提供一個(gè)后臺(tái)面板供我們操作。

訪問測(cè)試:

http://192.168.2.143:8088
http://localhost:8088

為用戶 admin 設(shè)置密碼 admin123456

登錄成功后,選擇本地Docker環(huán)境

進(jìn)入之后的面板

可視化面板我們平時(shí)不會(huì)使用,用來測(cè)試玩玩。

7. Docker鏡像講解

7.1 鏡像是什么

鏡像是一種輕量級(jí)、可執(zhí)行的獨(dú)立軟件包,用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件,它包含運(yùn)行某個(gè)軟件所需的所有內(nèi)容,包括代碼、運(yùn)行所需庫、環(huán)境變量和配置文件。
所有的應(yīng)用,直接打包docker鏡像,就可以直接跑起來。

如何獲取到鏡像:

  • 從遠(yuǎn)程倉庫下載
  • 朋友拷貝給你
  • 自己制作一個(gè)鏡像DockerFile

7.2 Docker鏡像加載原理

UnionFS(聯(lián)合文件系統(tǒng))

我們下載的時(shí)候看到的一層層就是這個(gè)!
Union文件系統(tǒng)(UnionFS)是一種分層、輕量級(jí)并且高性能的文件系統(tǒng),它支持對(duì)文件系統(tǒng)的修改
作為一次提交來一層層的疊加,同時(shí)可以將不同目錄掛載到同一個(gè)虛擬文件系統(tǒng)下(unite several directories into a single virtual filesystem)。Union文件系統(tǒng)是Docker鏡像的基礎(chǔ)。鏡像可以通過分層來進(jìn)行繼承,基于基礎(chǔ)鏡像(沒有父鏡像),可以制作各種具體的應(yīng)用鏡像。

特性:一次同時(shí)加載多個(gè)文件系統(tǒng),但從外面看起來,只能看到一個(gè)文件系統(tǒng),聯(lián)合加載會(huì)把各層文件系統(tǒng)疊加起來,這樣最終的文件系統(tǒng)會(huì)包含所有底層的文件和目錄。

Docker鏡像加載原理

Docker的鏡像實(shí)際上由一層層的文件系統(tǒng)組成,這種層級(jí)的文件系統(tǒng)叫做UnionFS。

系統(tǒng)啟動(dòng)需要引導(dǎo)加載。

bootfs(boot file system)主要包含bootloader(加載器)和kernel(內(nèi)核),bootloader主要是引導(dǎo)加載kernel,Linux剛啟動(dòng)時(shí)會(huì)加載bootfs文件系統(tǒng),在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內(nèi)核。當(dāng)boot加載完成之后整個(gè)內(nèi)核就都在內(nèi)存中了,此時(shí)內(nèi)存的使用權(quán)已由bootfs轉(zhuǎn)交給內(nèi)核,此時(shí)系統(tǒng)也會(huì)卸載bootfs。

rootfs(root file system),在bootfs之上,包含的就是典型Linux系統(tǒng)中的 /dev,/proc,/bin,/etc 等標(biāo)準(zhǔn)目錄和文件。rootfs就是各種不同的操作系統(tǒng)發(fā)行版,比如Ubuntu, Centos等等。容器就是一個(gè)小的虛擬機(jī)環(huán)境。

平時(shí)我們?cè)谔摂M機(jī)中安裝CentOs都是好幾個(gè)G,為什么在Docker里面才200多M?

對(duì)于一個(gè)精簡(jiǎn)的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序庫就可以了,因?yàn)榈讓又苯佑肏ost的kernel,自己只需要提供rootfs就可以了。由此可見對(duì)于不同的linux發(fā)行版,bootfs基本是一致的,rootfs會(huì)有差別,因此不同的發(fā)行版可以公用bootfs。

所以說,虛擬機(jī)是分鐘級(jí)別,容器是秒級(jí)別。是因?yàn)閱?dòng)虛擬機(jī)需要啟動(dòng)內(nèi)核引導(dǎo),非常慢,而容器底層還是使用主機(jī)的內(nèi)核。

7.3 分層理解

分層的鏡像

我們可以去下載一個(gè)鏡像,注意觀察下載的日志輸出,可以看到的是一層一層的在下載。

**思考:**為什么Docker鏡像要采用這種分層的結(jié)構(gòu)呢?
最大的好處,我覺得莫過于是資源共享了。比如有多個(gè)鏡像都從相同的Base鏡像構(gòu)建而來,那么宿主機(jī)只需在磁盤上保留一份Base鏡像,同時(shí)內(nèi)存中也只需要加載一份Base鏡像,這樣就可以為所有的容器服務(wù)了,而且鏡像的每一層都可以被共享。
查看鏡像分層的方式可以通過 docker image inspect 命令。

docker image inspect redis:latest

理解:

所有的Docker鏡像都起始于一個(gè)基礎(chǔ)鏡像層,當(dāng)進(jìn)行修改或增加新的內(nèi)容時(shí),就會(huì)在當(dāng)前鏡像層之上,創(chuàng)建新的鏡像層。
舉一個(gè)簡(jiǎn)單的例子,假如基于Ubuntu Linux 16.04創(chuàng)建一個(gè)新的鏡像,這就是新鏡像的第一層;如果在該鏡像中添加Python包,就會(huì)在基礎(chǔ)鏡像層之上創(chuàng)建第二個(gè)鏡像層;如果繼續(xù)添加一個(gè)安全補(bǔ)丁,就會(huì)創(chuàng)建第三個(gè)鏡像層。該鏡像當(dāng)前已經(jīng)包含3個(gè)鏡像層,如下圖所示(這只是一個(gè)用于演示的很簡(jiǎn)單的例子)

在添加額外的鏡像層的同時(shí),鏡像始終保持是當(dāng)前所有鏡像的組合,理解這一點(diǎn)非常重要。下圖中舉了一個(gè)簡(jiǎn)單的例子,每個(gè)鏡像層包含3個(gè)文件,而鏡像包含了來自兩個(gè)鏡像層的6個(gè)文件。

上圖中的鏡像層跟之前圖中的略有區(qū)別,主要目的是便于展示文件。
下圖中展示了一個(gè)稍微復(fù)雜的三層鏡像,在外部看來整個(gè)鏡像只有6個(gè)文件,這是因?yàn)樽钌蠈又械奈募?是文件5的一個(gè)更新版本。

這種情況下,上層鏡像層中的文件覆蓋了底層鏡像層中的文件。這樣就使得文件的更新版本作為一個(gè)新鏡像層添加到鏡像當(dāng)中。
Docker通過存儲(chǔ)引擎(新版本采用快照機(jī)制)的方式來實(shí)現(xiàn)鏡像層堆棧,并保證多鏡像層對(duì)外展示為統(tǒng)一的文件系統(tǒng)。
Linux上可用的存儲(chǔ)引擎有AUFS、Overlay2、Device Mapper、Btrfs 以及ZFS。顧名思義,每種存儲(chǔ)引擎都基于Linux中對(duì)應(yīng)的文件系統(tǒng)或者塊設(shè)備技術(shù),并且每種存儲(chǔ)引擎都有其獨(dú)有的性能特點(diǎn)。
Docker在Windows上僅支持windowsfilter一種存儲(chǔ)引擎。
下圖展示了與系統(tǒng)顯示相同的三層鏡像。所有鏡像層堆疊并合并,對(duì)外提供統(tǒng)一的視圖。

特點(diǎn)

Docker鏡像都是只讀的,當(dāng)容器啟動(dòng)時(shí),一個(gè)新的可寫層被加載到鏡像的頂部。
這一層就是我們通常說的容器層,容器之下的都叫鏡像層。

7.4 commit鏡像

如何提交一個(gè)自己的鏡像呢?

docker commit 提交容器成為一個(gè)新的鏡像
docker commit -m="提交的描述信息" -a="作者" 容器Id 目標(biāo)鏡像名:[TAG]

實(shí)戰(zhàn)測(cè)試:

# 1.啟動(dòng)一個(gè)默認(rèn)的tomcat
# 2.發(fā)現(xiàn)這個(gè)默認(rèn)的tomcat是沒有webapps應(yīng)用,是因?yàn)楣俜界R像默認(rèn)webapps下面是沒有文件的
# 3.自己拷貝進(jìn)去了基本的文件

# 4.將我們操作過的容器通過commit提交為一個(gè)鏡像。我們以后就使用我們修改過的鏡像即可。

總結(jié):

如果你想要保存當(dāng)前容器的狀態(tài) ,就可以通過commit來提交,獲得一個(gè)鏡像。就好比虛擬機(jī)的快照。

8. 容器數(shù)據(jù)卷

8.1 容器數(shù)據(jù)卷是什么

將應(yīng)用和環(huán)境打包成一個(gè)鏡像!

數(shù)據(jù)?如果數(shù)據(jù)都在容器中,那么我們?nèi)萜鲃h除,數(shù)據(jù)就會(huì)丟失!需求:數(shù)據(jù)可以持久化

MySQL,容器刪了,相當(dāng)于刪庫跑路!需求:MySQL數(shù)據(jù)可以存儲(chǔ)到本地

容器之間可以有一個(gè)數(shù)據(jù)共享的技術(shù)!Docker容器中產(chǎn)生的數(shù)據(jù),同步到本地!

這就是卷技術(shù)!相當(dāng)于目錄的掛載,將我們?nèi)萜鲀?nèi)的目錄,掛載到Linux上面!

**總結(jié):**為什么使用容器卷?為了容器的持久化和同步操作,容器間也是可以數(shù)據(jù)共享的(即多個(gè)容器使用同一個(gè)本地目錄)

8.2 使用數(shù)據(jù)卷

方式一:直接使用命令來掛載 -v

docker run -v 主機(jī)內(nèi)目錄:容器內(nèi)目錄

通過命令 docker inspect 來查看掛載信息,如下:

"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",	# 主機(jī)內(nèi)地址
                "Destination": "/home",		# docker容器內(nèi)地址
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

測(cè)試文件的同步:

8.3 實(shí)戰(zhàn):安裝MySQL

思考:MySQL的數(shù)據(jù)持久化問題。

# 獲取鏡像
docker pull mysql:5.7

# 運(yùn)行容器 需要做數(shù)據(jù)掛載
# 注意: 安裝啟動(dòng)mysql時(shí) 需要配置密碼的
# 官方測(cè)試(DockerHub) docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 啟動(dòng)
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Malulu@960610 --name mysql01 mysql:5.7

# 啟動(dòng)成功后 在使用Navicat來測(cè)試
# Navicat連接到Ubuntu的3310 3310和容器內(nèi)的3306映射 此時(shí)我們就可以連接上了

假設(shè)我們將容器刪除,我們掛載到本地的數(shù)據(jù)卷依舊沒有丟失,這就實(shí)現(xiàn)了容器數(shù)據(jù)持久化的功能。

8.4 匿名掛載和具名掛載

8.4.1 匿名掛載

# 查看所有卷的信息
docker volume ls

# 匿名掛載
-v 容器內(nèi)目錄
docker run -d -P --name nginx -v /etc/nginx nginx

# 這樣就屬于匿名掛載 在 -v 后只寫了容器內(nèi)目錄 沒有寫主機(jī)的目錄

8.4.2 具名掛載

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

通過 -v 卷名:容器內(nèi)目錄 的格式屬于具名掛載。

使用命令 docker volume inspect 卷名 來查看這個(gè)這個(gè)卷的信息。

所有的Docker容器內(nèi)的卷,在沒有指定目錄的情況下都是在主機(jī)的 /var/lib/docker/volumes/xxx/_data 目錄下。

我們通過具名掛載可以方便的找到我們的一個(gè)卷,大多數(shù)情況下使用具名掛載。

如何確定是具名掛載還是匿名掛載還是指定路徑掛載?

-v 容器內(nèi)路徑			 # 匿名掛載
-v 卷名:容器內(nèi)路徑			# 具名掛載
-v /宿主機(jī)路徑:容器內(nèi)路徑	  # 指定路徑掛載

擴(kuò)展:

# 通過 -v 容器內(nèi)路徑:ro rw 改變讀寫權(quán)限
ro readonly 	# 只讀
rw readwrite	# 可讀可寫
# 一旦設(shè)置了這個(gè)權(quán)限 容器對(duì)我們掛載出來的內(nèi)容就有限定了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

# ro 只要看到ro就說明這個(gè)路徑只能通過宿主機(jī)來操作 容器內(nèi)部是無法操作的

8.5 初識(shí)DockerFile

DockerFile就是用來構(gòu)建Docker鏡像的構(gòu)建文件,這個(gè)文件其實(shí)就是一個(gè)命令腳本。

通過這個(gè)腳本可以生成鏡像,鏡像是一層一層的,腳本是一個(gè)一個(gè)的命令,每個(gè)命令都是一層。

# 創(chuàng)建一個(gè)dockerfile文件 名字可以隨機(jī) 建議Dockerfile
# 文件中的內(nèi)容 
# 指令(大寫) 參數(shù)
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-----end-----"
CMD /bin/bash
# 這里的每個(gè)命令鏡像的一層

通過 docker build 來創(chuàng)建自己的命令。

docker build -f ./dockerfile1 -t malulu-centos:1.0 .

啟動(dòng)自己創(chuàng)建的鏡像

這兩個(gè)卷在外部一定有同步的目錄。

查看一下卷掛載的路徑。

然后測(cè)試一下剛才創(chuàng)建的兩個(gè)文件是否同步到宿主機(jī)。

這種方式我們以后用的非常多,因?yàn)槲覀兺ǔ?huì)構(gòu)建自己的鏡像。假設(shè)構(gòu)建鏡像時(shí)沒有掛載卷,就需要手動(dòng)掛載(具名掛載)。

未完待續(xù),值得期待!

您可能感興趣的文章:
  • PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境
  • 使用Docker搭建Django,Nginx,R,Python部署環(huán)境的方法
  • 使用Docker開發(fā)python Web 應(yīng)用
  • 詳解在Python和IPython中使用Docker
  • 使用IPython來操作Docker容器的入門指引

標(biāo)簽:江蘇 六盤水 宿遷 成都 山東 駐馬店 常州 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python開發(fā)加薪利器之Docker的使用實(shí)踐》,本文關(guān)鍵詞  Python,開發(fā),加薪,利器,之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python開發(fā)加薪利器之Docker的使用實(shí)踐》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python開發(fā)加薪利器之Docker的使用實(shí)踐的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久精品精品电影网| 污污网站在线免费观看| 丁香花免费高清完整在线播放| 久久99国产精品成人| 成人午夜免费视频| 亚洲精品videosex极品| 欧美日韩的一区二区| 亚洲一区二区黄| 欧美亚洲在线观看| 国产精品手机在线| 97超碰国产精品| 伊人色在线观看| 日本精品久久久久中文| 成年人视频免费| 青草av.久久免费一区| 久久精品亚洲国产奇米99| 日韩欧美在线中文字幕| 日韩电影大片中文字幕| 91精品国产99| 久久久神马电影| av网站在线观看不卡| 亚洲蜜桃精久久久久久久久久久久 | 亚洲av无码乱码国产精品fc2| 日韩国产欧美一区二区三区| 国产欧美日本一区视频| 欧美性xxxxxx少妇| 精品国产美女在线| 亚洲综合自拍一区| 99国产精品白浆在线观看免费| 妖精视频一区二区| 精品综合久久| 免费99视频| 手机看片福利盒子久久| 91禁男男在线观看| 国产美女明星三级做爰| 成人免费av网站| 精品久久久久久| 亚洲欧美成人一区二区在线电影| 国产精品久久久久久av福利软件| 亚洲一区二区三区欧美| 久久发布国产伦子伦精品| 天天操天天射天天爽| 日日摸夜夜添夜夜添国产精品| 国产精品每日更新在线播放网址| 日韩一区二区三区四区五区六区| 午夜精品久久久久久99热| 欧美xxxx黑人又粗又长密月 | 91看片淫黄大片一级在线观看| 色狠狠一区二区| 久久国产一区二区三区| 国产精品免费在线| 亚洲视频在线a| 久久精品视频免费在线观看| 久久精品欧洲| 亚洲精品视频在线观看网站| 日韩国产高清视频在线| 国产剧情日韩欧美| 国内少妇毛片视频| 欧美成人另类视频| 蜜臀久久精品久久久久| 国产精品女主播在线观看| 精品国产乱码久久久久久图片| 国产成人一区二区在线| 大陆极品少妇内射aaaaaa| 国产免费看av| 午夜精品小视频| 国产精品美女视频| 精品中文视频在线| 91精品国产一区二区三区动漫| 国产精品免费成人| 免费无码毛片一区二区app| 青娱乐精品视频在线| 亚洲成人免费视| 日韩专区在线播放| 欧美另类网站| 95视频在线观看| 在线免费一级片| 久久久精品欧美丰满| 精品久久人人做人人爱| 国产欧美日韩最新| 色诱视频在线观看| 97人人澡人人爽人人模亚洲| 国产精品亚洲午夜一区二区三区 | 欧美日韩在线直播| 欧美在线视频导航| 激情小视频网站| 精品国产视频在线观看| 美日韩一区二区| 日韩欧美成人区| 午夜精品久久久久久久99热浪潮| 国产免费xxx| 日本欧美一区二区三区不卡视频| 婷婷丁香一区二区三区| 亚洲成人福利片| 欧美老肥婆性猛交视频| 久久久成人精品一区二区三区 | 人妻av无码一区二区三区| 亚洲毛片欧洲毛片国产一品色| 专区另类欧美日韩| 日韩中文字幕网| 亚洲一区二区三区色| 久久久久久国产免费a片| 日韩黄色免费电影| 91久久一区二区| 日韩av免费在线观看| 国产免费毛卡片| 国产午夜免费福利| 久久久久久久免费视频了| 日韩精品在线视频观看| 精品一区二区不卡| 黑丝av在线播放| 亚洲av成人精品一区二区三区在线播放 | 国产精品欧美综合亚洲| 最新成人av在线| 久久久成人的性感天堂| 国产精品12p| 精品99久久久久成人网站免费| 国产99久久精品| 欧美精品一区二区三区蜜桃视频| 风间由美一区二区三区| yjizz视频| 五月婷在线视频| 色94色欧美sute亚洲线路一ni| 国产成人精品久久| 日本xxxx黄色| 国模大尺度视频| 国内自拍第二页| h狠狠躁死你h高h| 亚洲3atv精品一区二区三区| 97国产精品视频人人做人人爱| 亚洲熟妇无码一区二区三区导航| 国产福利拍拍拍| 国产丝袜美腿一区二区三区| 在线激情影院一区| 久久99国产精品一区| 久久免费小视频| 91麻豆国产精品久久| 国产亚洲人成a一在线v站| 亚洲午夜久久久影院伊人| 欧美黑人性猛交xxx| av成人免费在线| 亚洲图中文字幕| 91制片厂免费观看| 日本一二三区不卡| 国产精品女同一区二区三区| 欧美高清激情视频| 99久久久无码国产精品6| 最近中文字幕在线免费观看| 亚洲精品五月天| 91av在线免费观看视频| 亚洲欧美自拍另类日韩| 成人精品在线播放| 欧美午夜在线一二页| aaa级精品久久久国产片| 成人免费看aa片| 国产美女精品人人做人人爽| 日韩av中文字幕在线| 亚洲欧美日韩精品综合在线观看| 免看一级a毛片一片成人不卡| 国产亚洲成aⅴ人片在线观看| 久久天天躁夜夜躁狠狠躁2022| 男女视频网站在线观看| 成人黄色免费网| 性做久久久久久免费观看欧美| 国产精品毛片a∨一区二区三区|国 | 免费一级淫片aaa片毛片a级| 国产女主播喷水视频在线观看| 一区二区三区在线观看网站| 日韩av大片在线| 黑人无套内谢中国美女| 免费精品视频在线| 亚洲精品第一国产综合精品| 婷婷视频在线播放| 欧美一级特黄视频| 亚洲狠狠爱一区二区三区| 国产精品专区一| 国产中文字幕一区二区| 国产白丝精品91爽爽久久 | 亚洲欧美激情四射在线日| 青青在线视频免费观看| 在线免费观看一区二区| 在线免费av一区| 久久精品国产美女| 久久精品国产亚洲AV无码男同| 亚洲人成网站精品片在线观看| 国产精品国产三级国产专播精品人| 亚洲色图欧美另类| 国产精品一区免费在线观看| 尤物yw午夜国产精品视频明星| 欧美午夜小视频| 精品国产免费无码久久久| 在线成人午夜影院| 亚洲精品欧美精品| 欧美国产成人精品一区二区三区| 性做久久久久久久久| 国产精品国产精品国产专区蜜臀ah| 中文字幕无码日韩专区免费| 国产精品乱码妇女bbbb| 国产精品流白浆视频| 免费毛片视频网站| 久久免费美女视频| 热久久这里只有| 五月婷婷综合在线观看| 波波电影院一区二区三区| 久久精品成人欧美大片| 精品久久久99| 国产综合久久久久久鬼色| www国产精品视频| 欧美成人福利在线观看| 韩国v欧美v日本v亚洲v| www.亚洲免费视频| 亚洲精品成人在线播放| 激情久久久久久久久久久久久久久久| 中文字幕久热精品在线视频| 在线视频日韩一区| 久久国产麻豆精品| 日韩视频免费在线| 午夜av中文字幕| 国产成人精品影院| 欧美国产日韩视频| 在线xxxxx| 91蜜桃视频在线| 国产a级全部精品| 中文字幕欧美激情极品| 国产精品家庭影院| 成人欧美在线观看| 久久99久久久| 欧美三级欧美成人高清www| 欧美裸体网站| 国产精品高清无码| 欧美一区二区三区视频免费| 丰满人妻一区二区三区53号| 人妻视频一区二区三区| 亚洲视频免费一区| 久久久精品高清| 成人综合激情网| 欧美一级片免费在线| 天天干天天舔天天操| 亚洲男人天堂一区| 精品一区日韩成人| 97人妻精品视频一区| 日韩精品中文字幕一区| 亚洲国产精品久久久久婷蜜芽| 免费观看久久久4p| 久精品免费视频| 国产吞精囗交久久久| 亚洲欧美中日韩| 国产精品日韩高清| 无码人妻久久一区二区三区| 91精品国产91久久综合桃花| 成年人网站免费视频| 欧美aaaaaa午夜精品| 欧美日产国产成人免费图片| 国产亚洲色婷婷久久99精品91| 国产精品久久久久四虎| 国产精品9999久久久久仙踪林| 男人天堂2024| 欧美成人乱码一区二区三区| 黄色一级大片在线观看| 懂色av中文字幕一区二区三区| 国产成人拍精品视频午夜网站| 精品一区在线观看视频| 欧美综合欧美视频| 久久综合久久网| 国产在线视频一区二区三区| 久久久久久美女| 337人体粉嫩噜噜噜| 欧美日韩一区二区在线| 91九色国产ts另类人妖| 日韩中文字幕亚洲一区二区va在线| 欧美伦理91i| 亚洲综合欧美综合| 天天av天天翘天天综合网色鬼国产| 亚洲一区二区精品在线观看| 丝袜国产日韩另类美女| 久久久噜噜噜久久久| chinese全程对白| 欧美性受xxxx| 国产中文字幕免费观看| 成人免费毛片app| 91精品中文在线| 91视频久久久| 精品亚洲一区二区三区在线播放 | 一本一本久久a久久| 日韩欧美a级成人黄色| 久久久久久久香蕉| 国产精品一区二区在线播放| 国产精品久久久999| 男人午夜免费视频| 亚洲成年人在线播放| 国产资源中文字幕| 亚洲婷婷在线视频| 亚洲最大色综合成人av| 免费成人美女在线观看.| 欧美一二三视频| 国产精品500部| 亚洲国产精品字幕| 精品人妻在线视频| 亚洲制服丝袜av| 先锋影音男人资源| 国产一区二区三区四区五区美女| 国产精品亚发布| 亚洲高清视频免费观看| 一本色道久久88精品综合| 人妻丰满熟妇av无码久久洗澡 | 国产手机精品在线| 精品区在线观看| 欧美黑人性生活视频| 亚洲波多野结衣| 91麻豆精品久久久久蜜臀| 五月婷婷之婷婷| 最新国产成人在线观看| 7777在线视频| 国产.欧美.日韩| 91丨九色丨国产| 国产高清不卡视频| 欧美极品在线播放| 日本在线视频免费观看| 亚洲精品国产精品乱码不99按摩| 欧类av怡春院| 一本大道久久精品懂色aⅴ| 日韩免费毛片视频| 欧美国产视频在线| 亚洲免费久久| 国产乱妇无码大片在线观看| 91热福利电影| 亚洲爆乳无码一区二区三区| 国语对白做受69| 日韩在线观看第一页| 亚洲视频专区在线| 国产黄色片在线| 日韩欧美一区中文| 精品无码人妻少妇久久久久久| 天天色综合天天| 免费观看成人在线视频| 综合网在线视频| 黄色一级片黄色| 久久久不卡网国产精品二区| 亚洲韩国在线| 国产99精品在线观看| 欧美成人dvd在线视频| 老司机精品视频在线| 99久久久精品免费观看国产| 亚洲三级中文字幕| 国产日韩欧美一二三区| 国产日韩在线观看一区| 97视频com| 正在播放木下凛凛xv99| 欧美黑人xxxx| 无码人妻精品一区二区蜜桃色欲| 久久国产精品亚洲| 精品成人久久久| 日韩在线视频免费观看| 久久久精品99| 欲色天天网综合久久| 免费一级全黄少妇性色生活片| 亚洲欧美中文日韩在线| 91视频青青草| 亚洲乱码国产乱码精品精| 看黄色录像一级片| 精品香蕉在线观看视频一| 99精品中文字幕| 日韩极品精品视频免费观看| 成人欧美一区二区三区黑人一| 亚洲激情小视频| 乱老熟女一区二区三区| 亚洲美女视频网站| 青青草手机视频在线观看| 亚洲新中文字幕| 久久国产精品二区| 色偷偷88888欧美精品久久久| 国产无码精品在线观看| 色悠悠久久88| 在线观看国产亚洲| 欧美精品午夜视频| 色老头在线视频| 国内精品久久久| 波多野结衣视频在线观看| 韩国精品久久久999| 国产精品久久久久久免费播放| 欧洲成人在线观看| 亚洲精品字幕在线| 91亚洲永久免费精品| 蜜臀av一区二区| 欧美激情视频一区二区三区| 成人精品高清在线| 三级网在线观看| 中文字幕av不卡| 黄色片久久久久| 精品人伦一区二区三区蜜桃网站| 欧美激情第四页| 7777精品久久久大香线蕉| 免费在线观看a视频| 亚洲香蕉在线观看| 毛片基地在线观看| 456国产精品| 亚洲精品视频91| 5566中文字幕一区二区| 久久超碰97中文字幕| 色99中文字幕| 欧美激情一区二区| 国产一级片黄色| 色天天综合色天天久久| 少妇一级淫片免费放播放| 精品国产污污免费网站入口 | 日韩欧美高清一区| 日韩一级片大全| 蜜臀久久99精品久久久久久宅男| 亚洲一区二区人妻| 成人黄色大片在线免费观看|