初识Docker
前言
Docker为什么会出现
一款产品在开发和上线面向用户通常会有两套环境,环境的部署都是非常麻烦的,比如我们发布Java的war项目需要有java环境、Tomcat等服务器还有相应的配置,并且有可能环境还不能跨平台。
那么这个时候就产生了两个角色,一个是开发人员,一个是运维。
这个时候就产生了个问题:我的程序在我的电脑可以运行,但是到其他环境就不可行了,或者版本更新之后导致一些服务不可用,那么对运维的考验就很大了。
但是作为一名Java全栈开发,运维的知识也必不可少,因此解决这种环境配置费时费力的问题,我们通常希望在发布产品的时候也把我们的环境配套带过去,因为我们的产品在自己环境测试可以保证可用,我们希望我们在发布的时候也附带上我们的环境,配套发布,Docker就是做这么一件事情!
-
传统:开发者负责开发生成jar包,运维来负责部署
-
现在:开发者打包部署上线一套流程做完!
java->apk(应用)->发布(应用商店)->下载apk->安装即可用
java->写一个jar->打包项目带上环境(镜像)->Docker镜像(Docker仓库:商店)->下载我们发布的镜像->直接运行即可
这张图是一条鲸鱼,上面有很多的集装箱,都放在一条船上,代表一个环境可以同时有多套东西,互不影响。
Docker的思想来自于集装箱,隔离是核心思想,所有的东西打包装箱,每一个箱子是互相隔离的,我们不用担心环境、端口冲突等问题,将服务器资源运用到极致。
Docker官方地址
- 仓库地址:
https://hub.docker.com/
- 文档地址:
https://docs.docker.com/
Docker能做什么
之前的虚拟机技术:
我们在虚拟机中有我们的内核和运行库,可以运行多个App,模拟了一台电脑出来,但是我们仅仅是想运行程序或者简简单单写一个代码而已,并不需要安装整台电脑,这就非常的笨重,并且启动速度很慢
- 资源占用十分多
- 启动慢,冗余多
现在容器化技术:
容器化技术不是模拟一个完整的操作系统
我们只需要拿到核心部分即可,所以内核只需要拥有核心内核即可,每一个容器都互相隔离,互不影响,拥有各自单独的配置,并且可以在同一环境下运行。
比较Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机,容器是没有自己的内核的,也没有虚拟我们的硬件,所以非常的轻便
- 每个容器间是互相隔离的,每个容器内都有属于自己的文件系统,互不影响,安全可靠
- 更加快速的交付和部署,一键运行打包镜像发布测试
- 更便捷的升级和扩缩容
- 更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的,更高效的计算资源利用,它是内核级别的虚拟化,一个物理机可以运行多个容器。
Docker安装
Docker的基本组成
三大组件:
- 镜像(image)
Docker镜像就跟一个模板一样,可以通过这个模板来创建容器服务,通过运行就可以开启一个服务,通过这个镜像可以创建多个容器 - 容器(container)
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建,可以启动、停止、删除,我们可以把这个容器理解为一个简单的Linux系统 - 仓库(repository)
仓库就是存放镜像的地方
仓库分为共有仓库和私有仓库
Docker Hub、阿里云、华为云等等容器服务
环境准备
- 需要会Linux基础
- Ubuntu
- 使用Xshell连接远程服务器进行操作
安装
https://docs.docker.com/get-docker/
进入连接之后,点击Docker for Linux
进行下载
我们在左边选择Install on Ubuntu
在这里可以看到版本要求,我们需要购买相应版本的云服务器
使用命令:lsb_release -a
查看
我们这里的版本是:Ubuntu Bionic 18.04.6 (LTS),并且Codename是bionic,跟Docker版本要求符合。
卸载老版本
使用如下命令:
apt-get remove docker docker-engine docker.io containerd runc
安装基本的环境
apt update
apt-get install ca-certificates curl gnupg lsb-release
安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入软件源信息
我们这里使用阿里云的镜像:
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安装新版本
apt-get install docker-ce docker-ce-cli containerd.io
docker-ce 社区版
docker-ee 企业版
官方推荐社区版
启动docker
systemctl start docker
查看是否安装成功
使用命令:
docker version
这样就说明安装成功了,我们的docker是基于go语言来设计的。
HelloWorld测试
docker run hello-world
这里的信息很多,我们来看看:
首先,它说它找不到hello-world
这个镜像
接着,它去远程拉取镜像
然后,说明拉取成功,并且有签名信息
最后,返回信息,安装成功
查看一下下载的这个helloworld镜像
docker images
卸载Docker
apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
rm -rf /var/lib/docke
rm -rf /var/lib/containerd
配置阿里云镜像加速
我们进入阿里云控制台,找到容器镜像服务
https://home.console.aliyun.com/home/dashboard/ProductAndService
找到镜像加速器
配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://84mfby27.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
这样就配置完成了。