走进“Docker”的世界


一、Docker简介

1.1Docker的概述

  • Dcoker是基于容器技术的轻量级虛拟化解决方案,docker是由容器引擎,把* * linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行Cli、api等) C/s

1.2Docker的优势

  • docker引擎统一了基础设施环境:docker环境------》image------>封装一个简易的操作系统(3.0+G)
  • docker引擎统一了封装应用(装箱/封装-类比于集装箱)方式:docker镜像一》 images
  • docker 引擎统一了运行时环境:docker容器一 》基于镜像——》运行为容器(可运行的环境)实现了一次构建、多次、多处使用

1.3Docker的使用场景

流程:war jar------>Igithub gitlab私有仓库(代码仓库)----> jenkins ( 测试)
(应用程序封装/构建镜像)一》 运维使用镜像下载,使用容器技术进行运行/发布
可以实现:

  • 打包应用程序简单部署
  • 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
  • 持续集成和持续交付(CI/CD):开发到测试发布
  • 部署微服务
  • 提供PAAS产品(平台即服务) {OpenStack的 云主机类似于阿里云的ECS,属于IAAS;Docker (K8S) 属于PAAS

1.4Docker引擎( Docker Engine)

Docker Engine是具有以下主要组件的C/S客户端—服务器应用程序:

  • server端:服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)
  • CLIENT端: REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口
    通过client客户端传入命令,比如以下:
    docker run:运行
    docker start:开启
    docker rm:删除
    与sever端进行交互,控制server端进行应命令的操作

1.5docker三大组件:

  • 镜像:模板;组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
  • 容器(Docker container):基于镜像的一种运行时状态
  • 仓库(Docker reqistry):存放image镜像模板;仓库分类: 1、公共仓库一》docker hub,2、私有仓库registry harbor

1.6docker底层原理

  • 名称空间( Namespaces):提供容器的隔离工作区的技术
  • 容器完美的实现了6个名称空间隔离(namespace资源隔离-用容器化技术封装)
  • mount:文件系统,挂载点
  • user:操作进程的用户和用户组
  • pid:进程编号
  • uts:主机名和主机域
  • ipc:信号量、消息队列,共享内存(理解,不同的应用调用的时候应该使用不同的内存空间)
  • net:网络设备、网络协议栈、端口等
  • 控制组(Control groups):资源管理功能,将应用程序限制为一组特定的资源
  • 控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束

1.7docker与虚拟机的区别

在这里插入图片描述

二、Docker引擎(Docker Engine)

  • Docker Engine是具有以下主要组件的C/S客户端-服务器应用程序
  • server端:服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)
  • client端:rest api,它指定程序可以用来与守护进行通信并指示其操作的接口。
  • 命令行界面(CLI)客户端(docker命令)
    docker run
    docker start
    docker rm

三、Docker的架构(Docker architecture)

  • Docker使用客户端-服务器架构。Docker 客户端与Docker,守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。
  • Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快
  • Docker Client:客户端/提供一个与用户交互,展示的平台+管理、控制docker服务端(功能)的工具 docker
  • Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker
  • run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker
  • API。Docker客户端可以与多个守护程序通信。
  • Docker daemon:守护进程
  • Docker守护程序( dockerd)侦听Docker
  • API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。
  • Docker images:镜像
  • 容器可以被打包成镜像
  • Docker container:容器
  • Docker registry:镜像仓库
    容器可以被打包成镜像Docker container:容器Docker registry:镜像仓库

四、部署20版Docker

4.1安装docker

  • 环境配置
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

vim /etc/resolv.conf
nameserver  114.114.114.114
  • 安装环境依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

  • 设置阿里云镜像源
 cd /etc/yum.repos.d/
 yum-config-manager --add-repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这里插入图片描述

  • 安装docker-ce社区版
yum install -y docker-ce
  • 开启docker
systemctl start docker
systemctl enable docker

4.2设置镜像加速

  • 官方镜像加速器(阿里云网站)
  • 关于加速器的地址,您登录容器镜像服务控制台后,在左侧导航栏选择镜像工具 ----> 镜像加速器,在镜像加速器页面就会显示为您独立分配的加速器地址https://zcwqh0wr.mirror.aliyuncs.com
  • 镜像加速注册地址https://help.aliyun.com/document_detail/60750.html
  • 通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://zcwqh0wr.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

4.3网络优化

vim /etc/sysctl.conf
     net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
docker images       ##查询镜像列表

在这里插入图片描述

4.4查看命令

  • 查看docker版本
docker -v
docker version

在这里插入图片描述

  • 用于显示docker的系统级信息,比如内核、镜像数、容器数
docker info

在这里插入图片描述
在这里插入图片描述

  • 配置
