Centos6.5 下 Docker安装 及 错误处理

看了网上的安装后出现的错误
引用
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?


出现错误的问题是意外断电等造成的设备没有正常退出,留下的lck文件影响正常启动


---- 前置条件 ----

查看内核
uname -r

低于3.8的内核需要升级

centos升级方法
添加内核源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
-- 弃用 rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt

手动下载内核只能另存为
https://www.kernel.org/
https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.10.105.tar.xz
https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el6/x86_64/RPMS/

修改
vi /etc/grub.conf
将default=1修改为default=0 (根据实际显示的去修改,默认新安装的会是0)

添加软件源
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

安装Docker
yum -y install docker-io
yum -y install device-mapper

修改配置文件(详细看最后的容器运行环境)
vi /etc/sysconfig/docker
other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"

---- 会出错的部分 ---- 由于不正常关机会导致Docker异常,需要手动处理
执行
/etc/init.d/docker status
返回
docker dead but subsys locked

需要删除 pid,sock
\rm  /var/run/docker.*
\rm  /var/lock/subsys/docker
执行
/etc/init.d/docker status
返回
docker is stopped
----

查看版本号
docker version

启动服务
service docker start


下载centos 和 ubuntu
docker pull centos
docker pull ubuntu

查看已有镜像
docker images

[root@localhost ~]# docker images    
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              24c85647b066        35 hours ago        117.2 MB
centos              latest              6cc2eba34ef6        7 days ago          192.5 MB

下载文件位置
/var/lib/docker/

查看
/var/lib/docker/devicemapper/devicemapper
可以看到默认100G的data文件和2G的metadata文件,然而到了这个目录执行
du -h
可以看到
[root@localhost devicemapper]# du -h
639M    .
占用空间是根据使用逐渐变大的,并不是一次性开销

访问容器内系统
可以进入容器,所以如果能访问docker主机,ssh就不用了
docker exec -it CONTAINER_ID /bin/bash

运行jenkins
先修改映射文件的权限在启动容器
chown -R 1000:1000 /home/docker/jenkins
docker run -p 8090:8080 -p 50001:50000 -v /home/docker/jenkins:/var/jenkins_home jenkins
后台运行
docker run -d -p 8090:8080 -p 50001:50000 -v /home/docker/jenkins:/var/jenkins_home jenkins
运行          对外端口:容器内端口                        当前文件目录:容器内文件目录                     容器
停止
docker stop CPID


进入容器
docker exec -it ${CPID} /bin/bash
获取CPID
docker ps

获取jenkins的运行id
docker ps|awk 'NR>1'|grep jenkins|awk '{print $1}'



---------- 分割线 ----------

【导入导出】 参考 http://blog.csdn.net/a906998248/article/details/46236687
使用 docker ps -a 查看本机已有的容器(使用NAMES字段的值xxxx)
导出  export   docker export xxxx > /home/xxxx-export-20170414.tar
导入  import   docker import - /home/xxxx-export-20170414.tar

使用 docker images 查看本机已有镜像(使用IMAGE ID字段的值123456)
保存  save   docker save 123456 > /home/ubuntu-save-20170414.tar
加载  load   docker load < /home/ubuntu-save-20170414.tar

区别:
export 导出的镜像文件大小  小于 save保存的镜像
export 导出(import导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);而save保存(load加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
(查看方式:docker images --tree)
导入加载进来觉得不合适可以使用 docker rm 容器ID 、 docker rmi 镜像ID 来删掉。

【删除所有的容器】
引用
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a) 


【查看root密码】
docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到容器的root用户的密码了。
docker logs 5817938c3f6e 2>&1 | grep 'User: ' | tail -n1

---- 我是分割线 ----
大搬运 http://www.jingyuyun.com/article/13953.html
容器核心技术是指能够让 container 在 host 上运行起来的那些技术。
这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry 以及 容器 OS,下面分别介绍。

【容器规范】
容器不光是 Docker,还有其他容器,比如 CoreOS 的 rkt。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含 Docker、CoreOS、Google在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。
目前 OCI 发布了两个规范:runtime spec 和 image format spec。
有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行。这样就保证了容器的可移植性和互操作性。
【容器运行环境 runtime】
runtime 是容器真正运行的地方。runtime 需要跟操作系统 kernel 紧密协作,为容器提供运行环境。
如果大家用过 Java,可以这样来理解 runtime 与容器的关系:
Java 程序就好比是容器,JVM 则好比是 runtime。JVM 为 Java 程序提供运行环境。同样的道理,容器只有在 runtime 中才能运行。
lxc、runc 和 rkt 是目前主流的三种容器 runtime。
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 作为 runtime。
runc 是 Docker 自己开发的容器 runtime,符合 oci 规范,也是现在 Docker 的默认 runtime。
rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,因而能够运行 Docker 的容器。

【容器定义工具】
容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。
docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。
dockerfile 是包含若干命令的文本文件,可以通过这些命令创建出 docker image。
ACI (App Container Image) 与 docker image 类似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。

【Registry】
容器是通过 image 创建的,需要有一个仓库来统一存放 image,这个仓库就叫做 Registry。
企业可以用 Docker Registry 构建私有的 Registry。
Docker Hub(https://hub.docker.com) 是 Docker 为公众提供的托管 Registry,上面有很多现成的 image,为 Docker 用户提供了极大的便利。
Quay.io(https://quay.io/)是另一个公共托管 Registry,提供与 Docker Hub 类似的服务。

【容器 OS】
由于有容器 runtime,几乎所有的 Linux、MAC OS 和 Windows 都可以运行容器。但这不并没有妨碍容器 OS 的问世。
容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。
目前已经存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。

猜你喜欢

转载自happysoul.iteye.com/blog/2369155