第一章 Docker环境搭建

学习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软件可以从官网下载(下载链接:https://mirrors.edge.kernel.org/pub/software/scm/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 GOROOT=/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的代码仓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 搭建gitHub代码仓

gitHub是一个很好的代码托管的仓库,可以用来存放我们自己的代码。只需要本地修改文件,然后通过git就可以提交到自己的代码仓库中,很是方便。

1.8.1 建仓

首先是在gitHub网站上创建自己的代码仓库,在登陆自己的gitHub账号之后,在主页很显眼的位置,有个 New repository 的按钮,然后填写自己的代码仓库的名称,这样就建好了自己的代码仓库啦。

librant/CLOUND_NATIVE

gitHub代码仓:https://github.com/librant/CLOUND_NATIVE.git

1.8.2 克隆仓

仓库建好之后,在本地的$GOPATH/src目录下创建 librant 目录,在librant目录下 clone 自己的项目。

librant@ubuntu:~/gowork/src/librant$ git clone https://github.com/librant/CLOUND_NATIVE.git

会在当前目录下生成 CLOUND_NATIVE 目录,这个目录就是我们远程的代码仓。

1.8.3 本地提交

代码克隆完成之后,开始我们的第一次提交测试。修改 CLOUND_NATIVE 目录中的 README.md 文件,然后查看文件状态:

librant@ubuntu:~/gowork/src/librant/CLOUND_NATIVE$ git status

modified: README.md

然后添加到暂存区:

librant@ubuntu:~/gowork/src/librant/CLOUND_NATIVE$ git add README.md

提交我们的修改:

librant@ubuntu:~/gowork/src/librant/CLOUND_NATIVE$ git commit -m "First commit --by librant"

一般这行这步会报错,需要根据提示设置:

librant@ubuntu:~/gowork/src/librant/CLOUND_NATIVE$ git config --global user.name "librant"

librant@ubuntu:~/gowork/src/librant/CLOUND_NATIVE$ git config --global librant "lishangfeng1990@163.com"

如果在设置的时候出现 “error: key does not contain a section: librant” 报错,需要检查命令行中是否存在多余的空格,或者重现拷贝命令再进行执行。

配置完成后,就可以进行提交我们的修改。

1.8.4 推到远端

当我们commit完成后,就可以推到远端 gitHub上:

librant@ubuntu:~/gowork/src/librant/CLOUND_NATIVE$ git push

成功之后,就可以登录到我们之前创建的代码仓中查看本次的修改记录。

(更多git命令的操作教程,请参考廖雪峰的git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)

1.9 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.10 总结

到目前为止,还没有见到Docker的影子,亲爱的读者先别着急,俗话说,兵马未动,粮草先行嘛,这些软件工具都是帮助我们提高效率的,在第二章中我们将会进行Docker的安装。在以后的学习过程中,我也将不断推荐比较好的开源软件,学习别人如何写出优秀的代码。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏草根专栏

要用Identity Server 4 -- OAuth 2.0 超级简介

23530
来自专栏安智客

GP规范中定义的四种SE访问控制架构

GP规范给人的感觉好像有点晦涩难懂,由于是规范,所以比较抽象,而且GP这个组织的专家们来自世界各地,大家都用英语文档交流,所以不同的文档风格不同,难免大家阅读起...

24320
来自专栏蓝天

Linux进程KILL不掉的原因

做过Linux开发的人通常遇到过一个进程不能kill掉的情况,即使使用的是kill -9方式,而一般的教课书都只说kill -9能杀死任何进程,遇到这种情况时就...

28620
来自专栏Java后端技术

Python学习的路上,Anaconda送你一双遮天神翼

​  最近在学习python,发现在本地搭建python环境的时候,要是想要同时搭建不同python版本的环境,就比较麻烦,很容易就出现冲突了,很是头疼。然后光...

10820
来自专栏安恒网络空间安全讲武堂

【翻译】t-pot 16.10-多蜜罐平台

t-pot 16.10-多蜜罐平台 2016年10月31日,德国电信公司Honeypot项目 在2016年3月,我们发布了T-Pot 16.03,积极的反馈鼓励...

552100
来自专栏IMWeb前端团队

教你开发whistle插件

whistle介绍 whistle是一款用Node实现的跨平台的Web调试代理工具,支持查看修改http(s)、Websocket连接的请求和响应内容。IMWE...

30000
来自专栏编程

rbd是否支持注入

引子 很多 OpenStack 与 Ceph 部署集成的文档都会告诉你,libivrt 的文件和密码注入是在 Ceph 上面是不支持的。需要使用下面的配置文件关...

33960
来自专栏颇忒脱的技术博客

使用Kubespray安装k8s集群

本文撰写时,Kubespray的master分支不稳定,请使用release版本来安装,具体来说就是切换到最新的tag上。

53830
来自专栏做全栈攻城狮

利用mono实现ASP.NET跨平台和nginx负载均衡

作为.net程序员大部分接触的是windows服务器。因为作为微软原生的操作系统对.net的支持性是最好的。

21930
来自专栏美丽应用

Linux Deploy:使用Repository部署Linux系统

57820

扫码关注云+社区

领取腾讯云代金券