文章目录

  • 一、Docker简介
  • 1.1Docker的概述
  • 1.2Docker的优势
  • 1.3Docker的使用场景
  • 1.4Docker引擎( Docker Engine)
  • 1.5docker三大组件:
  • 1.6docker底层原理
  • 1.7docker与虚拟机的区别
  • 二、Docker引擎(Docker Engine)
  • 三、Docker的架构(Docker architecture)
  • 四、部署20版Docker
  • 4.1安装docker
  • 4.2设置镜像加速
  • 4.3网络优化
  • 4.4查看命令
  • 4.5docker镜像操作
  • 4.5.1查询docker版本
  • 4.5.2搜索镜像
  • 4.5.3下载镜像(默认是从docker hub)
  • 4.5.4查看镜像
  • 五、容器操作
  • 5.1查询容器
  • 5.2删除容器
  • 5.3启动运行容器
  • 5.4停止容器
  • 5.5进入、退出容器
  • 5.6容器导入、导出
  • 5.7删除、强制删除容器



一、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 替代_jenkins

二、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 替代_国内docker 替代_02

  • 安装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

国内docker 替代_国内docker 替代_03

4.3网络优化

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

国内docker 替代_Docker_04

4.4查看命令

  • 查看docker版本
docker -v
docker version

国内docker 替代_运维_05

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

国内docker 替代_jenkins_06


国内docker 替代_国内docker 替代_07

  • 配置
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

国内docker 替代_Docker_08

  • 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

国内docker 替代_国内docker 替代_09

4.5.2搜索镜像

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

国内docker 替代_国内docker 替代_10

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

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

国内docker 替代_Docker_11


国内docker 替代_Docker_12

4.5.4查看镜像

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

国内docker 替代_运维_13

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

国内docker 替代_国内docker 替代_14

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

国内docker 替代_国内docker 替代_15

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

国内docker 替代_Docker_16

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

国内docker 替代_docker_17

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

国内docker 替代_docker_18

  • 这时就可以使用
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

国内docker 替代_docker_19

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 替代_Docker_20

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

国内docker 替代_docker_21

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

国内docker 替代_Docker_22

5.4停止容器

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

国内docker 替代_国内docker 替代_23

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退出容器,不影响容器运行。

国内docker 替代_Docker_24

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进行删除