Docker初学者

1.Docker 离线安装

ubuntu版本(我的是14.04,14.04以上应该没问题)

所需cgroup依赖包。

libgcrypt20_1.6.1-2ubuntu1.14.04.1_amd64.deb

libltdl7_2.4.6-2_amd64.deb

libsystemd-journal0_215-17+deb8u7_amd64.deb

所需docker离线安装包。

docker-engine_1.12.5-0-ubuntu-trusty_amd64.deb


2.镜像和容器

容器是基于镜像的。同一个镜像可以创建多个不同的容器,如我在用docker安装hadoop时,可以用一个安装好jdk+hadoop的基础镜像,分别生成容器master,slave1,slave2等,这些容器都基于同一个基础镜像。

容器是在镜像的基础上加了改动层(Docker使用的是一个名叫UnionFs的层级文件系统)

当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。


一开始初学使用docker run 命令运行镜像,以为容器内的数据在重启后就丢失了,其实这是个错误的判断:

因为使用docker run运行镜像的时候,系统针对你第一次运行的镜像和第二次运行的镜像,分别创建了两个不同的容器,如此一来,你在第一个容器内存入的数据当然也就不可能在第二个容器内找到了

因此运行容易一般使用docker start命令,且一般使用容器名称更加方便记忆,而不是选择使用容器id,这样更容易搞混


可以把具有数据的容器给保存下来(将其打包为镜像)

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a, --author=""     Author (e.g., "John Hannibal Smith ")
-m, --message=""    Commit message
-p, --pause=true    Pause container during commit
docker commit -a "Jordan Bach" -m "saved my message" insane_wright jbgo/message:v0.0.1

不过如果具体应用在hadoop上,奇怪的是如何把hdfs文件系统保留到新的镜像中???如果也是能通过上述命令类似与加参数的方法,那再好不过了,不过HDFS是虚拟文件系统,想来应该不支持,难道只能保存下HDFS的实际存储目录??待研究

(先收藏http://blog.csdn.net/sinat_25306771/article/details/51479725  以下部分为转载自该文章)

利用连接文件,把hdfs的数据保存到数据卷的相关目录,也就是保存到了容器之外。利用连接文件时一个技巧,hdfs的配置文件都是/root/data,实际上却保存到了不同的文件目录上去。在上面的hadoop的配置文件中做的一个特殊的修改dfs.datanode.data.dirfile:/root/data,这个是hdfs的实际存储数据的目录,通过软连接到数据卷目录,最终把数据保存在容器之外,这样当容器删除时,hdfs里面的数据并没有消失,新建容器就可以再次使用数据了。


同样,上面的commit命令  如果不加参数,可以保存下新布上应用的镜像,如jdk,vim等等。

3.Docker容器中的固定ip和dns部分。

如何建立起固定的ip地址,或者说如何把相连的几台机子连接到一个局域网中?

参考资料:http://kiwenlau.com/2016/06/12/160612-hadoop-cluster-docker-update/

在这篇文章中,使用了一条命令

sudo docker networkcreate--driver=bridge hadoop

来创建了一个hadoop网络,不知道具体原理,如果在web服务器或者其他的应用程序中,需要用到docker中容器的ip地址,那总得是一个固定的ip地址而不应该是每次重启后就会改变的ip,网上也有很多固定docker容器的方法,在此不进行赘述。

4.Docker中的数据卷部分

待学习.........

你可能感兴趣的:(Docker)