日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

docker基本概念及安裝

作者:wmc995620 更新時(shí)間: 2022-07-13 編程語言

Docker一次封裝,到處運(yùn)行

●Docker是一個(gè)開源的應(yīng)用容器引擎,基于go語言開發(fā)并遵循了apache2.0協(xié)議開源

●是在Linux容器里運(yùn)行應(yīng)用的開源工具

●是一種輕量級(jí)的“虛擬機(jī)”

●Docker的容器技術(shù)可以在一臺(tái)主機(jī)上輕松為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。

Docker與虛擬機(jī)的區(qū)別

特性 Docker容器 虛擬機(jī)
啟動(dòng)速度 秒級(jí) 分鐘級(jí)
計(jì)算能力損耗 幾乎無 損耗50%左右
性能 接近原生 弱于
系統(tǒng)支持量(單機(jī)) 上千個(gè) 幾十個(gè)
隔離性 資源隔離/限制 完全隔離

Linux 的namespace (命名空間)

namespace 的六項(xiàng)隔離

namespace 系統(tǒng)調(diào)用參數(shù) 隔離內(nèi)容
UTS CLONE_NEWUTS 主機(jī)名和域名
IPC CLONE_NEWWIPS 信號(hào)量,消息隊(duì)列和共享內(nèi)存
PID CLONE_NEWPID 進(jìn)程編號(hào)
NETWORK CLONE_NEWNET 網(wǎng)絡(luò)設(shè)備,網(wǎng)絡(luò)棧,端口等
MOUNT CLONE_NEWNS 掛載點(diǎn)(文件系統(tǒng))
USER CLONE_NEWUSER 用戶和用戶組(3.8以后的內(nèi)核才支持)

Docker運(yùn)行流程

在這里插入圖片描述

Docker的使用場(chǎng)景

●打包應(yīng)用程序簡(jiǎn)化部署

●可脫離底層硬件任意遷移

例:服務(wù)器從騰訊云遷移到阿里云

Docker的核心概念

①鏡像 一個(gè)面向Docker容器引擎的只讀模板

②容器 從鏡像創(chuàng)建的運(yùn)行實(shí)例

③倉(cāng)庫(kù) 集中保留鏡像的地方

倉(cāng)庫(kù)分為 公有倉(cāng)庫(kù):Docker官方倉(cāng)庫(kù) 私有倉(cāng)庫(kù):個(gè)人化、私有化的倉(cāng)庫(kù)

總結(jié):Docker是容器管理工具,容器由鏡像創(chuàng)建而來,鏡像從倉(cāng)庫(kù)中獲取而來,倉(cāng)庫(kù)分為公有、私有。

Docker安裝

#關(guān)閉防火墻
systemctl stop firewalld.service
setenforce 0
?
yum install -y yum-utils device-mapper-persistent-data lvm2
?
#配置阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
?
#安裝Docker-CE,并啟動(dòng),同時(shí)設(shè)置為開機(jī)自啟
yum -y install docker-ce
systemctl enable --now docker.service 
?
#查看docker的版本信息
docker version
?
#查看當(dāng)前docker的詳細(xì)信息
docker info
?
?
#鏡像加速
通過修改daemon配置文件/etc/docker/daemon.json來使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hgfiuss0.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
?
?
?
##為什么要開啟路由轉(zhuǎn)發(fā)功能?
開啟路由轉(zhuǎn)發(fā) 是讓docker0能根據(jù)虛擬機(jī)ip為自己所有的docker容器分配虛擬ip
vim /etc/sysctl.conf
net.ipv4.ip_forward=1  #開啟路由轉(zhuǎn)發(fā)
?
sysctl -p
systemctl restart network
systemctl restart docker
?
?
###docker-server端配置文件建議配置
#在daemon. json文件中配置
{
  "graph":"/data/docker",       #數(shù)據(jù)目錄,數(shù)據(jù)存儲(chǔ)位置
  "storage-driver":"overlay2",  #存儲(chǔ)引擎,docker1.18以上版本默認(rèn)使用overlay2存儲(chǔ)引擎。早期的適合存儲(chǔ)引擎使用的aufs
  "insecure-registries":["registry.access.redhat.com","quary.io"],  #私有倉(cāng)庫(kù)
#registry-mirrors 以下添加
  "bip":"172.184.70.1/24",      #docker網(wǎng)絡(luò)
  "exec-opts":["native.cgroupdriver-systemd"],  #啟動(dòng)時(shí)的額外參數(shù),(是一種掛在驅(qū)動(dòng),k8s使用)
  "live-restore":true   #當(dāng)docker容器引擎掛掉的時(shí)候,使用docker跑起來的容器還能繼續(xù)運(yùn)行
}
[root@localhost yum.repos.d]# docker info
Client:
 Context: ?  default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)