vim /etc/docker/daemon.json		##docker配置文件还可以添加以下的建立配置:
	{
	"graph": "/data/docker",					##数据目录
	"storage-driver": "overlay2",				##存储引擎;版本迭代:LXC——>overlay——>overlay2(overlayfs:文件系统,解决docker镜像分层)
	"insecure-registries": [" registry.access.redhat.com", "quary.io"]	##私有仓库位置
	"registry-mirrors": ["https://q***"]		##镜像加速
	"bip": "172.7.5.1/24",		##docker网络;控制网段的位置;需要创建新的网桥,系统默认的docker0是不变的
	"exec-opts": ["native.cgroupdriver-systemd"],		##启动时候的额外参数(驱动)
	"live-restore":true		##当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)
systemctl daemon- reload
systemctl restart docker

4.5docker镜像操作

docker run hello-world		##运行hello-world镜像
	run代表以下:
		①:pull	dockerhub	仓库中项目//镜像
		②:start hello-world image

在这里插入图片描述

  • The Docker client contacted the Docker daemon. dockerclient客户端连接到了服务端(服务端是以一个守护进程的形式跑在操作系统里面的)restfulapi典型的C/s架构
  • The Docker daemon pulled the “hello-world” image from the Docker Hub.(amd64)
    由docker服务端的守护进程从docker hub上下载了镜像(服务端会先检查本地系统是否有此镜像)
  • The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
    服务端创建了一个新的容器,然后从拉取的这个镜像启动了一个容器,容器执行了脚本/可执行程序让我们可以查看/使用
  • The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
    docker服务端把这些信息流(传递)返回到客户端并展示出来,( 展示在终端上)
    docker client 可以是多种形式,比如"docker"命令工具所在的终端

4.5.1查询docker版本

docker version docker info

在这里插入图片描述

4.5.2搜索镜像

docker search nginx		##搜索镜像nginx
docker search centos: 7		##搜索镜像centos:7

在这里插入图片描述

4.5.3下载镜像(默认是从docker hub)

docker pull 镜像名称
docker pull nginx    ##下载nginx最新的镜像

在这里插入图片描述
在这里插入图片描述

4.5.4查看镜像

docker  images	##查看镜像列表
docker images -q	##查询镜像过滤ID
	q:代表过滤;只过滤容器ID

在这里插入图片描述

  • 查看当前镜像的获取信息
docker inspect 镜像ID	 
docker inspect 8652b9f0cb4c

在这里插入图片描述

  • 添加镜像标签
docker tag nginx:latest  nginx:lnmp

在这里插入图片描述

  • 删除镜像
docker rm  **	##删除容器ID
docker rmi  镜像名称/镜像标签  ##删除镜像ID
	rm i:rm image  ##删除镜像

在这里插入图片描述

docker rmi ngin:lnmp		##删除nginx的lnmp标签

在这里插入图片描述

  • 镜像导入
docker save -o 文件名镜像名
docker load < 
示例:
docker save -o hello-world hello-world

在这里插入图片描述

  • 这时就可以使用
scp hello-world root@192.168.35.10:/opt		##传到其他安卓docker的内容
docker load < hello-world		##再进行镜像导入;

五、容器操作

5.1查询容器

docker ps -a		##显示所有的容器,包括未运行的
	a:all;全部
docker ps -aq		##查询容器的id
	q:代表过滤;只过滤容器ID

在这里插入图片描述

5.2删除容器

docker rm -f `docker ps -aq`		##强制批量删除容器;不建议使用,若需要删除删选出id进行删除

5.3启动运行容器

  • 使容器开启并持续性运行
:创建容器
	docker create -it nginx:latest /bin/bash
		-i:让容器的标准输入保持打开
		-t:分配一个伪终端
		-d:后台守护进程的方式运行
②:启动容器
	docker start 容器id

在这里插入图片描述

  • 启动一次性运行容器
docker run centos:7 /usr/bin/bash -c ls /
	-c:传递命令参数

在这里插入图片描述

  • 持续后台运行
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello; done"	##后台运行centos:7的容器
	while true;do echo hello; done:代表给予一个死循环

在这里插入图片描述

5.4停止容器

docker stop 容器ID				##停止容器
docker stop 84cff82e0a93 		##停止容器

在这里插入图片描述

5.5进入、退出容器

  1. 使用run
    docker run -it nginx:latest /bin/bash
    容器内没有的命令如何操作:
    ①:yum下载命令工具
    ②:以不同的环境运行容器,即环境中存在需要使用的命令即可

  2. exec(容器必须为开启状态)

docker exec -it 容器ID /bin/bash
	docker run -it:会创建前台进程,但是会在输入exit后终止进程。
	docker attach:会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.
	docker exec -it 会连接到容器,可以像SSH-样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

在这里插入图片描述

5.6容器导入、导出

  • 容器导出
docker export 容器ID >文件名
示例:
docker export b054125b9481 > hell02		##导出hello-world到文件hello2内
  • 容器导入(生成镜像)2种方式
①:docker import 导出的文件名(容器) 指定镜像名称(打上标签)
示例:
docker import hello2 hello-world:latest
②:cat 文件名(容器) | docker import - hello-world:latest
示例:
cat centos_02 | docker import - centos:7

5.7删除、强制删除容器

docker rm 容器ID
docker rm -f 容器ID		##强制删除容器(正在运行的容器)
docker ps -a | awk '{print "docker rm " $1'} | bash		##批量删除容器;$1:是容器的id
for i in `docker ps -a | grep -i exit | awk '{print$1}'`; do docker rm -f $i;done	##批量删除"exit"状态的容器
docker rm -f `docker ps -aq`		##强制批量删除容器;不建议使用,若需要删除删选出id进行删除

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值