学习视频链接,示以尊重:https://space.bilibili.com/95256449/video
一、Docker概述
1.1 为什么出现
一款产品的开发到上线需要多套环境,而环境配置是一件十分繁琐的事情,每一台机器都需要部署环境(集群Redis、ES、Hadoop…),并且一些配置还不能够跨平台。这时就会考虑,当发布一个项目(jar + (Redis、MySQL、JDK、ES…))时,项目能否带上环境相关配置(Docker中称作镜像)一起打包。
- 传统的方式:开发产品的人员将产品打包为jar包或者war包;之后产品的上线和环境配置等工作交给运维人员来做。
- 现在的方式:开发打包部署上线,都由开发人员一套流程搞定。
Docker 就是为了解决以上问题被提出。核心思想是:隔离(集装箱,每个箱子是相互隔离的)。Docker 通过隔离机制,可以将服务器利用到极致。
1.2 可以做什么
2010 年,dotcloud公司在美国成立,将自己的技术(容器化技术)命名为 Docker。
在容器技术出现之前,都是使用虚拟机技术。
- 虚拟机:例如在windows中装一个Vmware,通过这个软件可以在一台机器上虚拟出多台机器,十分笨重且消耗空间。
- 虚拟机和Docker容器技术都属于虚拟化技术。
虚拟机技术特点:
- 资源占用多
- 冗余步骤多
- 启动很慢
容器化技术:容器化技术不是模拟的一个完整的操作系统。
- 应用更快速地交付和部署
- 更快捷地升级和扩缩容
- 更简单地系统运维
- 更高效地计算资源利用
比较Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
- Docker容器技术,容器内应用直接运行在主机操作系统上,容器没有自己的操作系统内核,也没有虚拟一套硬件,所以很轻便。
- 每个容器间相互隔离,每个容器内都有属于自己的文件系统,互不影响。
二、Docker中的概念
**镜像(image):**Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,例如:tomcat镜像->run->tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终的服务运行就是在容器中)。
**容器(container):**Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建。目前可以将容器理解为简易的linux系统。
**仓库(repository):**存放镜像的地方。仓库分为公有仓库和私有仓库。
三、安装Docker
1、卸载旧有 Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、需要的安装包
yum install -y yum-utils
3、设置镜像仓库(使用阿里云镜像地址,国外地址很慢)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装Docker引擎
yum install docker-ce docker-ce-cli containerd.io
注意,这一步如果遇到报错containerd.io版本过低,可以先执行如下命令再安装Docker引擎:
wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
5、启动Docker
systemctl start docker
6、查看Docker版本,查看是否正常启动
docker version
7、运行 hello-world 镜像(执行此命令时,会先从本地寻找镜像,本地找不到就会去Docker Hub寻找,如果仍然找不到就会报错)
docker run hello-world
8、查看 hello-world 镜像
docker images
了解:卸载Docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
四、阿里云镜像加速
1、登录阿里云,选择容器镜像服务
2、选择镜像加速器
3、选择自己对应的操作系统
4、根据其内容进行配置(依次执行如下四条命令,注意每个服务器的命令是不同的)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://d3jwb2c4.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
五、Docker底层原理
Docker是一个C/S结构的系统,Docker的守护进程运行在主机上。通过socket从客户端W进行访问。
Docker-Server接受到Docker-Client的指令,就会执行这个命令。
Docker为什么比VM更快?
- Docker有着比虚拟机更少的抽象层
- Docker利用的是宿主机的内核,而VM需要搭建新的虚拟机内核