Docker 实践经验(一)简介、安装与实操
@[toc]
一篇文章写三遍,去除杂质,提炼干货。这是一系列有温度的博客。
Docker 解决了什么痛点
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
这个技术其实早就可以实现了,叫快照。
但是快照很大,因为它需要将当前环境下所有内容都打包起来,不论你是否需要。
Docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----==系统平滑移植,容器虚拟化技术==。
Docker VS VMware
容器虚拟化技术
容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
容器比虚拟机快的底层原理
1、docker 有着比虚拟机更少的抽象层。2、docker 利用的是宿主机的内核,而不需要加载操作系统 OS 内核。
Docker 安装
这里有两个 Docker 的官网提供给大家:Docker 官网:http://www.docker.comDocker 仓库:·https://hub.docker.com
具体安装办法官网上都有,而我是在 Linux/Ubuntu 下安装的,所以就讲解如何在 Ubuntu 下安装 Docker 了。
==敲黑板==:不要用 Ubuntu 系统推荐的 snap 方式安装!!!谁用谁知道。
docker 基本组成
镜像:说到镜像应该都不陌生了吧。Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
容器:Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
仓库:集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub。
Docker 常用命令
设置开机启动: systemctl enable docker
如果你也像我一样常年不关机那就无所谓。
查看 docker 状态: systemctl status docker
列出本机所有的镜像:docker images
同一仓库源可以有多个 TAG 版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
下载镜像:docker pull 镜像名
如果对版本号、产家等数据都没有特殊需求的话,就直接 docker pull 镜像名。
如果有特殊需求的话,可以上 dockerhub 搜索,搜索不用登录。dockerhub 上会有后续指引。
删除镜像:docker rmi 某个 XXX 镜像名字/ID
这里建议使用 docker rmi 镜像名字:[tag]不要带 -f 呢,是给咱一次后悔的机会,万一那个镜像在用呢。使用名字而不用 id 呢,是可能会有多个镜像共用一个 ID,后面会看到。之所以要加 tag 呢,因为可能会有多个镜像一个名字的,前面已经看到咯。
修改镜像名:docker tag 旧镜像名:旧版本号 新镜像名:新版本号
比方说这样:
一般可以用来给镜像加前缀。没谁真的拿这个来给镜像改版本号或者改名字的,那不是弄虚作假嘛。这样子修改过去的两个镜像的 ID 是一样的,两者存在链接关系。
运行镜像:docker run [-itd] 镜像名:[tag] [bash]
如果就唯一版本,那带不带版本号就看你意愿了。
这是标准的格式,可防止一些幺蛾子。
镜像运行起来产生了容器,可以说容器是镜像运行的进程载体。
-it 的选项是让容器显式的运行,且持久。-d 的选项是让容器到后台自己玩去。bash 是既然容器已经放到明面上来了,总得给人家一个工作台吧。也可以是 sh,看个人喜好。
当然了,有其他参数。-h 自己看。
查看容器:docker ps -a
加一个 -a,是可以查看所有的容器,包括已故的。因为有时候你会觉得自己明明启动了容器为什么却没看到,不要怀疑你自己,它就是启动了,不过因为各种原因死了。比较多的原因有两种:
1、不适合后台运行的容器却没有 -it,导致它觉得自己没事干了,就下班了。2、某些依赖配置的服务配置文件写错了,比如说咱自定义的 mysql。
还有一种是没有资源了,不过这个可能性不高就是了。
切入容器:docker exec -it 正在运行的容器 ID bash
如果你是以 -d 的方式启动了容器,但是这时候你想显式的切入容器中操作。还是比如咱的 mysql,现在容器起来了,咱得进去启动 mysql 啊是吧,咱得去建库、建表,运维啊。
这时候就用 exec 方式来,这里推荐容器 ID,当然也可以用容器名,对,可以给容器起名字。
退出而不关闭容器:Ctrl + p + q
记住这个操作,记住,只有这个操作。我不会告诉你怎么关闭容器,怕你误操作了到时候哭都没地方哭。
如果你确定不想要一个容器了,显式删掉。
删除一个容器:docker rm 容器 ID
这里也不加 -f,给你一个后悔的机会。
虚悬镜像
这个可以拿去和面试官吹牛逼,你连虚悬镜像都懂。
什么是虚悬镜像?镜像没有仓库名或没有标签。这样的镜像会导致是后果呢?没什么后果,就是鸡肋了点而已,尸位素餐,看不顺眼。
删除所有虚悬镜像:
一次不够就多删几次,这个命令有时候会有点问题。
怎么样,觉得我这篇处处透着良心和温度吧。
版权声明: 本文为 InfoQ 作者【看,未来】的原创文章。
原文链接:【http://xie.infoq.cn/article/9a459b9eaad95d2fc2c2a783a】。文章转载请联系作者。
评论