?
Server:
 Containers: 0 ?  #有多少容器
  Running: 0 ?  #正在運(yùn)行的數(shù)量
  Paused: 0 ? #暫停的數(shù)量
  Stopped: 0  #停止的數(shù)量
 Images: 0  #鏡像的數(shù)量
 Server Version: 20.10.17 ? #服務(wù)端版本號(hào)
 Storage Driver: overlay2 ? #文件類型的驅(qū)動(dòng)引擎
  Backing Filesystem: xfs ? #文件系統(tǒng)類型
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs ? #Cgroup引擎類型
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc version: v1.1.2-0-ga916309
 init version: de40ad0
 Security Options:
  seccomp
 ? Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64 ? #當(dāng)前系統(tǒng)的內(nèi)核版本
 #以下是當(dāng)前系統(tǒng)的信息,因?yàn)閐ocker共享系統(tǒng)配置
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.781GiB
 Name: localhost.localdomain ? 
 ID: LQWK:2C26:54YI:XEIW:XZP3:Q44T:LB3J:3PAC:LKE3:HMNW:YE3Q:7FIN
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/  #默認(rèn)倉(cāng)庫(kù)地址
 Labels:
 Experimental: false
 Insecure Registries: #指定私有倉(cāng)庫(kù)地址
  127.0.0.0/8
 Live Restore Enabled: false
 

docker鏡像與容器基本的基本操作

docker 鏡像操作

●搜索鏡像(公共倉(cāng)庫(kù))——docker search
默認(rèn)是在公共倉(cāng)庫(kù)找,如果有私有倉(cāng)庫(kù),會(huì)在私有倉(cāng)庫(kù)找
?
#格式:docker search 關(guān)鍵字
#示例: 
docker search nginx 
?
?
●下載鏡像——docker pull
#格式:docker pull 倉(cāng)庫(kù)名稱[:標(biāo)簽]
#如果下載鏡像時(shí)不指定標(biāo)簽,則默認(rèn)會(huì)下載倉(cāng)庫(kù)中最新版本的鏡像,即選擇標(biāo)簽為 latest 標(biāo)簽。
docker pull centos:7
docker pull nginx
?
?
?
●查看鏡像——docker images
#查看下載到本地的所有鏡像
docker images
?
REPOSITORY ? TAG ? ? ? IMAGE ID ? ? ? CREATED ? ? ?  SIZE
nginx ? ? ?  latest ?  55f4b40fe486 ? 27 hours ago ? 142MB
--------------------------------------------------------------------
REPOSITORY:鏡像屬于的倉(cāng)庫(kù);
TAG:鏡像的標(biāo)簽信息,標(biāo)記同一個(gè)倉(cāng)庫(kù)中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號(hào),唯一標(biāo)識(shí)一個(gè)鏡像,經(jīng)過md5方式加密過;
CREATED:鏡像創(chuàng)建時(shí)間;
VIRTUAL SIZE:鏡像大小;
?
?
●獲取鏡像信息——docker inspect
#格式:docker inspect  鏡像ID
#示例:查看nginx鏡像信息
docker insect 605c77e624dd
?
?
●添加鏡像標(biāo)簽——docker tag
#格式:docker tag 名稱:[舊標(biāo)簽] 新名稱:[新標(biāo)簽]
#示例:
docker tag nginx:latest nginx:lnmp  #給nginx打上標(biāo)簽lnmp,原來的標(biāo)簽是latest
?
?
●刪除鏡像——docker rmi
docker rmi是docker rm image的簡(jiǎn)寫
#格式:
docker rmi 倉(cāng)庫(kù)名稱:標(biāo)簽   #當(dāng)一個(gè)鏡像有多個(gè)標(biāo)簽時(shí),只是刪除其中指定的標(biāo)簽
docker rmi 鏡像ID號(hào)     ? #會(huì)徹底刪除該鏡像
?
?
●批量刪除鏡像
#docker images -q 可以加載鏡像id
#批量刪除所有鏡像
docker rmi `docker images -q`
#批量刪除nginx鏡像
docker rmi `docker images|grep "nginx"`
?
?
●導(dǎo)出/導(dǎo)入鏡像——docker save/load
#導(dǎo)出鏡像
#格式:docker save -o 存儲(chǔ)文件名 存儲(chǔ)的鏡像
docker save -o nginx_v1 nginx:latest ? #存出鏡像命名為nginx存在當(dāng)前目錄下
scp nginx_v1 @root:192.168.59.111:/opt ? #將導(dǎo)出的鏡像以scp方式導(dǎo)到別的服務(wù)器上
?
#導(dǎo)入鏡像,可以異地導(dǎo)入,但是必須要有docker引擎,并且版本不可以差太多
#格式:docker load < 存出的文件
 ? ?  docker load -i 存出的文件
