一篇文章写三遍,去除杂质,提炼干货。这是一系列有温度的博客。
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
这个技术其实早就可以实现了,叫快照。
但是快照很大,因为它需要将当前环境下所有内容都打包起来,不论你是否需要。
Docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。
容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
1、docker有着比虚拟机更少的抽象层。 2、docker利用的是宿主机的内核,而不需要加载操作系统OS内核。
这里有两个Docker的官网提供给大家: Docker 官网:http://www.docker.com Docker 仓库:·https://hub.docker.com
具体安装办法官网上都有,而我是在 Linux/Ubuntu 下安装的,所以就讲解如何在 Ubuntu 下安装Docker 了。
敲黑板:不要用 Ubuntu 系统推荐的 snap 方式安装!!!谁用谁知道。
安装步骤:
1.更新Ubuntu的apt源索引
$ sudo apt-get update
2.安装包允许apt通过HTTPS使用仓库
$ sudo dpkg --configure -a
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
3.添加Docker官方GPG key
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.设置Docker稳定版仓库
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5.更新apt源索引
$ sudo apt-get update
6.安装最新版本Docker CE(社区版)
$ sudo apt-get install docker-ce
查看安装Docker的版本
$ docker --version
检查Docker CE 是否安装正确
$ sudo docker run hello-world
如果你也像我一样常年不关机那就无所谓。
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
如果对版本号、产家等数据都没有特殊需求的话,就直接 docker pull 镜像名。
如果有特殊需求的话,可以上 dockerhub 搜索,搜索不用登录。 dockerhub 上会有后续指引。
这里建议使用 docker rmi 镜像名字:[tag] 不要带 -f 呢,是给咱一次后悔的机会,万一那个镜像在用呢。 使用名字而不用 id 呢,是可能会有多个镜像共用一个 ID,后面会看到。 之所以要加 tag 呢,因为可能会有多个镜像一个名字的,前面已经看到咯。
比方说这样:
root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# docker images runoob/ubuntu:v3
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v3 4e3b13c8a266 3 months ago 136.3 MB
一般可以用来给镜像加前缀。没谁真的拿这个来给镜像改版本号或者改名字的,那不是弄虚作假嘛。 这样子修改过去的两个镜像的 ID 是一样的,两者存在链接关系。
如果就唯一版本,那带不带版本号就看你意愿了。
这是标准的格式,可防止一些幺蛾子。
镜像运行起来产生了容器,可以说容器是镜像运行的进程载体。
-it 的选项是让容器显式的运行,且持久。 -d 的选项是让容器到后台自己玩去。 bash 是既然容器已经放到明面上来了,总得给人家一个工作台吧。也可以是 sh,看个人喜好。
当然了,有其他参数。-h 自己看。
加一个 -a,是可以查看所有的容器,包括已故的。因为有时候你会觉得自己明明启动了容器为什么却没看到,不要怀疑你自己,它就是启动了,不过因为各种原因死了。 比较多的原因有两种:
1、不适合后台运行的容器却没有 -it,导致它觉得自己没事干了,就下班了。 2、某些依赖配置的服务配置文件写错了,比如说咱自定义的 mysql。
还有一种是没有资源了,不过这个可能性不高就是了。
如果你是以 -d 的方式启动了容器,但是这时候你想显式的切入容器中操作。还是比如咱的 mysql,现在容器起来了,咱得进去启动 mysql 啊是吧,咱得去建库、建表,运维啊。
这时候就用 exec 方式来,这里推荐容器 ID,当然也可以用容器名,对,可以给容器起名字。
记住这个操作,记住,只有这个操作。 我不会告诉你怎么关闭容器,怕你误操作了到时候哭都没地方哭。
如果你确定不想要一个容器了,显式删掉。
这里也不加 -f,给你一个后悔的机会。
这个可以拿去和面试官吹牛逼,你连虚悬镜像都懂。
什么是虚悬镜像?镜像没有仓库名或没有标签。 这样的镜像会导致是后果呢?没什么后果,就是鸡肋了点而已,尸位素餐,看不顺眼。
删除所有虚悬镜像:
docker rmi $(docker images -q -f dangling=true)
一次不够就多删几次,这个命令有时候会有点问题。
怎么样,觉得我这篇处处透着良心和温度吧。