最近在项目需要依赖于Docker,但是博主之前没有接触出过这个,所以小白方式来给大家分享,如果有哪些不足的地方可以在留言区提出来。看完本篇文章可以掌握以下内容:
了解Docker为什么会出现 了解Docker历史 了解Docer能干嘛 完成Docer安装 一、Docker为什么会出现 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协助我们需要关心的问题很多 ,这也是很多互联网公司不得不面对的问题,特别是各种版本的迭代之后 ,不同版本环境的兼容 ,对运维人员 都是考验。 环境配置如此麻烦,换一台机器,就要重新来一次 ,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样的复制过来 。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作 ”的问题。 开发人员利用Docker可以消除协作编码时 “在我的机器上可正常工作”的问题。 之前在服务器配置一个应用的运行环境,要安装各种软件,就拿某电商项目为例,Java/Tomcat/Mysql/JDBC驱动包等,安装和配置这些东西有多麻烦就不必多说了, 它还不能跨平台。假设我们是在Windows上安装的这些环境,到了Linux又得重新安装 。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常的麻烦的。 Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。 透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作 。
二、Docker历史 Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立,其标志如下图所示。
有意思的是,Docker 公司起初是一家名为 dotCloud的平台即服务(Platform-as-a-Service, PaaS)提供商。 底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之被命名为“Docker”。Docker就是这样诞生的! 2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为“Docker”,放弃dotCloud PaaS 平台 怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。 如今 Docker 公司被普遍认为是一家创新型科技公司,据说其市场价值约为 10 亿美元。Docker 公司已经通过多轮融资,吸纳了来自硅谷的几家风投公司的累计超过 2.4 亿美元的投资。几乎所有的融资都发生在公司更名为“Docker”之后。
虚拟机与镜像的区别 虚拟机:
像一台电脑 隔离、需要开启多个虚拟机 非常大 开机需要几分钟 镜像:
三、Docker 能干嘛 之前的虚拟技术
虚拟机技术缺点:
资源占用十分多 冗余步骤多 启动很慢! 容器化技术
比较Docker和虚拟机技术不同:
传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装运行软件 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了。 每个容器键是互相隔离,每个容器内都有一个属于自己的文件系统,互补影响。 应用更快的交付部署 传统:一个帮助文档,安装程序。Docker:打包镜像发布测试一键运行。更便捷的升级和扩容 使用了Docker字后,我们部署应用就和搭积木一样 项目打包为一个镜像,扩展服务器A!服务器B更简单的系统运维 在容器化后,我们的开发,测试化劲都是高度一致更高效的计算利用 Docker 是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器!服务器的性能可以被压榨到极致。
四、Docker安装 4.1 Docker基本组成部分
镜像(image): docker镜像就好比一个模板,可以通过这模板来创建服务,tomcat镜像 ==> run ==>tomcat01容器(提供服务)通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。容器(container): Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的 启动,停止,删除等基本命令。目前就可以吧这个容器理解为就是一个简易的Linux系统。仓库(repository): 仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!
4.2 环境准备 最新的Docker 需要具备Linux Contos7以上的版本 在进行后续的操作。官方链接安装文档
4.3 开始安装 卸载旧的docker所依赖东西 yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装需要安装包 yum install -y yum-utils
yum install -y yum-utils
安装镜像仓库 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
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
更新yum的软件包最新的索引 yum makecache fast
yum makecache fast
安装docker相关的 docker-ce社区 (常用) ee 企业 yum install docker-ce docker-ce-cli containerd.io
yum install docker-ce docker-ce-cli containerd.io
启动Docker systemctl start docker
# 查看是否启动成功 出现以下结构说明启动成功
[root@192 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
systemctl start docker
# 查看是否启动成功 出现以下结构说明启动成功
[root@192 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
测试docker hello-world docker run hello-world
docker run hello-world
8. 查看刚刚下载hello-word镜像
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB
9.删除Docker
#删除依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源 /var/lib/docker docker默认的工作目录
rm -rf /var/lib/docker
#删除依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源 /var/lib/docker docker默认的工作目录
rm -rf /var/lib/docker
4.3 使用阿里云的镜像加速器 登录到阿里云 选择镜像服务
执行以下内容
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <'EOF'
{
"registry-mirrors": ["https://t4bt9dhe.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <'EOF'
{
"registry-mirrors": ["https://t4bt9dhe.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
五、Docker运行流程
在这里插入图片描述
六、底层原理 6.1 Docker是怎么工作的? Docker 是一个Client -Server结构的系统,Docker的守护进程运行在主机上通过Socket 从客户端访问! DockerServer接收到 Docker-Clinet,就会执行这个命令! 6.2 Docker为什么比Vm快? Docker 有着比虚拟机跟小的抽象层 Docker利用的是宿主机的内核,Vm需要时Guest OS。 所以说,新建一个容器的时候,Docker不需要像虚拟机一样重行加载操作系统,避免引导。虚拟机是加载Cuest OS,分钟级别的,而Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级。
在这里插入图片描述
7.总结 到这里本篇文章基本上就结束了,总结一下本篇文章我们都学到了啥,了解了Docker,以及后面Docker能干啥,成功安装Doker,深度了解下Docker是怎样运行的,下期我们学习Docker的常用命令。我们下期见~~