Docker(1) 底层原理一站式学习!!!(零基础保姆式 通俗易懂)

目录

一 认识Docker

1 定义

 2 docker 解决了什么问题?(开发人的痛点)

(1)环境一致性与标准化

(2)更高效的利用系统资源&&秒级启动

(3)持续交付和部署

3 docker和虚拟机的区别

二 Docker三要素

1 镜像

2 容器

3 仓库

三 Docker 安装部署(centos7)

1 安装前准备

(1)检查系统及内核版本

(2)关闭防火墙和SELinux (谨慎操作!!)

(3)卸载旧版本

(4)安装依赖及镜像源

2 安装docker

3 启动&&测试docker

4 配置加速器(可不配)

四 docker 常用基础命令大全!!!码住😄😄

一 认识Docker

1 定义

Linux container 是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,Docker是基于Linux container技术优化实现(资源隔离(Namespace)资源限额(CGroups)分层存储(union FS)

Docker设想是交付环境如同海运,OS如同货轮,在每个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,集装箱(软件打包==>镜像)内容可以由用户自定义,也可以由专人制造

 2 docker 解决了什么问题?(开发人的痛点)

(1)环境一致性与标准化

  • 解决了“明明在我的电脑上能运行啊”的问题,极大提升了平台的可移植性,降低开发和部署成本

(2)更高效的利用系统资源&&秒级启动

  • 与传统的虚拟机技术不同,Docker 容器不需要像虚拟机那样模拟完整的操作系统,而是共享宿主机的内核,这使得 Docker 容器启动速度极快,一般只需秒级即可启动

(3)持续交付和部署

  • 在传统的应用部署过程中,开发人员需要在目标服务器上手动安装操作系统、配置运行环境、部署应用程序及其依赖项,这一过程耗时且易出错,docker可以通过定制应用镜像,上传到镜像仓库。运维人员在生产服务器上,通过一条命令就可以从镜像仓库拉取镜像并启动容器,来实现持续集成、持续交付、部署

3 docker和虚拟机的区别

比较Docker虚拟机
虚拟化类型轻量级虚拟化:共享宿主机内核,可以通过运行容器,实现多个操作系统传统虚拟化:通过 Hypervisor 模拟硬件,每个虚拟机有独立操作系统和内核
资源占用资源利用率高:多个容器共享宿主机内核,占用资源少,内存、CPU 等开销小资源利用率低:每个虚拟机需独立操作系统及模拟硬件,内存、CPU 等资源消耗多
启动速度启动速度快:秒级启动,因无需启动操作系统,直接启动应用启动速度慢:需启动完整操作系统,通常需数十秒甚至数分钟
隔离性隔离性相对较弱:容器间共享内核,虽有资源隔离机制,但安全性和隔离性不如虚拟机隔离性强:每个虚拟机有独立操作系统和硬件资源,相互隔离性好
应用场景适合快速部署、迭代开发、微服务架构,可快速构建和部署应用,方便管理和扩展适合需运行不同操作系统、对隔离性和安全性要求高的场景,如企业关键业务系统
迁移和移植简单复杂:需考虑虚拟机操作系统、硬件等兼容性
镜像大小镜像轻量级镜像较大
部署灵活性部署灵活性高:可快速创建、删除、启动和停止容器,实现应用动态伸缩部署灵活性相对较低:创建和配置虚拟机耗时较长,不适合频繁变更场景

二 Docker三要素

1 镜像

  • 操作系统的组成:kernel+rootfs对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持;Docker 镜像Image),和宿主机共用一个内核,自身就相当于是一个特殊的文件系统;

例子:为什么能在centos系统上启动一个Ubuntu容器?

         Ubuntu基础镜像(Base Image)带着一个rootfs ,和宿主机共用一个内核,Ubuntu系统就起来了

类比日常:镜像好比是预先精心打包好的旅行箱模板。根据不同旅行需求,放置特定的物品,比如针对登山旅行,箱内放置了登山鞋、登山绳、冲锋衣等专业装备;若是海滨度假旅行箱模板,则放置了泳衣、沙滩巾、防晒霜等物品;这个模板旅行箱(Docker 镜像)包含了进行某类旅行(运行某个应用程序)所需的一切物品(代码、运行时环境、库、配置文件等),是创建实际旅行箱(容器)的基础,而且模板本身是只读的,不会轻易被修改。

2 容器

  • 镜像运行时的实体

类比日常:根据旅行箱模板实际组装并使用的旅行箱。比如当你决定要去登山,就按照登山旅行箱模板的物品配置,组装出一个实际的旅行箱并带着它出发;在旅行过程中(应用程序运行时),你可以根据实际情况对旅行箱内物品进行使用和调整(对容器内文件系统进行读写操作)。不同类型旅行的实际旅行箱(不同应用的容器)相互独立,互不干扰,且可以在不同地方(不同环境)使用

3 仓库

官方仓库:hub.docker.com

  • 集中存放镜像文件的地方

类比日常:可以看作是一个大型的旅行箱存放中心;这个存放中心(Docker 仓库)分为公共和私有两种,公共的就像大家都能去的公共仓库,任何人都可以去挑选自己需要的旅行箱模板;私有的则类似企业或组织内部自己建的存放中心,只有内部特定人员能进入挑选。如果你自己精心配置出一个很棒的旅行箱模板,也可以把它推到这个存放中心。

三 Docker 安装部署(centos7)

1 安装前准备

(1)检查系统及内核版本

  Docker 支持 64 位版本 CentOS 7/8,并且要求内核版本不低于 3.10

cat /etc/redhat - release  查看系统的具体版本信息
uname -r 查看内核版本

(2)关闭防火墙和SELinux (谨慎操作!!)

