目录
一 Docker简介
1.1 是什么
1.2 优缺点
1.3 应用场景
1.4 安装
二 命令
2.1 Docker基本命令
2.2 Docker镜像命令
2.3 Docker容器命令
一 Docker简介
1.1 是什么
Docker是一个开源的应用容器引擎,它基于Go语言实现,并利用操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,实现应用的“一次封装,到处运行”的目的,实在不理解,可以把它当成一个VM,在VM中又安装了一个VM第二个的这个VM就是Docker
生活列子来熟悉Docker
想象一下,你想要做一顿晚餐,比如意大利面。为了做这顿饭,你需要准备面条、番茄酱、洋葱、大蒜和一些调料。在传统的方式中,你可能需要分别购买这些食材,然后在厨房里手动准备它们。
现在,如果我们将这个过程与Docker进行比较:
- Docker主机:这就像你的厨房。它提供了制作意大利面所需的基础设施和环境。
- Docker镜像:这就像是食谱或预制的意大利面配料包。它包含了制作意大利面所需的所有食材和步骤。
- Docker容器:这就像是按照食谱实际制作出来的意大利面。一旦你有了镜像(食谱),你就可以创建一个容器(开始做饭),然后在这个容器里实际制作意大利面。
- Docker仓库:这就像超市的货架,上面摆放着各种各样的食谱或配料包。你可以从仓库中选择你想要的镜像,然后将其下载到你的Docker主机上。
使用该Docker好处之一,就是你可以很容易地分享你的“意大利面”配方(镜像)。例如,你可以将你的镜像上传到Docker仓库,然后你的朋友或家人就可以很容易地下载并在他们自己的Docker主机上制作同样的意大利面
1.2 优缺点
优点
轻量级和高效:Docker容器非常轻量级,因为它们共享主机操作系统内核,并且只包含应用程序及其依赖项。这使得容器启动速度快,资源占用少,非常适合在资源有限的环境中运行。
可移植性强:Docker容器可以在任何能运行Docker的操作系统上运行,无论是Linux还是Windows。这使得应用程序在不同环境之间的迁移变得非常容易。
版本控制和回滚:Docker使用镜像来创建容器,每个镜像都有一个唯一的标识符。这使得应用程序的版本控制变得简单明了,同时也方便进行回滚操作。
促进开发运维协同:Docker简化了应用程序的开发、测试和部署过程,使开发者和运维人员能够更高效地协同工作。
缺点:
学习曲线陡峭:Docker有一定的技术门槛,需要掌握一定的新概念和技术。对于初学者来说,可能需要一些时间来熟悉Docker的使用。
安全性问题:虽然Docker提供了多种安全机制来保护容器,但由于容器之间共享主机操作系统内核,因此仍然存在一些安全风险。例如,如果一个容器被攻击并成功突破了隔离层,它可能会影响到其他容器。
网络和存储功能有限:Docker在网络和存储方面的功能相对有限,可能无法满足一些复杂需求。例如,Docker的默认网络模式可能无法满足一些高级网络拓扑需求。
部分应用可能不兼容:尽管Docker支持大多数应用程序,但仍有部分应用程序可能无法或难以在Docker容器中运行。这可能需要额外的适配或修改工作。
大规模部署时的复杂性:当需要在大规模环境中部署大量容器时,Docker的监控、管理和故障排除可能会变得复杂。这可能需要额外的工具和技术支持。
1.3 应用场景
- 面向开发人员的Web应用自动化打包和发布:在没有Docker之前,开发、测试、生产环境可能不一致,导致文件配置上的不一致。使用Docker后,容器内的程序端口一致,而容器对外暴露的端口可能不同,但不影响程序的交付和运行,保证了环境一致性,并实现了快速部署。
- 面向运维人员的运维成本降低:部署程序时,搭建运行环境和解决环境依赖是非常耗时的。Docker通过镜像机制,将代码和环境直接打包成镜像,上传到容器即可启动,大大节约了部署时间。
- 面向企业的PaaS层实现:在一台物理机上可以部署多个轻量级的Docker容器,大大提高了运行效率。
- 微服务架构:在微服务架构中,应用程序被拆分成多个小型、独立的服务。Docker可以用来容器化这些服务,使它们可以独立部署和扩展。
- 应用迁移和移植:Docker可以帮助开发者轻松地将应用从开发环境迁移到生产环境,甚至在不同云服务提供商之间迁移,因为Docker容器提供了环境一致性。
- 隔离应用:Docker容器提供应用级别的隔离,使不同的应用可以在同一台机器上运行,互不干扰。
- 整合服务器:通过Docker,可以将多个服务整合到少数几台高性能服务器上,提高资源利用率,简化系统维护。
- 云计算和容器云:Docker容器可以在云环境中快速部署,无论是公有云、私有云还是混合云,都可以实现资源的灵活分配和自动化管理。
1.4 安装
#查看内核
uname -r
#更新yum源为最新,时间大致要6分钟
yum update -y
#安装Docker所需要的工具包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源①
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo②
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#下载安装Docker
yum install docker-ce docker-ce-cli containerd.io -y -y
#启动Docker并且设置开机自启动
systemctl start docker
systemctl enable docker
#检测Docker是否安装成功
docker version
执行上方命令安装无误的话,差不多就成功了
进入docker:cd /etc/docker
配置我们的镜像,先进入阿里云官方: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
如果没有账户的话,先注册再登入,再回到docker文件下
输入编辑命令:vim daemon.json
将阿里源进行配置(下图括号里面的)
使用命令进行生效
systemctl daemon-reload
systemctl restart docker
这时候,就算安装好啦!
二 命令
2.1 Docker基本命令
下方是有关于docker的基本命令,可自行操作
systemctl start docker (启动Docker)
systemctl stop docker (停止Docker)
systemctl restart docker (重启Docker)
systemctl enable docker (开机自启动Docker)
docker info (查看Dokcer概要信息)
docker --help (查看Docker帮助文档)
docker version (查看Docker的版本信息)
2.2 Docker镜像命令
下方图拉取(下载)mysql
命令:docker pull mysql
查看当前服务器已下载的:docker images
删除:docker rmi IMAGE ID或名称
强制删除:docker rmi -f IMAGE ID或名称
2.3 Docker容器命令
为了测试,在Linux的Centos7中再安装一个Centos7
命令:docker pull centos:7
这时候下载的centos7为一个容器
我们可以去启动它
创建一个容器并进入该容器: docker run -it --name mycentos02 IMAGE ID
解释:
-
docker run
: 这是Docker命令的基础,用于从镜像启动新容器。
-it
: 这是两个标志的组合。
-i
或--interactive
: 保持容器的标准输入(STDIN)开启,即使不连接到容器。-t
或--tty
: 为容器分配一个伪终端(pseudo-TTY),通常用于交互式会话-
--name mycentos02
: 这个标志用于给新创建的容器指定一个名称。在这个例子中,容器的名称是mycentos02
。如果不指定这个标志,Docker会自动为容器生成一个名称。 -
IMAGE ID
: 这是你想要从中创建容器的Docker镜像的标识符。通常,你会使用docker images
命令来查看可用的镜像及其ID,然后选择你想要使用的镜像的ID
综合起来,docker run -it --name mycentos02 IMAGE ID
命令会创建一个名为mycentos02
的新容器,该容器基于指定的镜像ID,并且具有交互性和伪终端。一旦容器启动,你就可以通过控制台与容器中的进程进行交互(切换版本),如下图
创建容器但不进入容器:docker run -di --name mycentos03 IMAGE ID
退出不停止容器:Ctrl+p+q
退出并停止容器:exit
查看活的容器:docker ps
查看全部的容器:docker ps -a
强制删除一个运行的容器:docker rm -f IMAGE ID或名称
重启容器:docker restart mycontainer
查看容器日志:cd /var/lib/docker/containers
最后得出,相同的两个Centos7容器不同的文件,存着一种隔离的状态,如下