在这个富 web
时代,应用变得越来越强大,与此同时也越来复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化成为中间的必要桥梁。
Docker 是什么?
“
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 版本开始,则进一步演进为使用 runC 和 containerd。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。——摘自百度
”
通俗讲解
为了更好的理解 Docker
是什么, 用一个故事来说明吧:
我需要盖一个大别野,于是我搬石头、砍木头、画图纸、盖别野。一顿操作,终于把大别野盖好了。
但是住一段时间,我觉得这个地方不是很好,每天一群‘小仙女’在门口跳广场舞,太吵了,想搬走。这时候到一个新的地方,到了海边。又开始搬石头、砍木头、画图纸、盖别野。
每次我想换个地方住,还要再重复的做一些事情。在我正苦恼的时候,有一个魔法师教会我一个魔法,这种魔法可以把我盖好的别野进行复制。做成镜像
, 放入背包。
到了一个地方,我就使用这个镜像
, 复制一套, 即可入住,简直太爽了。
是不是很神奇?对应到我们的项目中来,房子就是项目本身,镜像就是项目的复制,背包就是镜像仓库。如果要动态扩容,从仓库中取出项目镜像,随便复制就可以了。Build once,Run anywhere!
不用再关注版本、兼容、部署等问题,彻底解决了「上线即崩,无休止构建」的尴尬。
Docker 的架构
Docker 包括三个基本概念:
-
镜像:是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。 -
容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 -
仓库:集中的存储、分发镜像的服务
Docker 常用命令
辅助命令
# 1.安装完成辅助命令
docker version -------------------------- 查看docker的信息
docker info -------------------------- 查看更详细的信息
docker --help ------------------------- 帮助命令
Images 镜像命令
# 1.查看本机中所有镜像
docker images -------------- 列出本地所有镜像
-a 列出所有镜像(包含中间映像层)
-q 只显示镜像id
# 2.搜索镜像
docker search [options] 镜像名 ------------------- 去dockerhub上查询当前镜像
-s 指定值 列出收藏数不少于指定值的镜像
--no-trunc 显示完整的镜像信息
# 3.从仓库下载镜像
docker pull 镜像名[:TAG|@DIGEST] ----------------- 下载镜像
# 4.删除镜像
docker rmi 镜像名 -------------------------- 删除镜像
-f 强制删除
Container 容器命令
# 1.运行容器
docker run 镜像名 -------------------------- 镜像名新建并启动容器
--name 别名为容器起一个名字
-d 启动守护式容器(在后台启动容器)
-p 映射端口号:原始端口号 指定端口号启动
例:docker run -it --name myTomcat -p 8888:8080 tomcat
docker run -d --name myTomcat -P tomcat
# 2.查看运行的容器
docker ps -------------------------- 列出所有正在运行的容器
-a 正在运行的和历史运行过的容器
-q 静默模式,只显示容器编号
# 3.停止|关闭|重启容器
docker start 容器名或者容器id -------------- 开启容器
docker restart 容器名或者容器id --------------- 重启容器
docker stop 容器名或者容器id --------------- 正常停止容器运行
docker kill 容器名或者容器id --------------- 立即停止容器运行
# 4.删除容器
docker rm -f 容器id和容器名
docker rm -f $(docker ps -aq) -------------- 删除所有容器
# 5.查看容器内进程
docker top 容器id或者容器名 ------------------ 查看容器内的进程
# 6.查看查看容器内部细节
docker inspect 容器id ------------------ 查看容器内部细节
# 7.查看容器的运行日志
docker logs [OPTIONS] 容器id或容器名 ------------------ 查看容器日志
-t 加入时间戳
-f 跟随最新的日志打印
--tail 数字 显示最后多少条
# 8.进入容器内部
docker exec [options] 容器id 容器内命令 ------------------ 进入容器执行命令
-i 以交互模式运行容器,通常与-t一起使用
-t 分配一个伪终端 shell窗口 bash
# 9.容器和宿主机之间复制文件
docker cp 文件|目录 容器id:容器路径 ----------------- 将宿主机复制到容器内部
docker cp 容器id:容器内资源路径 宿主机目录路径 ----------------- 将容器内资源拷贝到主机上
# 10.数据卷(volum)实现与宿主机共享目录
docker run -v 宿主机的路径|任意别名:/容器内的路径 镜像名
注意:
1.如果是宿主机路径必须是绝对路径,宿主机目录会覆盖容器内目录内容
2.如果是别名则会在docker运行容器时自动在宿主机中创建一个目录,并将容器目录文件复制到宿主机中
# 11.打包镜像
docker save 镜像名 -o 名称.tar
# 12.载入镜像
docker load -i 名称.tar
# 13.容器打包成新的镜像
docker commit -m "描述信息" -a "作者信息" (容器id或者名称)打包的镜像名称:标签
详细的原理,在后续学习会做个整体的笔记记录,欢迎各位大佬评论留言讨论。
如果我的文章对你有所帮助,还请帮忙点赞、在看、转发一下,你的支持会激励我继续坚持下去,非常感谢!
你还可以把我的公众号设为「星标」
,这样当公众号文章更新时,你会在第一时间收到推送消息,避免错过我的文章更新。
原文始发于微信公众号(白砂):Docker学习之基础学习
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/19999.html