显示当前docker_菜鸟学Docker,你需要知道两个问题

cb264533032ddb358dbb9830514788da.png

一.什么是Docker

首先,你需要知道什么是Docker是干嘛的,不给过你既然要看这篇文章,相信你已经对Docker已经有了基本的了解,或多或少,在其他地方听说过Docker这个名词了.先来看看比较正式的对Docker的描述:

Docker是一个用于开发、迁移、运行的开发平台。它使你能够将你的应用程序从基础架构中分离,从而可以快速交付。使用Docker,你可以以与管理应用程序相同的方式来管理这些基础架构。使用Docker的方法,进行快速开发,测试,并可以显著的减少编写代码和运行之间的时间延迟。
就像官网上说的:Build,Ship,and Run Any App, Anywhere

用我自己的话总结来说,很多软件比如我们常用的Tomcat,数据库等等,每次环境变换,这些软件的又需要随环境重新再进行配置,实在是太麻烦.Docker的解决方案是:像虚拟机一样,每一个软件都是一个虚拟机镜像,每次需要使用某一个软件,那就从Docker虚拟机中启动这个软件就可以了

二.两个问题?

要使用Docker,我们只需要解决两个问题其实就可以直接用了

  1. Docker的安装
  2. Docker的原理

这个两个问题,其实都不难,如果你熟悉Linux,那第一个就不是问题了,第一个问题归根结底就是不熟悉Linux的问题

那我们不熟悉Linux,是不是还要花时间去整整Linux再来学习Docker?理论上是的……本身学习程序Liunx就是必须学习的内容.不过大多数人,在学习程序的时候都会进入这么一个陷阱,本来兴冲冲的要学一样东西,但是发现还需要学习其他的内容,然后再看其他内容的时候,你发现又进入了另外一个知识的海洋…我开始要学习什么来着?

所以我的建议是,如果你想了解Docker,可以先试着使用,毕竟成功解决问题,才是我们学习的东西,什么东西没看着,先学一大堆知识,这样很快就没学习的动力了

但是由于现在阶段只有Windows10 pro版本才能完美的支持Docker,为了学习Docker要去换系统这个代价就大了,所以,我的建议是在你的windows系统中安装一个Linux虚拟机就可以了,别犯怵,菜鸟只需要知道下面几个Liunx的知识点就可以了

1. 命令行

Liunx无论干什么事情都是使用命令行来解决问题,为啥不像windows一样使用桌面?Liunx有,但是有桌面就意味着要消耗内存,你首先要搞清楚这么一个事情,windows我们更多时候是做为个人PC来使用的,而Linux我们更多时候是做为服务器来使用的,服务器就意味着内存很重要

2. Linux的版本

Linux是免费开源的,所以体系内有很多版本,不过基本上我们常用的就两种RedHat系列:Redhat、Centos、Fedora等Debian系列:Debian、Ubuntu
我这么划分是因为这两种Linux系统使用Liunx安装命令是不一样的, RedHat系列:使用是yum,而Debian系列:使用的是apt-get

我这里给大家介绍的时候,使用的是ubuntu16.04的系统,所以,那**apt-get**又是干嘛的?

在**window**中的安装文件我们知道是**xxx.exe**,而在**ubuntu**中,安装文件的扩展名是**deb**,Linux使用的又是命令来操作,所以**apt-get**命令其实就是对deb软件包进行管理的,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件

3. Liunx文件目录的操作

Windows和Linux文件系统区别

在 windows 平台下,打开“计算机”,我们看到的是一个个的驱动器盘符:

482ce2c77b0abddf5bf6378774f862fe.png

每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:

bfc009ba79e82c0a0668ff61681a7e43.png

在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):

c12d5dbb7d0e389390043c79ec0241d8.png

类Unix系统目录结构

ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面

bbf7c145c2baf2a7a16dae3430e71278.png

Linux 目录

  • /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  • /bin、/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
  • /boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
  • /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~edu 表示用户 edu 的家目录。
  • /lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
  • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
  • /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
  • /opt:给主机额外安装软件所摆放的目录。
  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
  • /root:系统管理员root的家目录。
  • /sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能”查看”而不能设置和使用。
  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
  • /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
  • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
  • /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

用户目录

位于/home/user,称之为用户工作目录或家目录,简单来说,Liunx都约定好了每个目录的作用和意义,如果你想放点自己的东西,就可以放在这个目录下面.表示方式:

