Docker
Docker
Docker是什么?
Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
Docker官方文档比较全,建议有能力的读一下官方文档。
相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。
虚拟机,类似于“子电脑”
在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
沙箱
它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。

容器和虚拟机的对比
正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。
我们具体来看看Docker。
大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
想要搞懂Docker,其实看它的两句口号就行。
第一句,是“Build, Ship and Run”。

也就是,“搭建、发送、运行”,三板斧。
举个例子:
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。

结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。
但是,跑来一个老巫婆,教会我一种魔法。
这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。

等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。

怎么样?是不是很神奇?
所以,Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。
Docker技术的三大核心概念,分别是:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
Docker的三个概念
- 镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
- 容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
- 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
Docker的安装和卸载
Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:
[root@xxx ~]# docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64
查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。
CentOS安装Docker
- 进入root用户下,进行命令操作:
- su
- 输入root的密码
- 卸载Docker旧的安装包
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装需要的安装包
yum install -y yum-utils
-
设置镜像仓库
-
国外的镜像仓库
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo -
阿里云的镜像仓库,适合国内用户使用
yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
-
更新yum索引安装包
yum makecache fast
- 安装Docker相关的(可能会出错,多试几次)
yum install docker-ce docker-ce-cli containerd.io
- 启动Docker服务
systemctl start docker
- 查看Docker是否安装完成
docker --version
- 通过Hello World 来验证
docker run hello-world
- 查看所有的Docker镜像
docker images
- 查看docker启动情况
sudo service docker status
Docker卸载
- 卸载依赖项
yum remove docker-ce docker-ce-cli containerd.io
- 删除资源
rm -rf /var/lib/docker
Docker相关指令
Docker基本命令
| 命令名 | 指令 |
|---|---|
| 查看所有镜像 | docker images |
| 删除镜像(会提示先停止使用中的容器) | docker rmi 镜像name/镜像id |
| 查看所有容器 | docker ps -a |
| 查看容器运行日志 | docker logs 容器名称/容器id |
| 停止容器运行 | docker stop 容器name/容器id |
| 终止容器后运行 | docker start 容器name/容器id |
| 容器重启 | docker restart 容器name/容器id |
| 删除容器 | docker rm -f 容器name/容器id |
删除Docker镜像
docker rmi -f 镜像id (可以根据 docker images 查询)
docker rmi -f $(docker images) --删除所有镜像
查询Docker的详细信息
docker stats dockerid
停止一个正在运行的容器
- docker stop
此方式常常被翻译为优雅的停止容器,docker stop 容器ID或容器名 .
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态 .
docker stop -t=60 容器ID或容器名
- docker kill
docker kill 容器ID或容器名 :直接关闭容器
stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器
停止全部运行中的容器
docker stop $(docker ps -q)
删除全部容器
docker rm $(docker ps -aq)
一条命令实现停用并删除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)
删除悬空的镜像
docker container prune -f
定时清空镜像和脚本
[root@VM_0_42_centos opt]# cat clean.sh
sh /opt/docker/lock.sh -t clean -a lock
docker image prune -a -f
docker container prune -f
sh /opt/docker/lock.sh -t clean -a unlock
dt=$(date)
echo time is $dt
通过Hello-World映像验证是否安装成功
docker run hello-world
原文出处
Docker教程:https://www.runoob.com/docker/docker-tutorial.html
Docker 官网:https://www.docker.com
Github Docker 源码:https://github.com/docker/docker-ce
只要一小时,零基础入门Docker:https://zhuanlan.zhihu.com/p/23599229
10分钟看懂Docker和K8S:https://zhuanlan.zhihu.com/p/53260098

浙公网安备 33010602011771号