docker 的初步认识,安装,基本操作

docker相关知识

docker的相关概念

docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低

docker的宿主机是linux系统,集装箱可以理解为相互隔离的容器(组件,应用APP),每个容器都是一个独立的应用程序。

docker的设计宗旨

build,ship and run any app, anywhere

build:封装好的程序,只需要部署即可使用。一次封装。

ship and run any app:一次封装完成之后的程序,可以在任何环境运行。

anywhere:任意宿主机。

一次封装到处运行。

封装,发布,部署,运行,维护,运行,销毁。

可以一整套的方式管理应用程序的生命周期。

docker为什么受欢迎(优点)

  • 灵活,再复杂的程序,应用也可以实现容器化
  • 轻量级,小型的,不完整的,最小化封装的程序,与宿主机共享一个内核
  • 可互换:可以随时的升级,更新。
  • 便携式:本地可以构建,在云平台上也可以实现部署。在任何地方运行
  • 可扩展:自动分发容器副本
  • 可堆叠:在一个宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器。

linux 的命令空间 namespace。是一个内核特性。允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源

namespace的六项隔离措施

1.UTS(命名空间),系统调用参数:CLONE_NEWUTS。

隔离内容:主机与域名。在UTS这个命名空间当中创建进程,进程可以看到自己的主机名和域名,与其他进程分隔开。

2.IPC:系统调用参数:CLONE_NEWIPC。

隔离内容:信号量,消息队列,共享内存。在IPC这个命名空间之中,进程可以拥有一个独立的进程间通信资源

3.PID:系统调用参数:CLONE_NEWPID。

隔离内容:每个进程都有自己独立的进程号空间。

4.network:系统调用参数:CLONE_NEWNET。

隔离内容:网络设备,网络栈,以及端口。每个进程都有一个自己独立的网络资源。靠端口号区分。

5.mount:系统调用的参数:CLONE_NEWNS,

隔离内容:挂载点,在mount这个命名空间之中,每个进程或者设备都有自己的文件系统挂载点,相互之间互不干扰。

6.user:系统调用参数:CLONE_NEWUSER。隔离不同的用户和用户组

基于以上6个隔离项,实现了容器和容器之间,以及容器和宿主机之间的资源隔离

docker的核心组件

镜像:

docker的基础,最小单位。类似于虚拟机的ISO文件,一个镜像就是一个可执行的包,包里面包含了运行这个程序的所有内容(代码,配置文件,环境变量。)

docker镜像也是一个压缩包。不是一个解压的文件,是一个环境部署的脚本,甚至包含了完整的操作系统。

容器:

docker的容器就是镜像运行起来的实例,可以启动,还可以停止,删除。每一个容器都是相互隔离的,互不可见。

仓库:

保存镜像,所有的镜像都是从仓库当中拉取的。可以有公用仓库,还可以是私有仓库。镜像都是从仓库中拉取,镜像也保存在仓库当中。

下载到了本地:镜像 容器 日志 /var/lib/docker 宿主机。

docker与虚拟机之间的区别:

特性 docker 虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗50%
性能接近于原生系统弱于原生系统
系统支持量上千个硬件系统来看(几十个)
隔离性资源隔离完全隔离
安全性安全性差安全性高

docker的部署安装

安装docker相关依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2yum-utils:
yum-config-amnager 工具,可以远程自定义获取yum源device-mapper-persistent-data lvm2
device-mapper:是Linux内核中支持逻辑卷管理的通用设备映射机制,
它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce docker-ce-cli containerd.iodocker-ce(Docker Community Edition):这是 Docker 的社区版。
Docker 社区版是免费的,面向开发者、小型团队和个人使用。它包含了 Docker Engine,
这是一个用于构建和运行容器的开源容器运行时。docker-ce-cli(Docker Command Line Interface):这是 Docker 的命令行工具,
它允许用户与 Docker Engine 交互,执行容器相关的操作。
通过 Docker CLI,用户可以构建、运行、管理和发布容器。containerd.io:它负责管理容器的生命周期,包括容器的创建、运行、暂停、继续和销毁等。systemctl start docker.service
systemctl enable docker.service 
#查看 docker 版本信息
docker version

docker 信息查看
docker infocontainers--容器
running--正在运行的容器
overlay2--docker使用的文件系统驱动overkayFS--overlay file system:联合文件系统。用于适配宿主机的文件系统,可以自动适配lowerDir:底层目录UppDir:可写层MergeDir:合并目录workDir:工作目录  