Docker 在运行过程中,容器与宿主机以及容器之间需要进行网络通信,容器可能会使用随机端口进行通信。开启防火墙后,它可能会阻挡这些容器之间以及容器与宿主机之间的网络连接

在生产环境中,直接关闭防火墙和 SELinux 会带来一定安全风险。更好的做法是对防火墙规则和 SELinux 策略进行针对性的配置和调整

systemctl disable firewalld
systemctl stop firewalld
iptables -F
sed -i '7s/enforcing/disabled/' /etc/selinux/config 
setenforce  0 
getenforce                     #Disabled
                  #记得重启!!!

(3)卸载旧版本

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

(4)安装依赖及镜像源

sudo yum install -y yum-utils
国内源
sudo yum-config-manager \
     --add-repo \
     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

官方源(国外 有网络隔离问题 建议用国内源)
sudo yum-config-manager \
     --add-repo \
     https://download.docker.com/linux/centos/docker-ce.repo

2 安装docker

更新yum源缓存
yum clean all && yum makecache

指定版本:20.10.24:主版本.次版本.补丁版本
查看yum仓库历史版本命令:yum search docker-ce   --show-duplicates  
sudo yum install docker-ce-20.10.24-3.el7.x86_64 docker-ce-cli-20.10.24-3.el7.x86_64 containerd.io  docker-compose-plugin

不指定版本 默认最新版本
sudo yum install docker-ce docker-ce-cli containerd.io

3 启动&&测试docker

systemctl enable docker
systemctl start docker
systemctl status docker
systemctl status containerd
&验证是否安装成功
docker run hello-world       # Hello from Docker!   安装成功
	> clint contacted the Docker daemon(server)
	> Docker daemon pull from Docker Hub               server去仓库拉取
	> Docker daemon created a new container            server创建一个容器
	> Docker daemon streamed that output to client     server把输出信息返回给clint

4 配置加速器(可不配)

修改配置
vim /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://ung2thfc.mirror.aliyuncs.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}

重启docker
systemctl restart docker

四 docker 常用基础命令大全!!!码住😄😄😄

cat /etc/os-release  						# 查看系统信息
docker info    								# 显示server和clint信息
docker search nginx							# 搜索
--------------------------------------镜像------------------------------------------
docker pull 仓库名:TAG(默认latest)	 	# 拉取镜像.默认地址是 Docker Hub(docker.io)
	例:docker pull centos:7
docker pull --help 
docker pull registry.cn-beijing.aliyuncs.com/xxhf/nginx:1.22.1 # 从自己的仓库拉取镜像
docker push 								# 推送镜像到远程仓库
docker images 						        # 列出本机所有的镜像
	REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
	   仓库名       仓库标签      镜像ID          时间           大小
	hello-world     1.22.1    0f8498f13f3a   13 months ago   142MB
以上如果出现<none> 则为虚悬镜像,失去了价值 可以任意删除
docker rmi IMAGE ID  --force				# 删除镜像
docker rmi $(docker images -q  **) --force	# 删除所有镜像或**
docker system df                            # 查看镜像、容器、数据卷所占用的空间
docker images --no-trunc     				# image id 显示全
docker tag hello-world hello  				# 重命名镜像
------------------------------------导入导出镜像-------------------------------------
docker save busybox:latest -o busybox.img	# 导出镜像
docker load -i busybox.img					# 导入镜像
---------------------------------------容器-----------------------------------------
docker run busybox:latest echo hello world  # 启动容器但不进入执行命令
docker run -it ubuntu bash/sh	   			# 进入容器的shell中  前台交互运行;
                                            # -i:交互式操作   -t:终端
docker run -it centos:7						# 进入容器的shell中  前台运行
docker run -d nginx:1.22.1				   	# 启动容器  后台运行
docker run -d -p 80:80 nginx:1.22.1			# 启动容器 监听本机的80端口
docker run -d --name=nginx-666 nginx:1.22.1	# 启动容器并起名  后台运行
docker run -d -h 主机名 nginx:1.22.1			# 修改容器主机名   进去次才看见
docker run -d --restart=always nginx:1.22.1	# docker或服务器重启后容器跟着重启
docker run -d redis							# 启动容器  后台运行
docker ps								    # 查看当前正在运行的容器
	CONTAINER ID   IMAGE     COMMAND   CREATED     STATUS     PORTS     NAMES
        容器ID       镜像        命令       时间       状态      应用端口    容器名
docker ps -a 								# 显示所有的容器(正在运行、已经退出的)
docker ps ---no-trunc     					# 容器 id 显示全
docker stop CONTAINER ID					# 关闭容器
docker start CONTAINER ID					# 启动容器
docker logs -f CONTAINER ID					# 查看容器日志
docker inspect CONTAINER ID					# 查看容器详细信息
docker inspect CONTAINER ID | grep -i ipaddr	# 查容器的IP
docker inspect -f '{{ .NetworkSettings.IPAddress}}' CONTAINER ID   # 精确查容器IP
docker exec -it CONTAINER ID sh				# 进入到正在运行容器的shell中
docker exec CONTAINER hostname				# 不进入正在运行的容器只执行命令
docker rm CONTAINER ID --force				# 删除一个正在运行的容器
docker rm CONTAINER ID CONTAINER ID --force	# 删除多个容器
docker rm $(docker ps -a | awk '{print $1}' | grep -v 'CONTAINER') --force #删除所有容器
docker rm $(docker ps -a -q) --force		# 删除所有容器
docker stats CONTAINER ID					# 查看容器资源使用情况
docker run --dns 8.8.8.8 -d nginx:1.22.1	# 修改容器DNS

➕  蛋蛋不迷路~  有疑问随时留言哦😯 不定时更新!

下文持续更新Dokcerfile详解  敬请期待....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打倒苦瓜蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值