Michael.W谈Docker 第一期-docker的架构、安装与服务操作命令
1 文字基础
1.1 啥是Docker?
网上找到的话:
Docker 是一个开源的应用容器引擎,是直接运行在宿主操作系统之上的一个容器,使用沙箱机制完全虚拟出一个完整的操作,容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,及自己的资源管理能,使同一台宿主机上可以友好的共存多个容器。
我的理解:
大家都用过虚拟机。虚拟机就是通过虚拟化技术,让另外的一个系统跑在你当前的系统中。完全模拟,感受不到任何不同。但是虚拟机会占用大量的系统资源,有过开发经验的朋友一定有如下的感受,你的小Mac Pro开一个VMware Fusion还好,要是开上三个或者四个,基本就成PPT了。docker就很好地解决了这个问题。
通俗的理解就是docker就像在你的电脑中开出一个个容器,每个容器里面都跑着一个小系统。
1.2 Docker与虚拟机的区别
虚拟机是利用硬件来辅助虚拟化,使客户机操作系统可以独立运行。实现完全的虚拟化功能。
Docker是操作系统层面的虚拟化,将内核分割成几个独立单元。这样就好像一个大内核分成了若干小内核,每个小内核中分别跑不同的小系统。这些小的实例被称为容器、虚拟引擎、虚拟专用服务器。每个容器的进程是相互独立的。
二者都是属于软件虚拟化,而虚拟机是需要有硬件支持的软件虚拟化,Docker则不需要硬件支持。
虚拟机更擅长于彻底隔离整个运行环境。比如你上阿里云买的云服务器并不是一个真的主机箱,而是阿里在他的云服务器上单独为你安装了一个虚拟机而已。
Docker通常用于隔离不同的应用。比如你的电脑想搞个服务器,需要nginx、fastDFS、mysql、redis等。一般来说,处于性能的考虑,每个东西都需要一个单独的主机来运行。但是对于蚂蚁花呗里只剩200元可用余额的我来说,这简直是不可能的。那么我就可以用Docker技术在一台主机上模拟出许多不同的机器分别跑不一样的应用程序的效果。
1.3 Docker版本
Docker-CE(不要钱的,我的最爱)
Docker-EE(要钱的,我就不去了解了)
Docker-CE下还分Stable版和Edge版。S一个季度更新一次,E一个月更新一次。所以我认为E就是一个测试版本,将稳定的功能组成一个S版本发行。
2 Docker架构
网上找到一个图片:
Client:
就是我们使用的Linux呀、Mac呀,反正你能通过指令启动和操作Docker的就算!
Docker_HOST:
就是一个你运行的软件。他是后台服务,无法直接和码农以及码畜进行人机交互。
它是一个老总管,专门管理Docker容器和Docker镜像。
Images:
就是Docker的镜像文件。通俗的将就是一些操作系统的磁盘文件,是死的。如果你想使用它,必须用魔法将它变成对应的容器。用户可以自己制作镜像,也可以从网上下载。我建议后者!
Containers:通过镜像文件生成的实例,可以被使用!也可以认为,镜像文件在磁盘中存储着,只要你“启动”那些无生命的镜像文件,他们就变成了容器。
Registry:
一个专门来存放镜像的仓库,有点像Github上的repositories。
Docker Hub是官方提供的镜像仓库。你需要什么就直接从上面下载,然后存储在你自己的Registry中。当你想使用时,启动Registry中的镜像成为容器!
3 Docker的安装与删除
3.1 安装篇
我的系统是ubuntu 18.04
# 安装软件支持
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
# 将阿里云的docker软件包添加进apt仓库,同时把下载的key添加到本地trusted数据库中。
$ sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新软件源
$ sudo apt-get update
# 安装docker
$ sudo apt-get install docker-ce -y
# 测试docker
$ docker version
当出现以上画面时,表明安装成功。
关于出现的打印信息:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/version: dial unix /var/run/docker.sock: connect: permission denied
后面会有讲解如何解决。
3.2 删除篇
# 删除对应的配置文件和应用程序
sudo apt-get purge docker-ce
# 只删除应用程序
sudo apt-get remove docker-ce
# 删除身份认证目录 /etc/docker
# 删除存放镜像的目录 /var/lib/docker
$ sudo rm /etc/docker /var/lib/docker -r
4 Docker加速器的设置
从Docker官方下载所需要的镜像时,会发现速度极其慢。用过Linux的朋友都懂上国外的软件源上下载东西是多么痛苦。
设置Docker加速器:
登录网站:https://dashboard.daocloud.io
用微信或者Github注册一个账户,点击右上方的小火箭
选择你的系统,复制对应的字符串,在终端中执行:
# 执行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 重启docker服务
sudo systemctl restart docker
5 dial unix /var/run/docker.sock: connect: permission denied问题
这个问题是由/var/run/docker.sock文件的权限导致。
ll /var/run/docker.sock
可见权限:
srw-rw---- 1 root docker 0 3月 2 14:35 /var/run/docker.sock=
5.1解决方法1
sudo docker version
每次都需要加sudo
5.2 解决方法2(一劳永逸,推荐)
将你的用户添加到docker用户组中
# 检测docker组是否存在,搜索 docker 关键字
cat /etc/group
# 将当前用户添加到docker组中
#sudo gpasswd -a 你的用户 要添加到的组(我的用户名为michael.w)
sudo gpasswd -a michael.w docker
# 进行组的切换
newgrp - docker
# 重启docker服务器服务
sudo systemctl restart docker
# 测试
docker version
问题解决
5.3 解决方法3
# 修改/var/run/docker.sock文件权限
sudo chmod 666 docker.sock
每次重启docker服务时,/var/run/docker.sock文件就会被重新生成。所以,一旦重新生成,就需要再一次修改权限。
6 Docker服务操作命令
# 启动
sudo systemctl start docker
# 关闭
sudo systemctl stop docker
# 重启
sudo systemctl restart docker
# 查看状态
sudo systemctl status docker
active表明Docker正在运行,inactive表示停止。之后按q退出。
ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
公众号名称:后现代泼痞浪漫主义奠基人