如何对docker的镜像进行操作

搜索镜像

格式:docker search 关键字
docker search nginxNAME: 列出了 Docker 镜像的名称,这里是 "nginx"。DESCRIPTION: 显示了关于该镜像的简要描述。在这里,是 Nginx 的官方构建。STARS: 显示了该镜像在 Docker Hub 上的星级评价。在这里,有 19311 颗星表示该镜像相当受欢迎。OFFICIAL: 指示该镜像是否是官方构建。在这里,"[OK]" 表示它是官方构建。AUTOMATED: 显示了该镜像是否是自动化构建的。在这里没有显示具体的信息。

获取镜像

格式:docker pull 镜像名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx

如果速度很慢,可以使用阿里云镜像加速

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://mmu1fvmv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看下载到本地的所有镜像
docker images

REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

指定版本号下载,后面跟上冒号,可以指定版本

注意,如果本地已有,则不会拉取镜像

查看镜像详细信息

根据镜像的唯一标识 ID 号或者镜像名称,获取镜像详细信息
格式:docker inspect 镜像ID号
docker inspect ae2feff98a0c

接下来介绍一些重要参数

OverlayFS(Overlay File System)是一种联合文件系统,常用于 Docker 等容器技术中。
它允许将多个文件系统层叠在一起,以创建一个统一的文件系统视图。
在 OverlayFS 中,有几个重要的概念:LowerDir、UpperDir、MergedDir 和 WorkDir。
 

  • lowDir:底层目录,docker的底层文件系统。是一个或者多个镜像文件的根文件系统
  • UpperDir:可写层,可以在容器运行时,在容器内进行写操作。实现容器的可写性。
  • MergeDir:合并目录,lowerdir和upperDir合并起来,就是容器的文件系统。用户看到的也就是这个合并的视图。
  • workDir:工作目录,处理文件系统的更改,当在容器内进行写操作时,overlayfs使用workdir来追踪文件系统的变更

为本地的镜像添加新的标签

格式:docker tag 名称:[标签] 新名称:[新标签]

 docker tag centos:latest centos:new

这个操作结果与Linux操作系统的硬连接相似

删除镜像

格式:
docker rmi 仓库名称:标签                #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号                        #会彻底删除该镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
 

注意!!

一个镜像如果有多个标签,删除时,只是删除标签,如果只剩最后一个,那么删除的就是镜像本身。

如果镜像已经被容器使用,先停容器,再删除容器,最后再删除镜像

如何把镜像保存为本地文件

格式:docker save -o 存储文件名 存储的镜像
docker save -o nginx nginx:latest            #存出镜像命名为nginx存在当前目录下

 

docker save -o /opt/nginx.tar nginx:latest  #指定路劲保存docker的镜像。
docker save -o /opt/centos.tar centos:new  #指定路劲保存docker的镜像。ls -lh#载入镜像:将镜像文件导入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件docker load < nginx#上传镜像
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。docker tag centos:7 soscscs/centos:zzr		#添加新的标签时必须在前面加上自己的dockerhub的username
docker login								#登录公共仓库
docker push soscscs/centos:zzr

进入web查看,镜像已经成功上传

基于镜像创建容器

容器创建:就是将镜像加载到容器的过程。
新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入接受用户输入命令
-t:给这个容器分配一个终端,这是一个虚拟的伪终端
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell 

docker ps

查看正在运行的容器

docker -ps-a---查看所有容器(包括未在运行的)

#查看容器的运行状态
docker ps -a			#-a 选项可以显示所有的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
8b0a7be0ff58   nginx:latest   "/docker-entrypoint.…"   57 seconds ago   Created             inspiring_swanson容器的ID号	   加载的镜像     运行的程序               创建时间       当前的状态  端口映射  名称

启动容器

格式:docker start 容器的ID/名称
docker start 8b0a7be0ff58
docker ps -a

如果是up,则正在运行

创建并启动容器
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令/进程共存亡的终端,命令/进程运行容器运行, 命令/进程结束容器退出。

docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,
如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。
 

在后台持续运行 docker run 创建的容器

docker run -itd --name test1 centos:7 /bin/bash   #创建容器并持续运行容器

终止容器运行
格式:docker stop 容器的ID/名称
docker stop 2592d3fad0fb

docker ps 

容器的进入
需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。

格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。docker start 2592d3fad0fb					#进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit				#退出容器后,容器仍在运行
docker ps -a

