2112-Docker笔记
Docker 简介
Docker 使用 Google
公司推出的 Go 语言 进行开发实现,基于
Linux
内核的 cgroup,namespace,以及
OverlayFS
类的 Union FS
等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于
LXC,从
0.7
版本以后开始去除 LXC
,转而使用自行开发的
libcontainer,从
1.11
版本开始,则进一步演进为使用 runC 和 containerd。
Docker
在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得
Docker
技术比虚拟机技术更为轻便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
基本概念
Image
root 文件系统 比如官方镜像 ubuntu:18.04
就包含了完整的一套 Ubuntu 18.04 最小系统的 root
文件系统。
Container
镜像(Image
)和容器(Container
)的关系,就像是面向对象程序设计中的
类
和 实例
一样,镜像是静态的定义,容器是镜像运行时的实体
使用镜像
获取镜像
1 |
|
一般情况下 docker 的镜像下载如果是教育网,那么速度非常高效。如果需要使用镜像,那么可以使用:
https://yeasy.gitbook.io/docker_practice/install/mirror
的教程进行安排。
镜像列表
1 |
|
删除镜像
1 |
|
使用容器
创建容器实例
1 |
|
-it
:这是两个参数,一个是-i
:交互式操作,一个是-t
终端。我们这里打算进入bash
执行一些命令并查看返回结果,因此我们需要交互式终端。--rm
:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动docker rm
。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用--rm
可以避免浪费空间。ubuntu:18.04
:这是指用ubuntu:18.04
镜像为基础来启动容器。bash
:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是bash
。
这里是交互式和镜像互动的方法。
更多操作在Docker Cheatsheet中学习
使用实例: Overleaf docker 安装
这里介绍一下在node6上配置overleaf的过程。
由于overleaf已经开源,所以可以使用他们的docker直接进行配置。
镜像拉取
1 |
|
配置文件拉取
1 |
|
需要修改的就是ports: - 80:80
,一般80端口都被apache或nginx占用了,改用其他端口如:ports: - 9000:80
启动sharelatex
1 |
|
安装latex包
1 |
|
创建admin
打开: http://hostname:9000/launchpad 创建admin即可
配置高亮
1 |
|
参考: 【1】https://www.jianshu.com/p/408a3b7a40b0 【2】https://yxnchen.github.io/technique/Docker%E9%83%A8%E7%BD%B2ShareLaTeX%E5%B9%B6%E7%AE%80%E5%8D%95%E9%85%8D%E7%BD%AE%E4%B8%AD%E6%96%87%E7%8E%AF%E5%A2%83/#%E5%AE%89%E8%A3%85%E5%B9%B6%E9%85%8D%E7%BD%AEShareLaTeX 【3】https://sparktour.me/2021/04/02/self-host-overleaf/