網(wǎng)站首頁 編程語言 正文
Docker一次封裝,到處運行
●Docker是一個開源的應(yīng)用容器引擎,基于go語言開發(fā)并遵循了apache2.0協(xié)議開源
●是在Linux容器里運行應(yīng)用的開源工具
●是一種輕量級的“虛擬機(jī)”
●Docker的容器技術(shù)可以在一臺主機(jī)上輕松為任何應(yīng)用創(chuàng)建一個輕量級的、可移植的、自給自足的容器。
Docker與虛擬機(jī)的區(qū)別
特性 | Docker容器 | 虛擬機(jī) |
---|---|---|
啟動速度 | 秒級 | 分鐘級 |
計算能力損耗 | 幾乎無 | 損耗50%左右 |
性能 | 接近原生 | 弱于 |
系統(tǒng)支持量(單機(jī)) | 上千個 | 幾十個 |
隔離性 | 資源隔離/限制 | 完全隔離 |
Linux 的namespace (命名空間)
namespace 的六項隔離
namespace | 系統(tǒng)調(diào)用參數(shù) | 隔離內(nèi)容 |
---|---|---|
UTS | CLONE_NEWUTS | 主機(jī)名和域名 |
IPC | CLONE_NEWWIPS | 信號量,消息隊列和共享內(nèi)存 |
PID | CLONE_NEWPID | 進(jìn)程編號 |
NETWORK | CLONE_NEWNET | 網(wǎng)絡(luò)設(shè)備,網(wǎng)絡(luò)棧,端口等 |
MOUNT | CLONE_NEWNS | 掛載點(文件系統(tǒng)) |
USER | CLONE_NEWUSER | 用戶和用戶組(3.8以后的內(nèi)核才支持) |
Docker運行流程
Docker的使用場景
●打包應(yīng)用程序簡化部署
●可脫離底層硬件任意遷移
例:服務(wù)器從騰訊云遷移到阿里云
Docker的核心概念
①鏡像 一個面向Docker容器引擎的只讀模板
②容器 從鏡像創(chuàng)建的運行實例
③倉庫 集中保留鏡像的地方
倉庫分為 公有倉庫:Docker官方倉庫 私有倉庫:個人化、私有化的倉庫
總結(jié):Docker是容器管理工具,容器由鏡像創(chuàng)建而來,鏡像從倉庫中獲取而來,倉庫分為公有、私有。
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,并啟動,同時設(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ù)存儲位置
"storage-driver":"overlay2", #存儲引擎,docker1.18以上版本默認(rèn)使用overlay2存儲引擎。早期的適合存儲引擎使用的aufs
"insecure-registries":["registry.access.redhat.com","quary.io"], #私有倉庫
#registry-mirrors 以下添加
"bip":"172.184.70.1/24", #docker網(wǎng)絡(luò)
"exec-opts":["native.cgroupdriver-systemd"], #啟動時的額外參數(shù),(是一種掛在驅(qū)動,k8s使用)
"live-restore":true #當(dāng)docker容器引擎掛掉的時候,使用docker跑起來的容器還能繼續(xù)運行
}
[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 ? #正在運行的數(shù)量
Paused: 0 ? #暫停的數(shù)量
Stopped: 0 #停止的數(shù)量
Images: 0 #鏡像的數(shù)量
Server Version: 20.10.17 ? #服務(wù)端版本號
Storage Driver: overlay2 ? #文件類型的驅(qū)動引擎
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)的信息,因為docker共享系統(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)倉庫地址
Labels:
Experimental: false
Insecure Registries: #指定私有倉庫地址
127.0.0.0/8
Live Restore Enabled: false
docker鏡像與容器基本的基本操作
docker 鏡像操作
●搜索鏡像(公共倉庫)——docker search
默認(rèn)是在公共倉庫找,如果有私有倉庫,會在私有倉庫找
?
#格式:docker search 關(guān)鍵字
#示例:
docker search nginx
?
?
●下載鏡像——docker pull
#格式:docker pull 倉庫名稱[:標(biāo)簽]
#如果下載鏡像時不指定標(biāo)簽,則默認(rèn)會下載倉庫中最新版本的鏡像,即選擇標(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:鏡像屬于的倉庫;
TAG:鏡像的標(biāo)簽信息,標(biāo)記同一個倉庫中的不同鏡像;
IMAGE ID:鏡像的唯一ID 號,唯一標(biāo)識一個鏡像,經(jīng)過md5方式加密過;
CREATED:鏡像創(chuàng)建時間;
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的簡寫
#格式:
docker rmi 倉庫名稱:標(biāo)簽 #當(dāng)一個鏡像有多個標(biāo)簽時,只是刪除其中指定的標(biāo)簽
docker rmi 鏡像ID號 ? #會徹底刪除該鏡像
?
?
●批量刪除鏡像
#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 存儲文件名 存儲的鏡像
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容器操作
●查詢所有容器運行狀態(tài)——docker ps -a
docker ps -a
?
CONTAINER ID ? IMAGE ? COMMAND ? CREATED ? STATUS ? PORTS ? NAMES
?
容器的ID號 加載的鏡像 ? 運行的程序 創(chuàng)建時間 當(dāng)前的狀態(tài) 端口映射 ? 名稱
?
?
●創(chuàng)建容器——docker create
新創(chuàng)建的容器默認(rèn)處于停止?fàn)顟B(tài),不運行任何程序,需要在其中發(fā)起一個進(jìn)程來啟動容器。
?
#格式:docker create [選項] 鏡像
#常用選項:
-i:讓容器的輸入保持打開
-t:讓 Docker 分配一個偽終端
?
#示例:
docker create -it nginx:latest /bin/bash
?
?
●啟動容器——docker start
#格式:docker start 容器的ID/名稱
docker start b2a57b3ea48a
docker ps -a
?
?
啟動容器(一次性執(zhí)行)—— docker run
#加 -d 選項讓 Docker 容器以守護(hù)形式在后臺運行。并且容器所運行的程序不能結(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"
?
?
●終止容器運行
格式: docker ? stop/kill ? 容器ID/名稱
?
stop: 停止容器,可以給容器一個等待時間,以防止數(shù)據(jù)的丟失。
?
kill: 立即強行停止一個容器(相當(dāng)于linux命令 kill -9) ,不會給容器反應(yīng)時間,可能會造成數(shù)據(jù)丟失
?
●進(jìn)入容器
需要進(jìn)入容器進(jìn)行命令操作時,可以使用 docker exec 命令進(jìn)入運行著的容器。
?
格式:docker exec -it 容器ID/名稱 /bin/bash
-i 選項表示讓容器的輸入保持打開;
-t 選項表示讓 Docker 分配一個偽終端。
docker start 2592d3fad0fb ? #進(jìn)入容器前,確保容器正在運行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit ? #退出容器后,容器仍在運行
docker ps -a
?
●從宿主機(jī)上將文件導(dǎo)入到容器中
docker ps -a ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #先獲取需要導(dǎo)入到的容器ID,然后重新開一個終端
另一個終端上操作
echo "wmc" >> cc.txt ? ? ? ? ? ? ? ? ? #創(chuàng)建測試文件
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)入后會生成鏡像,但不會創(chuàng)建容器
?
●刪除容器
格式:docker rm [-f] 容器ID/名稱
docker stop 2592d3fad0fb
docker rm 2592d3fad0fb #刪除已經(jīng)終止?fàn)顟B(tài)的容器
docker rm -f 2592d3fad0fb ? #強制刪除正在運行的容器
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
- 上一篇:Docker的資源控制管理
- 下一篇:Zookeeper集群 + Kafka集群
相關(guān)推薦
- 2023-03-19 教你如何實現(xiàn)在react項目中嵌入Blazor_React
- 2022-03-18 .NET?6開發(fā)TodoList應(yīng)用之實現(xiàn)全局異常處理_實用技巧
- 2023-07-28 async await 寫法
- 2022-06-17 教你Docker安裝GitLab功能_docker
- 2023-06-18 C#?整數(shù)轉(zhuǎn)二進(jìn)制字符串方式_C#教程
- 2022-09-02 C++中protobuf?的交叉編譯使用詳解_C 語言
- 2022-10-11 線上nginx偶爾出現(xiàn)502錯誤
- 2023-10-16 el-popover在原生table中,彈出多個以及內(nèi)部取消按鈕無效問題
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支