经过一个星期的折腾,总算搞定了服务端的环境搭建。趁着记忆犹新,这里做一些朴实无华并且枯燥的记录。
本文阅读对象:不了解Linux操作系统的小白
在这篇文章中,你可以了解到:linux操作系统入门,通过SSH密钥远程登陆,Docker环境搭建。
开启从零开始的运维之坑路~
Linux简介
Linux是啥?
一种计算机操作系统。
唔,简单来说就是这样。但它是一个CLI
(command-line interface,命令行界面)组成的操作系统,在图形化的操作界面如windows
得到普及之前,最广泛使用的用户界面就是这样的。
Linux的作者叫 Linus
,瞧,优秀的连名字都是类似的:p
这个操作系统基于GPL 2.0
开源协议,简单来说你可以自由使用它的源码和发行版,也可以修改它的源代码,但是不能闭源——是的,作者坚持开源的理念。
Linux目前有很多发行版,有Dibian
,Redhat
,CentOS
,Ubuntu
…等等,其社区非常繁荣。如果Linus申请专利保护,一定能收获难以想象的财富…事实上,他的开源价值观传播到了全世界,越来越多的人们开始为开源做出贡献,才有了今天这样繁荣的开源生态。
Linus大神还有另一个开源作品git
,它是一种分布式版本控制系统…扯远了,咱还是说Linux吧…
其实,无论图形界面发展到什么水平,命令行方式的操作永远是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作都离不开命令行。虽然linux也有桌面系统,但是X-window
也只是运行在命令行模式下的一个应用程序。
Linux初体验
我的云主机是阿里云的,操作系统是Ubuntu 18.04.2 LTS
64位的。本文写的不是很好但依然是用心的,接下来的演示也是经过本人深入实践的~
linux的指令大致可以分为三类:
文档型(文档和目录的增删改查)
硬件型(磁盘/进程/服务/网络)
功能型(压缩/解压/下载/远程)
我们先从远程登陆开始,然后边走边看尝试熟悉linux环境,最后集中总结一下这三种常用指令
在本地使用ssh建立和远端主机的会话
1 | ssh root@[ipAddress] -p 22 |
ipAddress
是服务器的公网ip,-p
参数是为ssh远程连接开放的端口,默认为22,可以不用加。
接下来你需要输入密码,这里的密码是隐文,输入时不会从终端中得到任何反馈,输入完成敲击回车你就可以登陆远端。
此时如果一切顺利的话你应该已经成功登陆了,我们可以先查看一下操作系统和内核信息
1 | lsb_release -a #查看操作系统 |
查看磁盘信息
1 | df #显示磁盘的区块信息和使用情况(kB) |
查看根目录的内容
将当前路径切换到根目录下,查看文件列表
1 | cd / #切换目录 |
接下来你会看到这样的列表:
最前面的drwxr-xr-xr
表示了用户目录的操作权,依次是root用户权限,组权限,其他用户权限。d
表示这是一个目录(directory)而不是文件r
表示具有读权限(read)w
表示具有写权限(write)x
表示具有执行权限(execute)
目录的简单说明
home:个人目录,可以放一些软件或存放download文件
etc:一般是一些软件的配置文件
sys:系统文件
usr:系统可执行文件
var:日志文件,因不断变化命名,包含经常存放的www目录
查看CPU/内存/进程
1 | top |
这里的表会动态刷新,Tasks
是当前运行的进程数量,Mem
表示内存占用量,可以按“m”键切换百分比显示
接下来我们可以修改一下主机的用户名
1 | vi /etc/hostname #使用vi命令编辑这个文件 |
这样会进入查看模式,此时按下a
或者i
进入编辑模式,修改里面的内容即修改你的用户名。完成编辑后按下esc
,输入:wq
保存并退出编辑。
重启服务器,就可以看到主机名更新啦
1 | reboot #这样做会断开ssh连接 |
修改ssh端口
ssh端口默认为22,修改常用端口后可以提高服务器的安全性,降低遭受攻击的风险;按照下面的步骤操作
编辑SSH配置文件
SSH配置文件路径为:/etc/ssh/sshd_config
1
vi /etc/ssh/sshd_config
修改端口号
找到port: 22,取消#注释,修改为ssh连接想用的端口号,如1
port 10022
然后esc
,输入 :wq
保存,退出编辑
- 放行ssh端口
1
ufw allow 10022
某些云服务商需要在云端手动放行端口,在云服务控制台可以找到,手动添加规则即可。
重启远端SSH服务
1
service ssh restart
尝试重连
1
ssh root@[ipAddress] -p 10022
使用密钥登陆
配置密钥后,就可以免密码建立ssh连接了,而且更加安全
- 生成SSHkey(本地)
1
cd ~/.ssh && ls -la #检查用户目录是否存在公钥对;
若没有id_rsa.pub
,使用下面的命令生成公钥对
1 | ssh keygen |
接下来的会话会询问要将密钥保存在哪里、想要设置的口令等,可以连续敲击回车使用默认设置。
如果设置了私钥口令,则每次建立ssh连接都需要输入口令,然后才会去验证私钥
这个命令会在本地生成两个密钥文件,其中id_rsa.pub
是公钥文件,id_rsa
是私钥文件。私钥万万不可泄漏给他人
- 在远端修改SSH配置
1
cd ~/.ssh && ls -al #查看是否存在authorized_keys
如果home
下没有.ssh
目录,使用下面的命令来创建.ssh
目录
1 | mkdir -p ~/.ssh |
~
是/home
目录的一个alias
,即别名;类似于/
指代根目录
将在本地生成的公钥文件id_rsa.pub
所有内容复制到该文件中保存:
1 | vi authorized_keys |
- 在本地添加SSH配置
1
cd ~/.ssh && touch config #进入该目录,新建config文件
使用命令创建文件的目的主要是不希望其带有任何文件扩展名,接下来你可以使用你喜欢的编辑器打开这个文件进行下面的编辑。
1 | Host cocoonut |
字段说明:
1 | Host:远端主机用户名 |
多个ssh信息都可以写在这个文件中。
接下来,使用ssh [远端主机用户名]
就可以直接建立SSH会话啦!
Docker入门
容器化应用Docker
时下最火的虚拟化技术就是Docker
了。在容器技术之前,业界的网红是虚拟机。而虚拟机技术的代表,是VMWare
和OpenStack
。之所以容器技术会火,是因为它小,轻,快。
Docker的主要特性
特性 | 说明 |
---|---|
文件系统隔离 | 每个进程容器运行在完全独立的根文件系统里。 |
资源隔离 | 可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。 |
网络隔离 | 每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。 |
写时复制 | 采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。 |
日志记录 | Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。 |
变更管理 | 容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。 |
交互式Shell | Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。 |
资源划分 | Docker采用的是资源共享型的管理方案,所有的Docker使用的硬件资源由docker daemon进行管理与分配。 |
Docker技术的三大核心概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
Docker环境搭建
安装
以Ubuntu 18.04 LTS
为例,最省心的安装方式是使用存储库安装。
其他操作系统请移步这里。
更新
apt
软件包索引并安装软件包,以允许apt通过HTTPS使用存储库:1
2
3
4
5
6
7
8
9
10更新
sudo apt-get update
安装
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common添加Docker的官方GPG密钥:
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
通过搜索指纹的后8个字符,验证现在是否拥有带有指纹的密钥:
1 | sudo apt-key fingerprint 0EBFCD88 |
设置稳定的存储库。
1
2
3
4
5以amd64处理器架构为例,其他类型的架构需要修改`arch=`后的参数
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
(lsb_release -cs) \
stable"安装
Docker
引擎1
2
3
4
5更新apt程序包索引
sudo apt-get update
安装最新版本的Docker Engine和容器(也可以安装指定版本)
sudo apt-get install docker-ce docker-ce-cli containerd.io尝试运行
Hello world
镜像,验证是否已经正确安装1
2首次执行时,这个命令会自动拉取hello-world镜像,然后运行
sudo docker run hello-world