因为最小化安装,很多命令都没有

exit退出。

容器与本地的复制

复制到容器中


echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/

#从容器复制文件到主机


docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt

#容器的导出与导入


用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

#导出格式:

docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7.tar

docker export -o centos7.tar 2592d3fad0fb

#导入格式:

cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test            #导入后会生成镜像,但不会创建容器

docker import centos7.tar -- centos7:test

导出的容器还是一个镜像,必须要run或者create才能成为容器。

已经配置好的导出容器镜像可以直接使用(我们都是用的开发已经设置,配置好的容器镜像)

docker特性:

即使在创建过程中报错,容器还是会被创建,但是容器不可用。

导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像,tag这一项就会变成none 。

如何批量删除后台停止

docker ps -a查看docker rm $(docker ps -a -q)

批量停止

docker ps -a | awk 'NR>=2{print "docker stop" $1}' | bash

批量删除所有容器

docker ps -a | awk 'NR>=2{PRINT $1}' | xargs docker rm

批量删除none镜像

docker images | grep "none" | awk '{print $3}' | xargs docker rmi -f

总结

docker 是什么?

轻量级的虚拟机,宿主机是linux

docker三大核心组件---镜像,容器,仓库

如何获取镜像

docker search 搜索

docker pull nginx:1.22.0 拉取,获取镜像

docker images 查看镜像

docker rmi -f 强制删除镜像(删除了正在运行的容器的镜像,对容器会有影响吗)

docker tag nginx:1.22.0 (在镜像中已经有的标签) nginx:guoqi(给他新的标签) 相当于硬连接(复制了源镜像)

docker save -o /opt/nginx.tar nginx:1.22.0(这个镜像要已经存在)

先起个名字(一般用xxx.tar)

docker load -i xxx.tar 导入镜像

docker push 用户名 /已有镜像名的标签

docker push pplok1230/nginx:guoqi

容器

docker都是基于镜像创建的

-i

-t

-d

-itd:表示后台运行指定程序,而且创建一个交互式的shell,用户输入操作命令

docker run -itd nginx:1.22.0 --name test1 /bin/bash

如果容器中没有可执行命令,容器创建完成之后将会立刻退出

docker exec -it 容器名/容器id

docker ps 只显示正在运行的容器

docker ps -a 显示所有容器,包括没有运行的容器

docker export test1/id -o guoqi.tar 容器名/容器id

导入:

docker import guoqi.tar --nginx:zzr (尽量不要是重复标签,会出现none)

容器/镜像复制

容器--》本地

docker cp 容器名/容器IP:/etc/nginx/nginx.conf /opt

本地--》容器

docker cp /opt/123.txt 容器名/容器IP:/etc/nginx/nginx.conf

docker rm 删除容器

正在运行的容器

docker rm -f

docker stop

docker rm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初级数据结构(二)——链表

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;一&#xff09;——顺序表 | NULL 下一篇-> 1、链表特征 与顺序表数据连续存放不同&#xff0c;链表中每个数据是分开存放的&#xff0c;而且存放的位置尤其零散&#…

Django回顾 - 6 Ajax

【1】Ajax 定义&#xff1a; 异步Javscript和XML 作用&#xff1a; Javascript语言与服务器(django)进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在更多使用json数据&#xff09; 同步交互和异步交互&#xff1a; 1、同步交互&…

如何解决syntaxerror: more than 255 arguments 报错

如何解决syntaxerror: more than 255 arguments 报错 问题背景解释解决方案 问题背景 今天拼接特征的时候&#xff0c;突然代码报错syntaxerror: more than 255 arguments &#xff0c;看了一下感觉这个报错非常有意思&#xff0c;估计平时也是没机会碰到&#xff0c;和大家分…

用Mnesia为cache增加分布式支持

一&#xff1a;分布式缓存 1.选取通信策略 在设计分布式程序时&#xff0c;可供选择的通信方式主要有两种&#xff1a;异步通信和同步通信。采用异步通信时&#xff0c;发送方无须等待任何确认或应答。而在采用同步通信时&#xff0c;发送方会处于挂起状态&#xff0c;直至收…

Stable Diffusion AI绘画系列【17】:绘本童话风格场景

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&#xff09; 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&…

制作蓝牙小车