docker load < nginx_v1

docker容器操作

●查詢所有容器運(yùn)行狀態(tài)——docker ps -a
docker ps -a
?
CONTAINER ID ? IMAGE ? COMMAND ? CREATED ? STATUS ?  PORTS ?  NAMES
?
容器的ID號(hào)   加載的鏡像 ? 運(yùn)行的程序  創(chuàng)建時(shí)間  當(dāng)前的狀態(tài)  端口映射 ? 名稱
?
?
●創(chuàng)建容器——docker create
新創(chuàng)建的容器默認(rèn)處于停止?fàn)顟B(tài),不運(yùn)行任何程序,需要在其中發(fā)起一個(gè)進(jìn)程來啟動(dòng)容器。
?
#格式:docker create [選項(xiàng)] 鏡像
#常用選項(xiàng):
-i:讓容器的輸入保持打開
-t:讓 Docker 分配一個(gè)偽終端
?
#示例:
docker create -it nginx:latest /bin/bash
?
?
●啟動(dòng)容器——docker start
#格式:docker start 容器的ID/名稱
docker start b2a57b3ea48a
docker ps -a
?
?
啟動(dòng)容器(一次性執(zhí)行)—— docker run
#加 -d 選項(xiàng)讓 Docker 容器以守護(hù)形式在后臺(tái)運(yùn)行。并且容器所運(yùn)行的程序不能結(jié)束。
?
#示例1:
docker run -itd nginx:latest /bin/bash
?
#示例2:執(zhí)行后退出
docker run centos:7 /usr/local/bash -c ls / ? 
?
#示例3:執(zhí)行后不退出,以守護(hù)進(jìn)程方式執(zhí)行持續(xù)性任務(wù)
docker run -d centos:7 /usr/local/bash -c "while true;do echo hello;done" 
?
?
●終止容器運(yùn)行
格式: docker ? stop/kill ? 容器ID/名稱
?
stop: 停止容器,可以給容器一個(gè)等待時(shí)間,以防止數(shù)據(jù)的丟失。
?
kill: 立即強(qiáng)行停止一個(gè)容器(相當(dāng)于linux命令 kill -9) ,不會(huì)給容器反應(yīng)時(shí)間,可能會(huì)造成數(shù)據(jù)丟失
?
●進(jìn)入容器
需要進(jìn)入容器進(jìn)行命令操作時(shí),可以使用 docker exec 命令進(jìn)入運(yùn)行著的容器。
?
格式:docker exec -it 容器ID/名稱 /bin/bash
-i 選項(xiàng)表示讓容器的輸入保持打開;
-t 選項(xiàng)表示讓 Docker 分配一個(gè)偽終端。
 
docker start 2592d3fad0fb ? #進(jìn)入容器前,確保容器正在運(yùn)行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit ?  #退出容器后,容器仍在運(yùn)行
docker ps -a
?
●從宿主機(jī)上將文件導(dǎo)入到容器中
docker ps -a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #先獲取需要導(dǎo)入到的容器ID,然后重新開一個(gè)終端
 
另一個(gè)終端上操作
echo "wmc" >> cc.txt ? ? ? ? ? ? ? ? ? #創(chuàng)建測(cè)試文件
docker cp 123.txt cef59022a4dd:/opt 
?
●容器的導(dǎo)出與導(dǎo)入
#導(dǎo)出格式:docker export 容器ID/名稱 > 文件名
docker export 2592d3fad0fb > centos7.tar
 
#導(dǎo)入格式:cat 文件名 | docker import – 鏡像名稱:標(biāo)簽
cat centos7.tar | docker import - centos7:test  #導(dǎo)入后會(huì)生成鏡像,但不會(huì)創(chuàng)建容器
?
●刪除容器
格式:docker rm [-f] 容器ID/名稱
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb  #刪除已經(jīng)終止?fàn)顟B(tài)的容器
 
docker rm -f 2592d3fad0fb ? #強(qiáng)制刪除正在運(yùn)行的容器
 
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash ?  #批量停止容器
 
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash  #批量刪除所有容器
 
docker images | awk 'NR>=2{print "docker rmi "$3}' | bash ?  #批量刪除鏡像

原文鏈接:https://blog.csdn.net/wmc995620/article/details/125385589

欄目分類
最近更新