/home/user
~

当你每次进入到Liunx系统命令行之后,默认看到的其实都是在~这个目录下.

相对路径和绝对路径绝对路径
/目录开始描述的路径为绝对路径,如:

cd /home
ls /usr

相对路径
从当前位置开始描述的路径为相对路径,如:

cd ../../
ls abc/def

.和..

每个目录下都有.和..

. 表示当前目录

.. 表示上一级目录,即父目录

根目录下的.和..都表示当前目录

上面这里用到了Linux的基本命令cdls,试验一下估计你也能猜出这些命令的大概意思,我们使用Liunx,至少先掌握这两个命令

切换工作目录: cd

在使用Unix/Linux的时候,经常需要更换工作目录。cd命令可以帮助用户切换工作目录。Linux所有的目录和文件名大小写敏感

cd后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。

命令含义cd切换到当前用户的主目录(/home/用户目录)cd ~切换到当前用户的主目录(/home/用户目录)cd .切换到当前目录cd ..切换到上级目录cd -可进入上次所在的目录cd /切换到根目录

查看文件信息:ls

ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“..”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。

ls常用选项:

选项含义-a显示指定目录下所有子目录与文件,包括隐藏文件-l以长格式查看文件和目录。-h配合 -l 以人性化的方式显示文件大小-R遇到目录要进行递归展开(继续列出目录下面的文件和目录)。-d只列出目录,不列出其他内容。-S/-t按大小/时间排序。

563304b0061e79167e7438bacbcb604c.png

5d4dffa8f286586a481632f777736735.png

与DOS下的文件操作类似,在Unix/Linux系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符。

通配符

通配符含义*任意字符?任意一个字符[]表示可以匹配字符组中的任意一个。“-”用于表示字符范围。转义字符ls y*查看以y开头的所有文件ls *html查看以html结尾的所有文件ls ?.c查看任意一个字符开头,并以.c结尾的文件[abc]匹配从a到f范围内的的任意一个字符ls [a-f]*找到从a到f范围内的的任意一个字符开头的文件ls a-f查找文件名为a-f的文件,当“-”处于方括号之外失去通配符的作用ls *a查找文件名为*a的文件

ls的操作很简单,我主要要说的是下面这个问题,文件权限,这也是Liunx命令行模式主要区别于Windows的一个地方,不过其实Windows也有权限,只是我们平时没感觉而已,所以区别只是Linux的权限更加的严谨而已.

文件权限

上面通过ls -lh显示出来的信息,是不是看着有些古怪,特别是前面的一堆古怪的英文单词,这其实就是Linux中权限的意思

首先,文件权限是什么意思?

文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。

Unix/Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

在 Unix/Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

这么说,可能有点难于理解,就拿我们熟悉的QQ空间来说,比如我们要在QQ空间中创建一个相册,但是这个相册里面的照片,我们又只是想让一部分人可以看到,这其实就是权限,只有你允许的这一部分人才有查看这个相册的权限

f30dee607e0436d53ef0bbbbb96e308a.png

而且,在选择部分好友可见时,我们不是还要一个个的去选择哪些好友可见,哪如果只是能一个个的去选择的话,如果朋友很多,那就很繁琐了,简单的办法是,我们的朋友可以事先分好组,我只要选择这个组别,那么这个组下面的好友就都选择好了,这就是用户组的概念

c36aff15bcabe7435d3284ec969fb5b5.png

所以,根据这个,Linux权限中,其实还有一个用户的概念

访问用户:
通过设定权限可以从以下三种访问方式限制访问权限:

  • 只允许用户自己访问(所有者) 所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。
  • 允许一个预先指定的用户组中的用户访问(用户组) 用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。
  • 允许系统中的任何用户访问(其他用户) 用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类

转换成我们刚刚比喻的QQ空间的概念就是:

  • 这个 QQ 空间是属于我的,我相当于管理者(也就是“所有者”),我想怎么访问就怎么访问。
  • 同时,我可以设置允许 QQ 好友访问,而这些 QQ 好友则类似于“用户组”。
  • 当然,我可以允许所有人访问,这里的所有人则类似于“其他用户”。

当然,Linux中用户的权限不仅仅就只是能看,还有其他的

访问权限:

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

  • 读权限(r) 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
  • 写权限(w) 对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • 可执行权限(x) 对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
  • 注意:通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

