本文主要是介绍Docker容器的相关内容

容器创建

我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器。同样,如果我们想要使用容器,那么我们必须首先需要创建容器。而且要知道一个镜像可以同时创建多个容器

[root@206 /]# docker run -t -i ubuntu:17.10 /bin/bash
-t表示为容器分配一个伪终端
-i容器的标准输出为打开的状态
/bin/bash表示容器运行的地址
再执行一遍,就又创建一个容器

容器的启动

容器的启动主要分为两种方式:

1、创建。
2、把终止状态的容器启动。

exit之后就是终止状态

[root@206 /]# docker run -t -i ubuntu:17.10 /bin/bash
root@abc6e11de34e:/# exit
exit

查看docker上所有的容器

[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc6e11de34e ubuntu:17.10 "/bin/bash" 11 minutes ago Exited (0) 50 seconds ago ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago amazing_kowalevski

再次启动

[root@206 /]# docker start abc6
[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc6e11de34e ubuntu:17.10 "/bin/bash" 14 minutes ago Up 2 seconds ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago amazing_kowalevski

守护态运行

Docker里的容器可以在后台以守护态的方式运行,这样可以方便我们对Docker的操作

[root@206 /]# docker run -d ubuntu:17.10 /bin/bash -c "while true;do echo thanks;sleep 3;done"
这里我们创建了一个守护态运行的容器,并让他一直输出thanks
根据id查看容器的输出
[root@206 /]# docker logs 9e48
thanks
thanks
thanks
thanks
thanks
thanks
thanks
thanks
...

终止

假如我们暂时不想运行某个容器,我们可以终止该容器,终止之后,对应的容器将退出运行状态

[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e489b563341 ubuntu:17.10 "/bin/bash -c 'whi..." 2 minutes ago Up 2 minutes inspiring_hawking
abc6e11de34e ubuntu:17.10 "/bin/bash" 25 minutes ago Up 11 minutes ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago amazing_kowalevski

这里有两个正在后面默默运行的容器

[root@206 /]# docker stop 9e48
9e48
[root@206 /]# docker stop abc6
abc6
[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e489b563341 ubuntu:17.10 "/bin/bash -c 'whi..." 4 minutes ago Exited (137) 13 seconds ago inspiring_hawking
abc6e11de34e ubuntu:17.10 "/bin/bash" 28 minutes ago Exited (0) 8 seconds ago ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 3 hours ago Exited (1) 3 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 4 hours ago Exited (1) 4 hours ago amazing_kowalevski

依附容器

我们可以使用Docker attach指令依附到某个容器中,通俗来说,就是指我们可以通过该指令进入某个容器。

没有在运行的容器是不能依附的

[root@206 /]# docker start abc6
abc6
[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e489b563341 ubuntu:17.10 "/bin/bash -c 'whi..." 10 minutes ago Exited (137) 6 minutes ago inspiring_hawking
abc6e11de34e ubuntu:17.10 "/bin/bash" 34 minutes ago Up 2 seconds ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 4 hours ago Exited (1) 4 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 4 hours ago Exited (1) 4 hours ago amazing_kowalevski
[root@206 /]# docker attach abc6
root@abc6e11de34e:/#

其实依附也就是进入一个容器而已

容器信息查看

查看运行中的容器

[root@206 /]# docker ps

查看所有容器

[root@206 /]# docker ps -a

查看最后一次创建的容器

[root@206 /]# docker ps -l

查看运行中的容器的id号

[root@206 /]# docker ps -q

上面的查看守护容器的log

[root@206 /]# docker logs 9e48

实时查看

[root@206 /]# docker logs -f 9e48

只查看最新两行

[root@206 /]# docker logs --tail=2 9e48

只查看最新的两行,且不断实时查看

[root@206 /]# docker logs --tail=2 -f 9e48

附加产生log的具体时间

[root@206 /]# docker logs  -t 9e48

容器内命令执行

容器内命令的执行方式有两种:
1.依附到对应容器,在对应容器中直接执行。
2.不进入对应容器,直接在主系统中通过docker exec指令对对应容器进行相关指令执行操作。而2又可分为:

2.1 后台执行

[root@206 /]# docker exec -d abc6 touch /q.txt
[root@206 /]# docker exec -d abc6 echo "123"
[root@206 /]#

2.2 交互执行

[root@206 /]# docker exec -ti abc6 touch /w.txt
[root@206 /]# docker exec -ti abc6 echo "123"
123
结果很明显了
 
 
docker exec -ti abc6 /bin/bash
这个比attach的好处是,不会exit就关闭容器

容器的导入导出

我们已经学过如何将某个镜像导出成一个压缩文件,移植到其他环境中使用。同样,我们也可以将某个容器通过docker export指令导出为一个压缩文件,然后存储起来,在必要的时候可以根据该压缩文件恢复为容器

[root@206 /]# docker export abc6 > abc6.tar
当我们想把某个容器的压缩文件导入恢复为容器的时候,我们需要通过docker import指令进行容器的导入操作。由于容器是基于镜像而创建的,其核心特征是在镜像上创建一层可写层。故而,容器的导入过程可以这样:首先把容器压缩文件快照导入为一个镜像,然后基于该镜像创建一个容器,则此时创建的新容器跟原容器性能一致,该过程即为容器的导入操作
首先把容器压缩文件快照导入为一个镜像
[root@206 /]# cat abc6.tar | docker import - cba:v2

查看镜像,发现多了一个

[root@206 /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cba v2 7ee75c306951 48 minutes ago 78.5 MB
<none> <none> cbf64eb48a64 6 hours ago 89.6 MB
newsuse 99999 7e4ff5f67461 6 hours ago 156 MB
newubuntu 8888 036d21b62a12 6 hours ago 89.6 MB
ubuntu 17.10 073e7b409b9b 43 hours ago 89.6 MB
itliucheng/ubuntu first 073e7b409b9b 43 hours ago 89.6 MB

创建容器

[root@206 /]# docker run  -ti cba:v2 /bin/bash

虽然容器号不一样了,但是内容是完全一样的

数据卷

我们以后在学习Docker容器的时候,那么容器可能会出现多个,同样,每个容器中都会涉及数据,自然,我们就要研究如何对这些数据进行管理。管理容器中数据的方式主要有2种:
1.数据卷
2.数据卷容器
数据卷是一个可以供一个容器或者多个容器使用的特殊目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享,类似于Linux系统下的mount(挂载命令)
数据卷主要有4个性能:
1.数据卷可以在容器之间共享和重用
2.对数据卷的修改会立马生效
3.对数据卷的更新,不会影响镜像
4.卷会一直存在,直到没有容器使用
数据卷创建
[root@206 ~]# docker run -ti -v /abctest ubuntu:17.10 /bin/bash

-v就是创建数据卷参数,并且挂载到指定的容器里

root@f109cdc59516:/# ls
abctest bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

挂载

我们在容器中创建了数据卷之后,可以把母机器中的某个目录或某个文件挂载到数据卷中,这样,这个目录或文件与容器中的数据卷内容就相当于是一个了。

[root@206 ~]# cd /
[root@206 /]# mkdir gztest
[root@206 /]# cd gztest/
[root@206 gztest]# touch a.txt

创建容器并挂载 将母机的gztest挂载到 容器中的contest中

[root@206 gztest]# docker run -ti -v /gztest:/contest ubuntu:17.10 /bin/bash
root@9647eb0d2898:/# ls
bin boot contest dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@9647eb0d2898:/# cd contest/
root@9647eb0d2898:/contest# ls
a.txt

延伸:如果创建的容器有权限限制,就修改成这样创建容器docker run -ti -v /gztest:/contest --privileged=true ubuntu:17.10 /bin/bash  再或者关闭selinux 命令为: setenforce 0

同理,刚才是挂载文件夹,挂载文件同理
docker run -ti -v /file.txt:/co/b.txt ubuntu:17.10 /bin/bash

数据卷容器

所谓的数据卷容器,其实质上,是容器,但是这个容器是一个专门用来提供数据卷的容器。
     那么,为什么要有数据卷容器呢?
因为有的时候,我们会有一些数据需要持续更新,并且这些数据需要在容器间进行共享,那么此时,如果有一个专门的容器来提供数据卷,将会方便很多。所以,如果我们要解决数据的持久化问题,我们应当选用数据卷容器
创建一个数据卷容器,设置了容器名称为datac1
[root@206 /]# docker run -ti -v /abc --name datac1 ubuntu:17.10 /bin/bash
[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2e8f642c525 ubuntu:17.10 "/bin/bash" 17 seconds ago Exited (0) 8 seconds ago datac1
9647eb0d2898 ubuntu:17.10 "/bin/bash" 27 minutes ago Exited (0) 14 minutes ago focused_jang
f109cdc59516 ubuntu:17.10 "/bin/bash" 34 minutes ago Exited (0) 32 minutes ago stupefied_curie
6d8a8372d68b cba:v2 "/bin/bash" 3 hours ago Up 3 hours unruffled_agnesi
9e489b563341 ubuntu:17.10 "/bin/bash -c 'whi..." 6 hours ago Exited (137) 5 hours ago inspiring_hawking
abc6e11de34e ubuntu:17.10 "/bin/bash" 6 hours ago Up 5 hours ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 9 hours ago Exited (1) 9 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 9 hours ago Exited (1) 9 hours ago amazing_kowalevski

创建另外一个普通容器,并挂载数据卷容器

[root@206 /]# docker run -ti --volumes-from b2e8 --name testcommon ubuntu:17.10 /bin/bash
root@f99f555cfac5:/# ls
abc bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
这里可以用--volumes-from b2e8  也可以用--volumes-from bdatac1
我们可以看到普通容器中有一个abc文件夹,这个就是数据卷容器中的文件夹
在abc中创建文件,attach到数据卷容器中会发现这个 abc文件夹中也有新创建的文件

数据迁移

我们在这里所说的数据迁移,是指在有必要的时候,将数据卷容器的数据卷中的数据全部转移到一个新的地方。我们实现迁移的原理是:首先将数据卷容器的相应数据卷进行备份,然后将备份文件保存起来,在有需要的时候,再将备份文件恢复为原来的数据卷,并且数据卷里面的内容要完整保存
 要想对数据卷里面的内容进行备份,我们可以这样做:加载源数据卷容器里面的数据卷,并在新的容器中把加载过来的数据卷归档存放,在进行以上操作的同时,将当前目录挂载到新容器存放归档文件的目录中,这样就可以直接在当前文件取到对应的压缩文件了。
意思就是 :创建一个普通容器,并挂载数据卷容器,同时这个普通容器还挂载了母机的一个文件夹,这样普通容器能操作数据卷,压缩数据卷后放入母机关联的文件夹,这样在母机上也能操作
[root@206 /]# docker run -ti -v /abcd --name abc ubuntu:17.10 /bin/bash
root@42fae694e443:/# ls
abcd bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@42fae694e443:/# cd abcd/
root@42fae694e443:/abcd# touch a.txt&&touch b.txt
root@42fae694e443:/abcd# ls
a.txt b.txt

创建普通容器

[root@206 /]# docker run -ti --volumes-from 42fa -v /gztest:/backup --name backcontainer ubuntu:17.10 tar cvf /backup/task1.tar /abcd

母机上

[root@206 /]# cd gztest/
[root@206 gztest]# ls
a.txt task1.tar

数据恢复就不说了,在建立一个容器,将母机文件所在目录挂载到容器的目录中

容器命名

从之前到现在,创建了很多的容器

[root@206 /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c977c2f4e1a9 ubuntu:17.10 "/bin/bash" 24 minutes ago Up 24 minutes 0.0.0.0:32769->8998/tcp net2
e617f1cd394d ubuntu:17.10 "/bin/bash" 25 minutes ago Exited (0) 25 minutes ago net1
dbb53a5ddc3e ubuntu:17.10 "tar cvf /backup/t..." 50 minutes ago Exited (0) 50 minutes ago backcontainer
42fae694e443 ubuntu:17.10 "/bin/bash" 57 minutes ago Exited (0) 56 minutes ago abc
f99f555cfac5 ubuntu:17.10 "/bin/bash" 13 hours ago Exited (0) 13 hours ago testcommon
b2e8f642c525 ubuntu:17.10 "/bin/bash" 13 hours ago Exited (0) 13 hours ago datac1
9647eb0d2898 ubuntu:17.10 "/bin/bash" 14 hours ago Exited (0) 13 hours ago focused_jang
f109cdc59516 ubuntu:17.10 "/bin/bash" 14 hours ago Exited (0) 14 hours ago stupefied_curie
6d8a8372d68b cba:v2 "/bin/bash" 17 hours ago Exited (255) 2 hours ago unruffled_agnesi
9e489b563341 ubuntu:17.10 "/bin/bash -c 'whi..." 19 hours ago Exited (137) 19 hours ago inspiring_hawking
abc6e11de34e ubuntu:17.10 "/bin/bash" 20 hours ago Exited (255) 2 hours ago ecstatic_meitner
bcd455f0bc0f cbf64eb48a64 "/bin/sh -c 'mkdir..." 23 hours ago Exited (1) 23 hours ago xenodochial_minsky
2f90664d6391 cbf64eb48a64 "/bin/sh -c 'mkdir..." 23 hours ago Exited (1) 23 hours ago amazing_kowalevski

我们先根据容器id查一下容器名称

[root@206 /]# docker inspect -f "{{.Name}}" 2f90
/amazing_kowalevski

docker不允许容器同名。若出现同名

1、先删除原容器,再创建新容器。

[root@206 /]# docker rm amazing_kowalevski

把容器名换成id一样

2、使用--rm标记,一旦容器退出,自动删除容器

[root@206 /]# docker run -ti --name advc --rm ubuntu:17.10

exit之后容器已经删除了

网络服务

Docker可以提供网络服务。
Docker提供网络服务,主要有两种方式:
1、外部访问
    我们在Docker的容器中,可以运行一些网络应用,比如WEB应用等,如果这些应用需要跟外界进行交互,那么一般使用外部访问容器的方式进行。主要会通过端口映射的方式解决。

[root@206 /]# docker run -t -P --expose 8998 --name net2 ubuntu:17.10

-P表示可以外部访问

--expose绑定端口

[root@206 /]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c977c2f4e1a9 ubuntu:17.10 "/bin/bash" 12 seconds ago Up 11 seconds 0.0.0.0:32769->8998/tcp net2

所以我们可以浏览器192.168.126.206:32769来访问该服务,由于容器里并没有什么web项目,所以访问也没效果

[root@206 /]# docker port net2 8998
0.0.0.0:32769

还可以这样 小写的p

[root@206 /]# docker run -t -p 192.168.126.205:8999:5001 --name net3 ubuntu:17.10

他表示访问192.168.126.206:8999来访问容器的5001端口

2、容器互联

容器互联的方式会在接收容器与源容器间创建一个隧道,接收容器可以看到源容器的指定信息

创建源容器

[root@206 /]# docker run -ti --name hl1 ubuntu:17.10
[root@206 /]# docker start hl1

创建接收容器

[root@206 /]# docker run -ti --name hl2 --link hl1:yuan1 ubuntu:17.10
:yuan1表示给源容器起的别名,可以不加
 此时这两个容器就算是互联了
我们在进行了容器互联之后,有时我们需要查找某些容器的互联信息,此时我们就要进行连接信息的公开。
      一般,要公开连接信息,有两种方式
1、hosts文件法

我们可以进入连接容器,也就是接收容器,然后找到/etc/hosts文件,并cat查看,即可以把该容器的连接信息公开出来,包括该连接容器对应的源容器信息等。公开之后,我们可以使用ping命令测试连接是否通畅。

root@7a9dee156249:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 yuan1 30bd2045b737 hl1
172.17.0.4 7a9dee156249

执行 ping 172.17.0.3  或者  ping hl1 即可

2、环境变量法

[root@206 /]# docker run -ti --name hl3 --link hl1:yuan2 ubuntu:17.10 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=7a91ce8a9480
TERM=xterm
YUAN2_NAME=/hl3/yuan2
HOME=/root

Dockerfile的使用

这是以前学的只用Dockerfile创建镜像

[root@206 test]# touch Dockerfile
FROM newubuntu:8888
MAINTAINER root
RUN touch a.txt
RUN mkdir test1

CMD:执行docker run时执行某行指令,具有替换性

FROM ubuntu:17.10
MAINTAINER root
CMD ["echo"]
[root@206 test]# docker build -t="copyubuntu" /test
[root@206 /]# docker run -ti copyubuntu echo hello
hello

ENTRYPOINT:执行docker run时执行某行指令,不具有替换性

[root@206 test]# vi Dockerfile
FROM ubuntu:17.10
MAINTAINER root
ENTRYPOINT ["echo"]
[root@206 /]# docker build -t="copyubuntu1" /test
[root@206 /]# docker run -ti copyubuntu1 echo hello
echo hello
USER:使用哪个用户运行容器
EXPOSE:绑定哪个内部端口,构建镜像的时候,开启哪个端口
ENV:环境变量设置,构建镜像的时候添加环境变量配置
ADD: 跟copy类似 ,将本机某个文件,在生成镜像的时候,放入镜像中,同时add有另外的解压功能,也就是拷贝进去后会自动解压
COPY :从本地复制文件到镜像中
 

docker教程之从一头雾水到不一头雾水(3)的更多相关文章

  1. docker教程之从一头雾水到不一头雾水(2)

    书接上文:docker教程之从一头雾水到不一头雾水(1) 运行镜像 先查看下本地有哪些镜像 [root@ichz ~]# docker images REPOSITORY TAG IMAGE ID C ...

  2. Docker教程:docker machine的配置和命令

    http://blog.csdn.net/pipisorry/article/details/50921335 安装virtualbox 如果要使用virtualbox,首先要安装virtualbox ...

  3. Docker教程:dokcer machine的概念和安装

    http://blog.csdn.net/pipisorry/article/details/50920982 Docker machine介绍 做为Docker容器集群管理三剑客之一的Docker ...

  4. Docker教程:使用docker配置python开发环境

    http://blog.csdn.net/pipisorry/article/details/50808034 Docker的安装和配置 [Docker教程:docker的安装] [Docker教程: ...

  5. Docker教程:docker的概念及安装

    http://blog.csdn.net/pipisorry/article/details/50754385 Why docker 对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规 ...

  6. 简明Docker教程

    Docker基础 这篇基础文章是方便用户在使用cSphere平台之前,了解docker基础知识. 针对已经有一定的Linux基础知识的用户. Docker是什么 Docker是一个改进的容器技术.具体 ...

  7. Docker 教程

    转自:http://www.runoob.com/docker/docker-tutorial.html Docker 教程

  8. Linux--CentOS 安装 Docker 教程

    本文主要介绍 CentOS 系统安装 Docker 的流程. 前提条件 OS 要求 CentOS7: The centos-extras repository must be enabled. Thi ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_汇总

    小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介 小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型 小D课堂 - 新版本微服务s ...

随机推荐

  1. Visual Studio跨平台开发(3):Xamarin iOS多页面应用开发

    前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode进行iOS基本控制项的操作. 但都是属于单一画面的应用程式. 这次我们要来练习如何通过Navigation Contr ...

  2. 计蒜客 28317.Growling Gears-一元二次方程的顶点公式 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 G)

    G. Growling Gears 传送门 此题为签到题,直接中学的数学知识点,一元二次方程的顶点公式(-b/2*a,(4*a*c-b*b)/4*a):直接就可以得到结果. 代码: #include& ...

  3. Codeforces Round #267 (Div. 2) B. Fedor and New Game【位运算/给你m+1个数让你判断所给数的二进制形式与第m+1个数不相同的位数是不是小于等于k,是的话就累计起来】

    After you had helped George and Alex to move in the dorm, they went to help their friend Fedor play ...

  4. Codeforces 954H Path Counting(DP)

    题目链接  Path Counting 题意  给定一棵高度为$n$的树,给出每一层的每个点的儿子个数(某一层的所有点儿子个数相同).   令$f_{k}$为长度为$k$的路径条数,求$f_{1}, ...

  5. 洛谷 P2183 [国家集训队]礼物

    题目描述 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物 ...

  6. 1.13抽象类及接口(附简述final关键字)

    一.final final的中文意思就是不可更改的,最终的. 1.final修饰变量,那么该变量无法更改.一旦该变量赋了初值,就不能重新赋值. final MAX = 1100; //final修饰后 ...

  7. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  8. elasticsearch5.3.0 安装

    公司有项目打算用elasticsearch,所以研究了下,目前最新版本5.3.0 安装 1.下载包  https://artifacts.elastic.co/downloads/elasticsea ...

  9. NAND Flash Bad Block Table

    转:http://wiki.laptop.org/go/NAND_Flash_Bad_Block_Table 1 OLPC NAND Bad Block Management 1.1 Introduc ...

  10. 命令行解析函数:getopt/getopt_long

    参考: http://blog.csdn.net/zhangyang0402/article/details/5671410 http://www.cnblogs.com/gnuhpc/archive ...