什么是Docker
我以初学者的角度来说,网络上各种解释已经非常到位了。然而作为初学者,看到那些个架构图还是非常云里雾里的。因为学习都是从最基础的开始,个人偏好以实战为主。所以简单来张图吧。现存的Docker教程起手都是对架构一通解释,其实没有太大必要,个人认为初学者需要先做出效果然后再学习对应架构中的位置会更加清晰,当然,这需要有点计算机基础。
就三张图吧 图片来源网络,也是感觉挺不错就拿过来了,前提是了解过kvm以及其他的虚拟化比如vmware、hyper-v之类的
Docker实际上就是一个应用程序+一堆运行库+一个rootfs组成的环境,由于没有hypervisor层,所以各方面性能都会比VM要强,但是隔离性也差,目前作为初学者知道这些就可以了,更适用于部署应用的场景,如果衍生到云计算可以说是PaaS的角色。
如何安装Docker
Docker的安装非常简单,在这个链接里可以找到官网的安装方法。Docker提供了rpm,deb和二进制包的安装方法,在桌面系统如MacOS和Windows还有桌面版应用(Windows中的不太好用)。这边采用官网的方法+阿里云的源去安装(主要是国外源太慢了)。
Docker的版本
Docker一共有三个版本,这边先引用一段官方的解释。
Docker Engine has three types of update channels, stable, test, and nightly:
- The Stable channel gives you latest releases for general availability.
- The Test channel gives pre-releases that are ready for testing before general availability (GA).
- The Nightly channel gives you latest builds of work in progress for the next major release.
简单来说 Docker目前有三个版本,Stable(稳定),Test(测试)和Nightly(实时更新版本)
前两个比较好理解 有点像游戏的正式服和测试服,而nightly主要是开发者维护的一个版本,一般是白天将各自的代码提交到一个中心,晚上做编译得到的版本,这种版本功能新,bug也多,适合一些关注Docker的开发者和有一定动手解决bug能力的人。作为初学者使用Stable版就够了。
事前准备
官网的流程有一个卸载旧版本docker的命令,如果需要的话可以执行,这篇教程使用的是新部署的CentOS7,所以没有这一步。不过还是把命令贴上来
1 | sudo yum remove docker \ |
接下来就是安装了。由于不管是光盘中的源还是CentOS的自带源都没有安装Docker的部分,所以我们还需要指定一个源让系统去下载Docker的安装包
1 | sudo yum install -y yum-utils |
然后就可以进行docker安装了
1 | sudo yum install -y docker-ce-cli docker-ce containerd.io |
启动docker
跟其他服务一样 使用systemctl就可以启动docker了
1 | systemctl start docker |
之后可以使用 docker version
命令验证docker是否安装成功
1 | docker version |
如果出现以上一些版本信息说明安装到位了。
更改Docker Registry源位置
首先了解一下何为Docker Registry。就如同目前我们使用的CentOS一样,Docker需要一个远程的Image仓库。我们启动各种各样的基于Docker的服务是先从Registry将Image下载下来,再将Image放到相应的Container里。当然Image,Registry都可以自己制作,不依赖外网也是完全可以运行的。不过这边先用国内的仓库感受一下Docker的基本操作和用法。然后再学习如何搭建自己的Registry
首先注册一下阿里云,用支付宝或者淘宝账户就能登录了。
然后找到控制台,找容器镜像服务,开通一下就行。届时会给一个属于自己的加速链接,后面会用上。
1 | sudo mkdir -p /etc/docker |
跑一下Hello World
1 | docker run hello-world |
这里能看到 Docker run的流程是先在本地查找image 所以才会报错Unable to find image 'hello-world:latest' locally
之后在远端查找相应的image。如果有的话就下载下来,没有的话就会再次报错。hello-world这个镜像可以说是测试用的初始镜像,所以会将镜像下载下来。镜像默认放在/var/lib/docker
里。
1 | ls /var/lib/docker/ |
基本命令
常用命令可以在Docker的官方文档这里找到。本文摘抄一些基本的,常用的命令(增删改查)进行讲解。
镜像命令
docker images
可以看到所有的镜像和镜像的tag,可以通过-a
参数看到所有的镜像,通过-f
过滤,通过-q
只显示id等。具体如下:
Name, shorthand Default Description --all , -a
Show all images (default hides intermediate images) --digests
Show digests --filter , -f
Filter output based on conditions provided --format
Pretty-print images using a Go template --no-trunc
Don’t truncate output --quiet , -q
Only show numeric IDs https://docs.docker.com/engine/reference/commandline/images/
1 | docker images |
REPOSITORY 镜像的仓库源,一个名字
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 创建时间
SIZE 镜像的大小
关于可选项:
- -a:列出所有镜像
- -q:只显示镜像id