文章目录
0.前言
-
为什么会出现docker呢?
我们在做项目的时候,会不会出现这样子的一种情况,就是这个项目在我的电脑上可以运行,在他的电脑上却不能运行,环境配置是真的麻烦,果然环境配置好,就成功了80%,我相信大多数人都有这样子的体会。再比如我们做服务器集群的时候,服务器A要配置tomcat+mysql+redis等等,服务器B也要配置,服务器C也要配置…一台一台配置是一件麻烦的时候,如果过程中不小心配错了,项目就运行不起来等等,就很烦躁。
因此,我们提出一个问题:为什么我把项目copy给别人的时候,不能直接带上我的运行环境呢?
-
所以,docker就是为了解决这个问题诞生的,它不仅仅可以打包我们的程序,还可以打包我们的运行环境。
即 docker 打包 我的程序 + 我此时的运行环境 成镜像。
直接copy给别人的时候,由于自带环境,可以直接启动容器,直接运行成功,开发,测试环境都是高度一致的。
1.概述
-
Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
-
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
-
运行中的这个镜像称为容器,容器启动是非常快速的。
2.作用
-
应用更快速的交付和部署
在传统的开发环境中,当开发完成开发的时候,需要交给运维人员进行测试,就需要写一堆帮助文档,比如如何安装程序,如何配置才能运行等等,十分的麻烦。
而docker则直接将程序加运行时的环境打包镜像发布,一键运行,直接测试。
-
更加方便的升级和扩缩容
因为docker打包是 加运行环境的,因此直接交给其他服务器,得到镜像就可以马上运行,部署更加方便。
-
更加简单的系统运维
在容器化之后,开发,测试环境都是高度一致的。
-
更加高效的对计算机资源利用
docker是内核级别的虚拟化,可以再一个物理机上可以运行很多的容器实例。
3. docker和虚拟机技术的不同
我们做redis集群或者mysq集群的时候,总是开几个虚拟机,你会发现开3 -4个虚拟机,电脑就非常卡,内存占90%等等。这是因为:
-
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或多态电脑。运行一个完整的操作系统,然后在这个系统上安装和运行软件。你看,都虚拟出完整的操作系统了,能不卡吗?
-
容器化技术不是模拟一个完整的操作系统
容器内的应用直接运行在宿主机的上,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
每个容器间是相互隔离,每个容器内都有一个属于自己的文件系统,互不影响
总结:docker利用的是宿主机的内核,虚拟机是需要全新的内核。当新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机时加载Guest OS,分钟级别的,docker是利用宿主机的操作系统,省略复杂过程。
4.核心的概念
-
主机(Host)安装了Docker程序的机器(Docker直接安装在操作系统之上);
-
客户端(Client)连接docker主机进行操作;
-
仓库(Registry)用来保存各种打包好的软件镜像;
-
镜像(Images)软件打包好的镜像;放在docker仓库中;
-
容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
5.安装Docker(Linux)
1. 环境准备
#系统内核是要求 3.10以上 通过下面的命令来查看自己的内核版本
root@ubuntu:/home/mylinux# uname -r
4.15.0-123-generic
2.查看并使用帮助文档
-
我们可以使用docker的帮助文档来安装,下面是地址,我用的是ubuntu,因此下面是以ubuntu来讲解的,其他可以查看帮助文档来安装。地址:docker:https://docs.docker.com/get-docker/
-
选择ubuntu的教程
3.安装过程(Ubuntu版)
下面则是按照文档步骤写的安装步骤
# 1.卸载旧的版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2.需要的安装包
sudo apt-get update #这个是更新软件包
#这是需要的其他安装包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 3.设计镜像的仓库
# 本人没有修改阿里云,一样很快,因此其实这一步如果不需要修改阿里云,就可以直接跳过。
# 这是系统默认的镜像仓库(国外),如果需要修改成阿里云的,按下面修改
# 可以不用执行下面命令
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 修改为阿里云
$ sudo add-apt-repository \
"deb [arch=amd64] 阿里云的地址 \
$(lsb_release -cs) \
stable"
# 4.安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
// 2024年2月7日修改,发现上述的命令似乎无法执行了,改下面这个:
sudo apt-get update && sudo apt-get install docker.io -y
# 5.启动
systemctl start docker / service docker start
# 6.查看是否安装成功
root@ubuntu:/home/mylinux# 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:02:59 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:01:30 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
# 7.使用docker run hello-world 测试
sudo docker run hello-world
# 8.查看下载好的hello-world 镜像
docker images
root@ubuntu:/home/mylinux# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
# 如何卸载docker
# 1.卸载docker的依赖
sudo apt-get purge docker-ce docker-ce-cli containerd.io
# 2.删除docker的资源
sudo rm -rf /var/lib/docker
#提示:/var/lib/docker 是docker的默认工作路径
6. Docker是怎么工作的
docker 是一个客户端-服务端结构的系统,Docker的守护进程运行在主机上,通过客户端访问,即用客户端发送指令,服务器接收到了就会去执行,跟mysql,redis的一样。