大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:
1.每个应用在Linux服务器部署的时候,都需要一些准备工作,因为需要安装各自依赖和函数库,不同的应用依赖可能不同,也可能是版本不同,导致关系很复杂,产生兼容问题。
2.不同环境有差异,开发,测试、生产环境。比如不同环境操作系统不同,或者版本不同。
导致项目的部署特别费时。
docker将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包,将每个应用放到一个隔离容器去运行,避免互相干扰。
计算机内核与计算机硬件进行交互,并提供了操作硬件的指令,系统将内核指令封装为函数,便于程序员调用。
所以不同的系统,函数不同。
所以Docker会将系统函数库和应用依赖等一起打包,这样就算放到不同的操作系统,只要是Linux内核,就能运行。
Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
Docker如何解决开发、测试、生产环境有差异的问题?
虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
这样应用会先调用虚拟机中安装的系统,然后在调用Windows操作系统,然后再调用硬件。
Docker只是打包所需的依赖、函数库等,应用运行过程中,直接通过操作系统调用硬件。
特性 | Docker | 虚拟机 |
---|---|---|
性能 | 接近原生 | 性能较差 |
硬盘占用 | 一般为 MB | 一般为GB |
启动 | 秒级 | 分钟级 |
Docker和虚拟机的差异:
1、docker是一个系统进程;虚拟机是在操作系统中的操作系统
2、docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
容器之间是相互隔离的。镜像是只读的,比如Mysql数据库镜像,运行后,如果能写到镜像中,那么镜像就被修改了,所以镜像只读。容器会将镜像中的文件拷贝一份,进行写操作。
DockerHub:DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。
国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。
Docker是一个CS架构的程序,由两部分组成:
1、服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
2、客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
client可以向服务端发送命令
dockerbuild命令到达服务端,会被服务端守护进程接收处理,通过你提供的参数,构建镜像。
docker pull命令可以去远程Registry中拉取镜像到服务端。
docker run会使用镜像创建容器。
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
Docker CE 分为 stable
test
和 nightly
三个更新频道。
官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 Ubuntu上的安装。
需要是64位的以下系统之一
sudo apt-get remove docker docker-engine docker.io containerd runc
1、更新apt软件包索引并安装软件包,以允许apt通过HTTPS从远程仓库下载:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
2、添加docker GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3、使用以下命令设置stable repository。要添加nightly或test repository,请在下面的命令中的单词stable之后添加单词nightly或test(或两者)。
Docker Engine有三种类型的更新通道:stable、nightly和test:
Stable channel为您提供最新版本以供全面使用。
test提供了在正式发布(GA)之前准备好进行测试的预发布。
nightly为您提供下一个主要版本的最新版本。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4、下载Docker
直接下载最新版:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
下载指定版本:
列出版本:
apt-cache madison docker-ce
选择指定版本下载:
sudo apt-get install docker-ce=5:20.10.14~3-0~ubuntu-focal docker-ce-cli=5:20.10.14~3-0~ubuntu-focal containerd.io
5、检查是否成功
sudo docker run hello-world
service docker status
有active(runing)表示启动成功
service docker start #启动
service docker stop #关闭
service docker restart#重启
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
修改/etc/docker/daemon.json配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://9yux2oo3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd