🐳1.Docker简介
docker是基于Go语言实现的云开源项目
🐋1.背景
在传统的开发过程中,我们的项目依赖于本地电脑的配置和某些配置文件,此时如果我们将项目移到服务器或者其他本地电脑上进行运行,为了能够在这些环境上运行和通过质量检测,会产生大量的配置环境的开销,并且在部署时由于版本、配置问题项目经常会挂掉。总而言之,环境配置相当麻烦,换一台主机就要重新来配置一次,费时费力。
docker从根本上解决换主机重新配置环境问题,因为docker把原始的配置环境也复制一份过来。此时的docker像一个容器装载着源代码+配置+环境+版本+各种第三方组件并将这些打包成一个镜像iso文件,让镜像文件在docker引擎上运行。更专业的来讲,docker给出了一个标准化的解决方案——系统平滑移植,容器虚拟化技术
🐋2.理念
docker是通过对组件的封装、分发、部署、运行等生命周期的管理,使用户应用及其运行环境能够做到一次镜像,处处运行
一句话概括
docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
面试题: 容器与虚拟机比较
传统虚拟机,运行一个软件,创建一个新的虚拟机实例。占用资源多、步骤冗余、启动慢
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Linux容器:不需要模拟一个完整的操作系统,而是对进程进行隔离。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件所需的库资源和设置。系统因此变的高效轻量并保证部署在任何环境中的软件都能始终如一地运行
🐋3.优势
一次构建、随处运行
- 更快速的应用交付和部署
传统的应用开发完成后,需要提供大量的安装程序和配置文件及说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行,使用Docker只需要交付少量容器镜像文件,在正常生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间
- 更便捷的升级和扩缩容
当现有容器不足以支撑业务时,可通过镜像运行新的容器进行快速扩容。
- 更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG
- 更高效的计算资源利用
Docker是内核级虚拟化,不需要额外的Hypervisor(虚拟机监视器,是用来建立与执行虚拟机器的软件、固件或硬件)支持,在一台主机上可以运行多个容器实例,大大提升物理服务器的CPU和内存的利用率
🐳2.Docker安装与卸载
🐋1.docker三要素:
镜像:
是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器 docker镜像文件类似于Java的类模板,而docker容器实例类似于Java中new出来的实例
容器:
容器时用镜像创建的运行实例,类似于一个虚拟化的运行环境,可以看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序
仓库:
集中存放镜像文件的地方,Docker公司提供的官方仓库 Docker Hub 存放了大量的镜像供用户下载。国内的公开阿里云等。
通俗来讲,比如说王者荣耀的红蓝BUFF野怪,新刷新出来的就相当于从天美游戏库模板中 创建出来一个野怪,这个野怪(容器)在自己的坑位上可以移动、攻击、有血条是一个独立运行的最小单元。而腾讯云中存放了各种野怪的模板(镜像文件)
docker平台架构图解(入门版)
🐋2.安装Dockers引擎
注意:docker必须部署在Linux内核的系统上
1.打开docker官网
2.进入手册
3.以CentOS7及以上版本为例
4.卸载旧版本(第一次安装跳过此步骤)
5.yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
6.官网给出三种安装方法 我们选择第一种也是最常用的一种
安装yum工具包
yum install -y yum-utils
7.设置stable镜像仓库
官网给的是:
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
但是这个镜像仓库服务器在国外,我们使用可能会经常连接超时。
我们使用阿里云的镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
tips:建议更新下yum软件包索引
yum makecache fast
8.安装docker引擎
yum install docker-ce docker-ce-cli containerd.io
" title="">
安装成功!!!
🐋3.测试
1.启动 docker
systemctl start docker
" title="">
查看docker进程
2.熟悉的hello world
docker run hello-world
" title="">
docker测试通过!!!🥰🥰🥰
docker执行hello world流程图解:
🐋4.卸载
安装一遍不过瘾,想要卸载重新再装一次
卸载命令
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
(你在期待什么?我可不演示哦🤪🤪🤪)
🐳3.Docker常用命令
🐋1.帮助启动类命令
🐟1.启动:
systemctl start docker
🐟2.停止:
systemctl stop docker
🐟3.重启:
systemctl restart docker
🐟4.查看docker状态:
systemctl status docker
🐟5.开机启动:
systemctl enable docker
🐟6.查看docker概要信息:
docker info
🐟7.查看docker总体帮助文档:
docker --help
🐟8.查看docker命令帮助文档:
docker +具体命令 --help
🐋2.镜像命令
🐟1.列出本机上的镜像: docker images
参数说明: -a
:列出本地所有的镜像(含历史映像层)
-q
: 只显示镜像ID
🐟2.查询某个镜像: docker search +镜像名
参数:--limit
只列出N个镜像,默认25个
docker search --limit 5 hello-world
参数说明
🐟3.下载镜像 docker pull + 镜像名[:TAG]
TAG版本号 省略就是默认下载最新版本
🐟4.查看镜像/容器/数据卷所占的空间 docker system df
🐟5. 删除某个镜像 docker rmi +镜像名/镜像ID
强制删除 docker rmi -f 镜像ID
删除多个 docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除全部 docker rmi -f $(docker images -qa)
面试题: 谈谈 docker 虚悬镜像是什么?
仓库名、标签都是\<none>的镜像,称为虚悬镜像
🐋3.容器命令
直接进行拉取Ubuntu最新版
🐟1. 新建+启动容器 docker run [OPTIONS] IMAGE [COMMAND][ARG...]
参数说明:--name ="容器新名字"
为容器指定一个名称
-d
:后台运行容器并返回容器ID,启动守护式容器(后台运行):
在大部分场景下,docker的服务是在后台运行的 docker run -d 容器名
Dokcer容器后台运行,就必须有一个前台进程
因此像Ubuntu这样需要交互的需要用下面的启动方式
-i
: 以交互模式运行容器,通常与-t 同时使用
-t
:为容器重新分配一个伪输入终端,通常与 -i 同时使用
启动交互式容器(前台有伪终端,等待交互)
而像redis这样只需要后台默默运行的,如果使用前台交互的形式就会很容器因为一些操作造成容器退出
因此,在使用docker启动容器前,应该首先考虑容器是适合后台运行还是交互式运行
-P
:随机端口映射,大写P
-p
:指定端口映射,小写p
🐟2.列出当前运行的所有容器 docker ps
新建一个会话 查看刚才运行的Ubuntu
创建一个名称为myu1的Ubuntu容器实例
再新建一个会话 查看所有运行的容器
参数:docker ps [OPTIONS]
-a
:列出当前所有正在运行和历史上运行过的容器
-l
:显示最近创建的容器
-n
:显示最近n个创建的容器
-q
:静默模式,只显示容器编号
🐟3.退出容器
exit
run进去容器,exit退出,容器停止ctrl+p+q
run进去容器,ctrl+p+q退出,容器不停止
🐟4.启动已停止运行的容器 docker start 容器ID或者容器名
重启容器 docker restart 容器ID或者容器名
停止容器 docker stop 容器ID或者容器名
强制停止容器 docker kill 容器ID或者容器名
🐟5.删除已停止的容器 docker rm 容器ID
docker rm -f 容器ID
强制删除容器
docker rm -f $(docker ps -a -q)
删除多个容器实例
docker ps -a -q | xargs docker rm
删除多个容器实例
🐟6.查看容器日志 docker logs +容器ID
🐟7.查看容器内运行的进程 docker top + 容器ID
🐟8.查看容器内部细节 docker inspect 容器ID
🐟9.进入正在运行的容器并以命令行交互
启动ubuntu容器并使用Ctrl+p+q退出
这个时候使用 docker exec -it 容器ID bashShell
继续进行命令行交互
命令 docker attach 容器ID
同样也可以
attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止
exec 在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止
推荐使用 docker exec 命令,这样退出容器终端不会导致容器退出
🐟10.从容器内拷贝文件到主机
docker cp 容器ID:容器内部路径 目的主机路径
在Ubuntu容器中创建一个a.txt文件
拷贝到本机 /opt目录下
🐟11. 导入/导出容器
导出容器的内容留作为一个tar归档文件 docker export 容器ID > 文件名.tar
从tar包中的内容创建一个新的文件系统再导入为镜像 cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号