Docker学习笔记

Posted YuNansen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker学习笔记相关的知识,希望对你有一定的参考价值。

为什么使用Docker

在我们日常开发中,如果环境不一致,代码跑出来的效果肯定有很多问题的。Docker 就可以达到统一运行环境的目的。Docker 的精髓就在于可以保证各个环境的一致性。当我们在本地开发后要把程序放到线上, 由于各种原因本地开发的机器可能要替换等等。那么开发环境一但改变, 就要重新为程序安装各种服务与扩展. 这些工作也许不难, 但是做为开发不应该做重复的事。使用docker后, 我们先把环境编排好后, 以后只要一条命令就可以完成环境的部署。

Docker与虚拟机的比较

  • 虚拟机是虚拟了一个完整的系统,比如说我们可以在 Mac 电脑上启动一个 Windows 系统的虚拟机。虚拟机的优点是隔离性非常的强。缺点是因为是虚拟的完整的操作系统,所以性能损耗也比较大,也比较占用资源。
  • Docker 则是使用了 linux 底层的 Namespace 和 Cgroups 。Namespace 主要是进行隔离,而 Cgroups 则是控制、限制资源比如说 CPU、内存等。 因此优缺点跟虚拟机相反;性能损耗非常小,但是隔离的没有虚拟机彻底。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

Docker 三大核心概念

Docker的三大核心为:镜像、容器、仓库。

  • 容器:仓库类似于 Github 。容器就是镜像的一个运行示例。 Docker容器类似一个轻量级的沙箱,Docker利用容器来运行和隔离应用。
  • 镜像:镜像类似于托管在 Github 上的 WordPress 源代码。镜像也是静态的。我要想得到一个容器我们就需要运行一个镜像。
  • 仓库:如果我们想要一个可以访问的博客应用,我们需要把 WordPress 的代码运行起来。

Docker仓库

仓库是用来存放发布镜像的地方。Docker 官方提供了仓库服务 Docker Hub 。
docker pull 拉取的镜像就是从 Docker Hub 仓库中拉取的。

数据卷 Volumes

在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。
有些容器在运行的时候是会产生数据的,这种容器就叫做有状态容器,比如说 mysql 容器。
我们在创建镜像的时候希望保留的是 MySQL 各种配置以及扩展,并不想把 MySQL 的数据也打包到镜像中,数据卷就是为此场景而生的。
我们可以把日志文件这样备份一份到本机方便查看。

网络

默认容器在外部默认是不可访问的,比如进入到容器里面才可以操作,这对于提供网络请求的应用就不友好了。比如说我们常见的 nginx ,如果想让容器可被访问,这就需要使用 -P 参数分配端口了。进程接触到的文件系统和网络接口都是虚拟的,与本机的文件系统和网络接口是隔离的,因此需要定义容器与物理机的端口映射。

Dockerfile

Dockerfile 就是一个名叫 Dockerfile 的普通的文本文件,用来记录制作镜像的命令。
我们更推荐使用 Dockerfile 来构建镜像。
一般而言,Dockerfile 的内容分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
ADD 和 COPY 差不多,比较常见的场景是可以用来解压缩文件,除了需要解压文件,这个关键字就记住一句话就行了:官方推荐用 COPY ,并不建议用 ADD。

这里就是我个人对docker学习的一些笔记,在此记录以备查阅。

https://www.cnblogs.com/sparkdev/p/6357614.html
https://baijunyao.com/article/210
https://nicksxs.me/2020/03/08/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D/

以上是关于Docker学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Docker学习笔记-简介

Docker学习笔记7.Docker 仓库管理及Dockerfile

MySQL学习笔记一---字符乱码问题和字符集精髓

学习笔记 | 微服务与 Docker 是什么关系?

《深入理解Java虚拟机-第3版》 学习笔记,一文涵盖全书精髓

o'Reill的SVG精髓(第二版)学习笔记——第八章