制作控制蓝牙小车app 想制作一个蓝牙小车&#xff0c;通过手机app程序操控小车运行&#xff0c;制作分三个部分&#xff08;app制作&#xff0c;蓝牙小车硬件制作&#xff0c;小车程序制作&#xff09;&#xff0c;先完成第一个部分app制作&#xff0c;本次app是通过androidstu…

MongoDB知识总结

这里写自定义目录标题 MongoDB基本介绍MongoDB基本操作数据库相关集合相关增删改查 MongoDB基本介绍 简单介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产…

【Hive】——数据仓库

1.1 数仓概念 数据仓库&#xff08;data warehouse&#xff09;&#xff1a;是一个用于存储&#xff0c;分析&#xff0c;报告的数据系统 目的&#xff1a;是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持 特点&#xff1a; 数据仓库本身不产生任何数据…

Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第一章、传统SSM开发回顾以及问题 Spring SpringMVC Mybatis SSM 实现一个简单功能 员工添加、查询… SSM项目简单实现 项目 需求分析 —>概要设计 —>&#xff08;库表设计&#xff09; —> 详细…

从零开始的c语言日记day40——字符函数和字符串函数——内存函数

常用函数介绍 求字符串长度 strlen 长度不受限制的字符串函数 Strcpy Strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 Strstro strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset Memcmp 使用Asser…

点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改

<div class"videoTree" v-loading"loadingTree" element-loading-text"加载中..." element-loading-spinner"el-icon-loading" element-loading-background"rgba(0, 0, 0, 0.8)" > <el-tree :default-expand-all&q…

鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)

文章目录 一、应用生命周期二、生命周期函数定义三、生命周期五函数练习 一、应用生命周期 1、定义 应用生命周期就是代表了一个HarmonyOS应用中所有页面从创建、开启到销毁等过程的全生命周期。查看路径如下&#xff1a; Project/entry/src/main/ets/entryability/EntryAbili…

17、XSS——session攻击

文章目录 一、session攻击简介二、主要攻击方式2.1 预测2.2 会话劫持2.3 会话固定 一、session攻击简介 session对于web应用是最重要&#xff0c;也是最复杂的。对于web应用程序来说&#xff0c;加强安全性的首要原则就是&#xff1a;不要信任来自客户端的数据&#xff0c;一定…

Spring Boot与Mybatis基础配置(手动写增删改查)

一、 配置 1.新建项目 1.项目基础配置 解释&#xff1a;记得把这个改成start.aliyun.com要不没有java8也就是jdk1.8 2.项目依赖配置 2.配置maven 配置前&#xff1a; 配置后&#xff1a; 3.创建子项目并配置父子项目pom.xml 配置父pom.xml 声明当前项目不是要打成jar包的…

NFC和蓝牙在物联网中有什么意义?如何选择?

#NFC物联网# #蓝牙物联网# 在物联网中&#xff0c;NFC和蓝牙有什么意义&#xff1f; NFC在物联网中代表近场通信技术。它是一种短距离、高频的无线通信技术&#xff0c;可以在近距离内实现设备间的数据传输和识别。NFC技术主要用于移动支付、电子票务、门禁、移动身份识别、防…

利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能

在这篇博客中&#xff0c;我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了&#xff0c;而且依靠互联网来开展他们的日常生活&#xff0c;包括购物、玩游戏、看电…

【python VS vba】(7) python与numpy (建设ing)

目录 1 numpy 的基本介绍 2 numpy里的两种新数据类型&#xff1a;ndarray 和 matrix 2.1 numpy特殊的数据类型 2.1.1 python的数据类型 2.1.2 首先 python原生的list 和 tuple 2.1.3 numpy的数据类型 2.2 np.matrix() 或者 np.mat() 2.2.1 首先&#xff0c;两种写法相…

基于PicGo实现Typora图片自动上传GitHub

文章目录 一. 引言二. 原理三. 配置3.1 GitHub 设置3.2 下载配置 PicGo3.3 配置 Typora3.4 使用 一. 引言 Typora是一款非常好的笔记软件&#xff0c;但是有一个比较不好的地方&#xff1a;默认图片是存放在本地缓存中。这就会导致文件夹一旦被误删或电脑系统重装而忘记备份文件…

18、XSS——cookie安全

文章目录 1、cookie重要字段2、子域cookie机制3、路径cookie机制4、HttpOnly Cookie机制5、Secure Cookie机制6、本地cookie与内存cookie7、本地存储方式 一般来说&#xff0c;同域内浏览器中发出的任何一个请求都会带上cookie&#xff0c;无论请求什么资源&#xff0c;请求时&…