而这些权限,我们在显示文件详细信息的时候,就已经可以看到了:

b865a04de709901313b8948f0f35f6f5.png

在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件;
  • 若是[ l ]则表示为链接文档(link file);
  • 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

每个文件的属性由左边第一部分的10个字符来确定(如下图)。


从左至右用0-9这些数字来表示。

第0位确定文件类型
第1-3位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限
第7-9位确定其他用户拥有该文件的权限。

其中,
第1、4、7位表示读权限,如果用”r”字符表示,则有读权限,如果用”-“字符表示,则没有读权限;
第2、5、8位表示写权限,如果用”w”字符表示,则有写权限,如果用”-“字符表示没有写权限;
第3、6、9位表示可执行权限,如果用”x”字符表示,则有执行权限,如果用”-“字符表示,则没有执行权限。

好了,掌握上面这几个基本点就够了,至少让你在看到命令行的一些结果之后,不至于太过于迷惑不解,然后就暂时不要再深究Linux相关内容了,以后我们要用到了Linux命令再试试就行了

这是Linux要使用的几个基本知识点,那还需要知道Linux经常会遇到的几个问题:

1. 版本问题

就和windows的版本一样,可能在windows 10上能运行的软件,在windows 7上就不能再运行了,不过windows出现这种情况的时候很少,而在Linux中,版本不兼容的情况就很常见了,而且Linux升级的频率要比windows高的多

2. 权限问题

上面的文件权限是属于权限问题的一方面,一些Linux的命令其实也是需要权限的,比如我们用的很多的安装命令 apt-get 就必须要权限,命令加上权限很简单,前面加上sudo就可以执行了

当然这些问题,对于菜鸟来说,怎么去解决就比较难办了,所以,在一开始学习的时候,建议大家最佳实践,和我使用一样的Ubuntu的版本,这里使用的Ubuntu16.04.5

前面这些其实都是一些准备工作,如果你Linux没问题,那就直接安装Docker吧

三.安装Docker

Docker现在的版本分为Docker-CE(社区版)和Docker-EE(企业版),由于历史版本的原因,在我们安装现在版本Docker的时候,如果之前的Linux已经安装了Docker,那么最好先删除了之后再进行安装,Docker的官方也有文档告诉我们在ubuntu中安装Docker

我们学习当然要使用的是Docker-CE社区版

1. 卸载旧版本docker

全新安装时,无需执行该步骤

$ sudo apt-get remove docker docker-engine docker.io

2. 更新系统软件

$ sudo apt-get update

3. 安装依赖包

$ sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    software-properties-common

这几个安装主要是为了让apt通过HTTPS安装软件包

4.添加docker的官方GPG key

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证添加key的指纹信息,官方给出的指纹信息是:

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

搜索指纹最后的8个字符:

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

这一步是在干嘛?简单来说,就是Docker文件是经过GPG加密的,验证下载文件的真实性

5. 设定Docker稳定版的库

$ sudo add-apt-repository 
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
   $(lsb_release -cs) 
   stable"

这一步是为了设定以后在Docker中查找相应的软件镜像仓库,仓库有稳定版(stable)就有测试版(test)的,还有一个边缘版(edge)

$(lsb_release -cs)是获得你当前使用的Linux的内核版本

6. 更新apt软件包库并安装docker

更新apt

$ sudo apt-get update

安装Docker-CE

$ sudo apt-get install docker-ce

四.Docker运行权限的问题

问题描述

安装完docker后,执行docker相关命令,比如搜索 docker search tomcat,出现

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/search?limit=25&term=tomcat: dial unix /var/run/docker.sock: connect: permission denied

原因

摘自docker mannual上的一段话:

Manage Docker as a non-root user
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.
If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

大概的意思就是:docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。

解决方法

其实在官方文档中已经给出了我们解决方案

创建Docker组

$ sudo groupadd docker

将当前用户加入到docker用户组中

$ sudo usermod -aG docker $USER

然后重启你的虚拟机,注意,这里仅仅只是重启Linux并不太安全,最好关闭虚拟机的Linux之后,再关掉虚拟机,重启虚拟机再重启ubuntu才可以。

如果想了解这项技术的各方面,快速地掌握用法,推荐去看看。

Docker-虚拟化技术详解-学习视频教程-腾讯课堂​ke.qq.com
fb3badf281b36773f70c9bcd83dfb018.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值