Docker 入坑指南
Docker 是一种基于 Linux 的容器化技术,类似于轻量的虚拟机。它采用 C/S 架构,使用 Go 语言开发。
版本
Docker 分为 2 个版本:社区版(Community Edition, CE)和企业版(Enterprise Edition, EE),顾名思义,企业版是收费的。
针对 macOS 10.10.3 和 Windows 10,Docker 还推出了 Docker Desktop,Docker Desktop 又分为 2 个渠道(channel),稳定渠道(Stable)和抢先渠道(Edge),需要注意的是,Docker Desktop 对系统是有要求的,例如,针对 Win10 的 Docker for Windows 因为要用到 Hyper-V 虚拟机,所以要求系统是 64 位专业版或企业版并开启 Hyper-V 功能。
针对老版本的 Windows 或 macOS,可以使用 Docker Toolbox,它会附带安装一个 VirtualBox 虚拟机。
使用 docker version 可以查看 docker 版本号,使用 docker info 可以查看 docker 详细信息,直接输入 docker 可以查看 docker 相关命令。
Git 小记
Git 是目前最流行的分布式版本控制系统(Distributed Version Control System, DVCS),类似的工具还有 Mercurial(由 hg 命令操作)等;在早期,人们常使用集中式版本控制系统(Centralized Version Control System,CVCS),其典型有 CVS、Subversion(SVN)等;现在,越来越多的人开始使用更为优秀的分布式版本控制系统,所谓版本控制,即可以随时记录并切换文件的不同版本。
安装
配置
Git 共有 3 个配置文件,分别是:
/etc/gitconfig文件用于配置所有用户的配置信息,使用git config --system命令配置- 某个用户家目录下的
.gitconfig文件只适用于该用户,使用git config --global命令配置 - 当前 Git 仓库的
.git/config仅针对当前项目,直接使用git config命令进行配置
注意:每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
按照个人偏好,针对新安装的 Git 环境,会配置如下信息:
1 | # 配置提交时使用的用户名和邮箱,必须配置 |
另外,Git 默认使用的编辑器是 Vim,若要配置成自己喜欢的编辑器(如 Emacs),可使用命令:git config --global core.editor emacs。
最后,你可以使用 git config --list 来查看所有配置信息。
SSH 协议分析
SSH(Secure Shell)即安全外壳协议,是一种位于应用层的加密的网络传输协议,虽然任何网络服务都可以通过 SSH 实现安全传输,但其最常见的用途还是远程登录,是 Telnet 等非安全 Shell 的替代品。
OpenSSH 的运行机制
SSH 是一种协议,其实现多种多样,目前使用最广泛的实现是 OpenSSH 项目。当使用 ssh user@host 命令进行登录时,所完成的整个过程如下:
- 远程主机收到用户的登录请求,把自己的公钥发给用户
- 用户使用这个公钥,将登录密码加密后,发送给远程主机
- 远程主机用自己的私钥,解密登录密码,若密码正确,则同意用户登录
- 后续过程中,用户发送的信息都采用此方式进行加密发送
WSL 相关问题解决
随着时间的发展,WSL 变化了很多,本文所描述的主体为 WSL 1,有关 WSL 2 的相关内容请参考 升级到 WSL 2。
名称问题
最早这个项目命名为 Bash on Ubuntu on Windows,随后改名为 Windows Subsystem for Linux(适用于 Linux 的 Windows 子系统),即 WSL,值得肯定的是,随着 Windows 10 逐渐更新,慢慢统一了命名。
Hyper-V 相关问题解决
全屏问题
由于 Hyper-V 最初是为服务器设计的,所以到目前为止,Hyper-V 对于全屏的支持没有 VMware 做得好,同样,Hyper-V 也不能像 VMware 那样随意更改窗口大小,这多少显得很不方便。
对于 Windows 虚拟机的全屏操作,目前较为理想的解决方案是使用远程桌面连接,记得要在虚拟机中开启远程桌面连接功能;而对于 Linux 虚拟机的全屏操作,可以通过修改 /etc/default/grub 文件,更改其中 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1920x1080"(注意是 x 不是 *),接着执行 update-grub 并重启即可。
Base 编码家族
Base64
Base64,顾名思义是一种基于 64 个可打印字符来表示二进制数据的表示方法,这 64 个字符分别为 A-Z、a-z、0-9 以及 + 与 /。64 个字符可用 6 个比特位表示,3 个字节有 24 个比特位,对应于 4 个 Base64 单元,所以编码后的数据要比原始数据略长,为原来的 4/3。Base64 索引表如下所示:
| 数值 | 字符 | 数值 | 字符 | 数值 | 字符 | 数值 | 字符 |
|---|---|---|---|---|---|---|---|
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| 2 | C | 18 | S | 34 | i | 50 | y |
| 3 | D | 19 | T | 35 | j | 51 | z |
| 4 | E | 20 | U | 36 | k | 52 | 0 |
| 5 | F | 21 | V | 37 | l | 53 | 1 |
| 6 | G | 22 | W | 38 | m | 54 | 2 |
| 7 | H | 23 | X | 39 | n | 55 | 3 |
| 8 | I | 24 | Y | 40 | o | 56 | 4 |
| 9 | J | 25 | Z | 41 | p | 57 | 5 |
| 10 | K | 26 | a | 42 | q | 58 | 6 |
| 11 | L | 27 | b | 43 | r | 59 | 7 |
| 12 | M | 28 | c | 44 | s | 60 | 8 |
| 13 | N | 29 | d | 45 | t | 61 | 9 |
| 14 | O | 30 | e | 46 | u | 62 | + |
| 15 | P | 31 | f | 47 | v | 63 | / |