学习 Docker, 免不了的就是搭建环境了. 搭建环境是一个复杂的工程, 而且还是相当费时间的, 不过话又说回来了, 磨刀不误砍柴工嘛, 光有理论是不够的, 还需要自己动手实践才行.
在学习 Docker 之前, 最好能熟练掌握一门编程语言, 如果想深究 Docker 的深层次原理, 这里建议最好学习下 Go 语言, 毕竟 Docker 就是用 Go 语言编写的嘛, 后续的 Kubernetes 也是用 Go 语言编写的. 就我个人来说, Go 语言还是要比 C/C++ 容易上手的, 如果你还是在校的学生, 恰巧又看到了这本书的话, 那说明你对容器技术还是有一定好奇心的, 这是好事, 接下来你就可以选择 Go 语言作为你深耕的编程语言啦. 虽然说现在 python 语言比较火, 这得益于近年来机器学习, 人工智能的兴起. 不过也不要难过, Go 版本的 tensorflow 也已经在路上了, 相信不久的将来, Go 也可以在深度学习领域发出自己的光和热.
1.1 VMware 安装
目前 docker 在 Windows 系统支持的并不好, 但是我们大多数的主机都装的是 Windows 系统, 这样我们可以通过虚拟机软件 VMware 安装我们需要的 Linux 环境. VMware 公司是全球云基础架构和移动商务解决方案厂商, 更多关于此公司的详细信息留给读者自行谷歌和百度.
在安装软件之前那就是下载软件, 可以登录官网下载(下载链接: https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/14_0
), 编写本书时, 下载的版本为 VMware-workstation-full-14.1.3-9474260.exe, 需要注意的是, 在安装比较高版本的 Linux 镜像的时候, 需要 VMware 的版本比较高, 否则会产生兼容问题, 因此建议大家下载最新版本用于后续的学习使用. VMware 安装, 网上的教程比较多, 基本来说, 按照默认的配置基本就能安装成功.
1.2 Ubuntu-18.04 安装
在虚拟机安装完成之后, 就可以安装我们的 Linux 镜像软件了, 目前的 Linux 版本比较多, 像 Ubuntu,CentOS,RedHat,EulerOS 等等, 支持 Docker 的镜像是有要求的, Docker 依赖 Linux 的 Namespcae 和 Cgroup 两个特性, 因此需要内核的版本最少在 3.10 以上, 本书选择对 Docker 支持比较好的 Ubuntu-18.04 用于学习和研究, 其内核版本为 4.15.0-29-generic.
Ubuntu-18.04 的 ISO 镜像文件可以从 Ubuntu 的官网进行下载(下载链接: http://cdimage.ubuntu.com/releases/18.04/release/ ), 在下载镜像的时候, 推荐下载离线版的镜像, 在线版的镜像需要连接网络才能完成安装, 而我们大多的时候安装镜像时网络还没有打通, 会导致安装失败, 在线版的镜像文件名中带有 live 字样(Ubuntu-18.04.1-live-server-amd64.iso), 为了便于安装, 下载的是离线版本的镜像(Ubuntu-18.04.1-server-amd64.iso). 这里还需要再啰嗦一下, 个人认为安装 server 版本已经足以满足我们的需求了, 并且全程操作也无需用到桌面, 因此建议不安装 desktop 版本, 毕竟我们的镜像是运行在虚拟机中, 启动桌面系统本身就比较耗费性能, 会对我们的宿主机提出更高的要求.
镜像下载完成后, 就可以用 VMware 安装我们下载好的镜像文件了, 这种教程网上也比较多, 在设置虚拟机的规格时, 最好根据宿主机的规格进行选择, 一般设置 2C4G60G 的规格就足够用了的. 虚拟机上有三种网络模式可以选择, 分别是桥接模式, NAT 模式和仅主机模式, 在网络设置时. 将网络连接选择 NAT 的方式连接(虚拟机 --》设置 --》网络适配器), 这样如果主机能够正常上网, 那么虚拟机也能够直接上网, 如果主机能上网, 虚拟机不能上网, 请关闭主机的防火墙.
安装完成后的界面如图 1-2-1 所示:
图 1-2-1 Ubuntu 安装后的界面
此安装的镜像是一个比较干净的系统, 由于很多软件都需要后期进行安装, 大部分是在 root 用户下进行安装, 但是 Ubuntu 系统默认是没有设置 root 用户密码, 因此需要 root 用户设置密码, 方便登陆.
设置 Ubuntu 系统的 root 密码:(安装时创建的用户名为: librant)
librant@Ubuntu:~$ sudo passwd
输入想设置的密码即可. 密码设置完成后, 切换到 root 用户下.
librant@Ubuntu:~$ su -
通过启动界面可以看到, 进入到 Ubuntu 系统中, 系统的默认的终端字体比较小, 我们可以通过如下命令进行设置:
root@Ubuntu:~# dpkg-reconfigure console-setup
弹出如图 1-2-2 的界面:
图 1-2-2 终端字体设置界面
可以根据自己的喜好设置终端的字体大小, 推荐选择 UTF-8 --> Latin1 and Latin5 --> Let the system select a suitable font --> 12X24.
当我们想停止或者启动 console-setup 服务的时候, 可以通过以下命令:
root@Ubuntu:~# /etc/init.d/console-setup {start|reload|restart|force-reload|stop}
1.3 环境配置
1.3.1 配置虚拟机的共享目录
配置共享目录可以在主机和虚拟机之间共享目录, 使用 NFS 文件系统. 虚拟机设置界面如图 1-3-1 所示:
图 1-3-1 共享目录设置界面
首先在 Windows 主机中新建一个准备共享的文件夹(E:\shared_lsf), 然后在 虚拟机 --> 设置 --> 选项 --> 共享文件夹 进行设置 Ubuntu 系统中文件夹设置(shared_lsf), 设置成功后, 可以在 /mnt/hgfs/ 目录下看到之前设置的共享目录.
1.3.2 相关系统软件安装
考虑到离线软件安装比较繁琐, 建议在联网的情况下安装软件. 首先使用 ping 命令测试下网络的连通性(ping www.baidu.com), 如果不能 ping 通, 需要检查下网络的相关配置. 网络配置成功后, 当我们准备使用 ifconfig 查看当前的 IP 地址时, 很遗憾系统中还没有安装, 根据终端的出错提示, 可以用如下命令进行安装:
root@Ubuntu:/# apt-get install.NET-tools
如果读者和我是一样的环境配置, 会报 Media change: please insert the disc labeled 的错误, 主要是因为系统中的没有挂载 CDROM, 解决方案可以将 /etc/apt/sources.list 中 cdrom 源注释掉, 建议增加新的源地址(https://launchpad.net/ubuntu/+archivemirrors), 文件修改如图 1-3-2 所示:
图 1-3-2 文件修改
修改完成后并保存, 然后执行: apt-get update 更新源, 然后就可以愉快的进行软件的安装啦.
1.3.3 配置 SSH 服务
配置 SSH 服务后, 就可以远程连接服务器. 首先查看当前环境下的 SSH 服务的状态:
root@Ubuntu:/# service sshd status
如果出现 Loaded: error (Reason: No such file or directory)提示的话, 说明没有安装 SSH 服务, 如果出现 Active: inactive (dead)提示信息, 则说明已经安装了 SSH 服务, 只是没有开启而已.
1)安装 SSH 服务
root@Ubuntu:~# apt-get install openssh-server
2)配置 Open SSH:
root@Ubuntu:~# vi /etc/SSH/sshd_config
配置如图 1-3-3 所示:
图 1-3-3 配置 SSH 服务
3)开启 SSH 服务
root@Ubuntu:~# service sshd start
4)卸载 SSH 服务
root@Ubuntu:~# apt-get -purge remove sshd
5)使用 SSH 服务
在网络连通的终端中使用: SSH username@IP
输入密码就可以登录成功.
1.4 XShell 安装
XShell 是一款强大的安全终端模拟软件, 模拟了远程主机的操作, 其实质就是通过访问和连接到远程主机, 在本地实现对远程主机的操作. 成功配置 SSH 后, 就可以使用 XShell 软件连接虚拟机中的 Ubuntu 系统, 比虚拟机中自带的方便很多.
XShell 软件可以去官网下载(下载链接: https://xshell.en.softonic.com/download ), 本次下载的版本是: Xshell-6.0.0107p.exe, 安装过程比较简单, 使用也比较简单, 这里就不再啰嗦了. 在连接之前, 可以设置下终端中的显示字体和大小(文件 --> 属性 --> 外观 --> 字体).
在使用 XShell 登陆之前, 首先需要将虚拟机中的 Ubuntu 系统运行起来, 然后就可以通过 SSH 登陆, 登陆成功后的界面如图 1-4-1 所示:
图 1-4-1 XShell 登陆 Ubuntu 系统界面
1.5 Git 安装
Git 是一个开源的分布式版本控制系统, 用于敏捷高效地处理任何或小或大的项目. 作为版本控制的优秀软件代表, 个人认为确实比 SVN 好用, 在我司大部分的部门已经都在使用 Git, 不过还有很多部门在使用 SVN. 当版本越来越多的时候, 需要将发现的一个问题合入到之前的版本, SVN 需要将所有需要修改的分支都下载到本地, 然后一个分支一个分支的修改, 相当的麻烦. Git 的使用还是比较简单的, 这里推荐《廖雪峰的官方网站》中的 Git 教程. 学习 Docker,Git 是必不可少的工具, 也是拉取 GitHub 上代码的利器.
Git 软件可以从官网下载(下载链接:), 安装有两种方式, 在线安装和源码安装. 在线安装需要联网, 如果不能联网, 就只能将源码下载下来安装了. 强烈建议在联网环境下安装相关软件, 方便快捷, 还不容易出错.
在线安装可以使用以下命令:
root@Ubuntu:~# apt-get install Git
安装完成后, 查看当前的 Git 版本号:
- root@Ubuntu:~# Git --version
- Git version 2.17.1
如果觉得 Git 的命令行模式比较麻烦, 也可使用可视化的 lazygit 工具, 具有添加文件轻松, merge 冲突处理, 分支切换方便, 快速 commit/pull/push 的特点, 安装方法在安装完 Go 编译器后进行介绍. 启动界面如图 1-5-1 所示:
图 1-5-1 lazygit 启动界面
lazygit 工具使用也是非常的简单, 常用的命令也不是很多, 比命令行的方式简单, 需要在 Git 仓库中才能使用, 否则会报错. lazygit 的操作如图 1-5-2 所示:(选中对应的方框, 然后按 x 键弹出菜单面板)
图 1-5-2 lazygit 部分操作命令
1.6 Go 安装
Go 语言是谷歌公司 2009 发布的第二款开源编程语言. 前面已经提过, Docker 就是用 Go 语言编写的, 如果想探究 Docker 的深层次原理, Go 编译器是必要的, 并且 Go 编译器也已经完全由 Go 语言编写了. 由于伟大的强的存在, 我们不能访问到 Go 的官方网站, 也就不能像 Git 那样用一条命令搞定, 只能选择二进制方式安装, 这种方式是使用已经编译好的二进制命令, 直接拷贝到环境变量对应的目录中即可使用.
Go 编译器官方下载地址( https://golang.org/dl/ ), 一般是访问不了, 可以直接去 Golang 中国的网站下载(下载链接: https://golang.google.cn/dl/), 目前已经更新到 1.11.2 版本, 选择 Linux 环境版本的下载(go1.11.2.Linux-amd64.tar.gz), 然后就可以进行安装啦.
Go 软件安装过程如下:
1)解压软件包
root@Ubuntu:/mnt/hgfs/shared_lsf/tools# tar -zxf go1.11.2.Linux-amd64.tar.gz
解压完成后会在当前目录下生成 go 目录.
2)拷贝目录
root@Ubuntu:/mnt/hgfs/shared_lsf/tools# cp -r go /usr/local/
3)配置环境变量 PATH
root@Ubuntu:/mnt/hgfs/shared_lsf/tools# VIM /etc/profile
在文件的末尾增加:
- GO_HOME=/usr/local/go
- export PATH=${
- PATH
- }:${
- GO_HOME
- }/bin
使用 source 命令重新生效环境变量:
root@Ubuntu:/mnt/hgfs/shared_lsf/tools# source /etc/profile
4)配置 GOPATH 变量
GOPATH 变量最好是根据当前用户设置, 意思是说, 每个用户应该都会有自己的 GOPATH 变量, 配置到用户自己目录下的 .profile 文件中.
切换到 librant 用户, 打开 .profile 文件:
librant@Ubuntu:~$ VIM .profile
在文件的末尾增加:
- export GOPATH=${
- HOME
- }/gowork
- export PATH=$PATH:$GOPATH/bin
- export GOBIN=$GOPATH/bin
重新使用 source 命令生效变量:
librant@Ubuntu:~$ source .profile
5)创建 Go 工作目录树
GOPATH 为 Go 工程的工作目录, 创建 gowork 目录:
librant@Ubuntu:~$ mkdir gowork
gowork 目录名称可以随意, 只需要在 .profile 中设置成对应的 GOPATH 即可.
然后在 GOPATH 的对应目录下分别创建 pkg bin src 目录:
librant@Ubuntu:~/gowork$ mkdir pkg bin src
一般一个 Go 项目在 GOPATH 目录下会存在上述三个目录, pkg 目录用于存放编译后的包文件, bin 目录用于存放编译后的可执行文件, src 目录用于存放项目的源码文件. 在使用 go install 命令安装的包文件会在 pkg 目录下, 以 .a 结尾, 是经过编译的, 直接将 Go 的包拷贝到 pkg 目录下是不行的. 如果是生成可执行文件, 会存放在 bin 目录下.
6)检查 Go 编译是否安装成功
- librant@Ubuntu:~/gowork$ go version
- go version go1.11.2 Linux/amd64
7)检查 Go 安装环境信息
librant@Ubuntu:~/gowork$ go env
图 1-6-1 go env 输出信息
go env 命令主要用于检查我们设置的变量是否正确, 主要关注 GOBIN GOPATH GOROOT 几个变量. GOBIN 设置可执行文件目录, GOPATH 设置 Go 工作目录, GOROOT 设置 Go 的安装目录.
1.7 配置 GitHub SSH
作为一名程序员, 相信对 GitHub.com 表示无比亲切, GitHub 是一个面向开源及私有软件项目的托管平台, 因为只支持 Git 作为唯一的版本库格式进行托管, 故名 GitHub.GitHub 可以采用两种认证方式: SSH 和 https. 两种的区别是 SSH 需要进行 SSH key 配置, 但是每次 Pull 的时候是不需要输入用户名密码的, 而 https 每次都要输入用户名密码的.
1)创建本地的 SSH key
librant@Ubuntu:~$ SSH-keygen -t rsa -C "lishangfeng1990@163.com"
然后按三次回车键, 会在 ~/.SSH 目录下生成 id_rsa(私钥)和 id_rsa.pub(公钥)文件.
2)将 id_rsa.pub 文件中的信息上传至 GitHub 网站
如果没有 GitHub 账号, 先注册一个(https://github.com/), 这里就不介绍如何注册了. 登陆成功后, 点击右上角的图标, 然后进入 Settings --> SSH and GPG keys --> New SSH key,Title 框可以填写用于标识的字符串, key 框中将 id_rsa.pub 文件中的信息一个字符不落的进行复制. 然后点击 Add SSH key 即可保存成功.
3)测试秘钥是否配置成功
lazygit 工具就是保存在 GitHub 上的开源工具, 我们可以在 GitHub 上搜索 lazygit, 找到 lazygit 的代码仓 https://github.com/jesseduffield / https://github.com/jesseduffield/lazygit , 点击 clone or download 按钮, 复制其中的 URL 地址.
下载的工程最好和代码仓上的路径保持一致, 这样就可以省去设置 GOPATH 的烦恼. 创建 GOPATH/src 目录下没有 GitHub.com 目录, 如果存在就不用再创建了. 为了保持目录结构的一致性, 需要在 GitHub.com 目录下创建 jesseduffield 目录, 并进入到目录, 然后执行:
librant@Ubuntu:~/gowork/src/GitHub.com/jesseduffield$ Git clone https://github.com/jesseduffield/lazygit.git
如果配置成功, 就会在当前目录下生成 lazygit 目录, 然后进入到 lazygit 目录中, 安装 lazygit 工具:
librant@Ubuntu:~/gowork/src/GitHub.com/jesseduffield/lazygit$ go install
瞧, Go 语言编写的软件安装就是这么简单, 不像 C/C++ 软件安装那么麻烦. 安装成功会在 GOPATH/bin 目录下生成 lazygit 可执行文件.
1.8 gcc/cmake 安装
为了方便以后编译软件, 建议还是把 gcc 和 cmake 编译器也都安装上.
root@Ubuntu:/# apt-get install gcc
查看 gcc 是否安装成功:
- root@Ubuntu:/# gcc -v
- gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)
如果可以看到输出的 gcc 版本号, 则表示安装成功.
CMake 是一个跨平台的安装 (编译) 工具, 可以用简单的语句来描述所有平台的安装(编译过程). 他能够输出各种各样的 makefile 或者 project 文件, 能测试编译器所支持的 C++ 特性, 类似 UNIX 下的 automake, 同样使用 apt-get 进行安装.
root@Ubuntu:/# apt-get install cmake
查看 cmake 是否安装成功:
- root@Ubuntu:/# cmake --version
- cmake version 3.10.2
如果能输出版本号就表示安装成功.
1.9 总结
到目前为止, 还没有见到 Docker 的影子, 亲爱的读者先别着急, 俗话说, 兵马未动, 粮草先行嘛, 这些软件工具都是帮助我们提高效率的, 在第二章中我们将会进行 Docker 的安装. 在以后的学习过程中, 我也将不断推荐比较好的开源软件, 学习别人如何写出优秀的代码.
来源: https://www.qcloud.com/developer/article/1366917