设为首页 收藏本站
查看: 1458|回复: 0

[经验分享] Docker学习小结

[复制链接]

尚未签到

发表于 2015-10-13 10:22:28 | 显示全部楼层 |阅读模式
  经过短期的自学,对docker基础有了简单了了解,并在docker容器上搭建了某数据库6节点的集群,测试成功。下面结合自己搭建成功的过程对部分知识点做下整理,希望对大家有用。
docker安装
检查内核


        uname -a  

uname -r

配置网络能够访问外网
  如果不能访问,需要对/etc/resolv.conf 文件进行配置。

一般追加nameserver 4.4.4.4 和 8.8.8.8即可。


[iyunv@localhost yum.repos.d]# cat /etc/resolv.conf
# Generated by NetworkManager
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
nameserver 4.4.4.4
nameserver 8.8.8.8
  直至可以访问外网为止。
配置yum源
  Centos6及RedHat6下实测成功:

删除系统自带的yum


rpm -qa |grep yum |xargs rpm -e --nodeps
  准备好需要安装yum的rpm包


网盘下载路径:
http://yunpan.cn/cd6huxN86F9nz  访问密码 c50d
  安装yum的rpm包


rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
rpm -ivh yum-3.2.29-60.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.30-30.el6.noarch.rpm
  配置yum源文件


cd /etc/yum.repos.d/
  将可用的源文件放入目标文件夹中;

一般情况 使用CentOS6-Base-163.reporedhat.repo 这两个文件即可(推荐);

后面如果不能正常进行yum安装,可以配置 epel.repo  epel-testing.repo  hop5.repo(配置方法后续补);
  清除yum


yum clean all
  进行yum缓存


yum makecache

升级内核
  前提:如果系统内核较小,就需要先升级内核之后,再安装docker,

实测内核从2.6.32->3.10.81升级成功

1.内核升级环境准备


#查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库;
yum grouplist
#一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具
yum groupinstall "Development Tools"
#你必须这样才能让 make *config 这个指令正确地执行
yum install ncurses-devel
#如果你没有 X 环境,这一条可以不用
yum install qt-devel
#创建 CentOS-6 内核时需要它们
yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel
  2.开始升级内核

下载操作系统内核版本压缩包,可从如下地址下载:

另,网盘路径如下

http://yunpan.cn/cd6TPnSVDCSQs  访问密码 0446

  将内核版本放入指定路径,并解压(一般放入/usr/src/下):

【注意】:内核版本本次使用3.10.8(不宜直接从2.6.2升过高内核,会升不成功),

cd /usr/src/linux-3.10.81

  • 复制原内核配置


cp /boot/config-2.6.32-71.el6.x86_64 .config

  • 修改内核配置文件


vim .config
/*将如下内容 追加入.config 并保存
CONFIG_NF_NAT_IPV4=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_AUFS_FS=y
CONFIG_DM_THIN_PROVISIONING=y
CONFIG_OVERLAY_FS=y
CONFIG_CGROUP_PERF=y
CONFIG_CFS_BANDWIDTH=y
HYPERVISOR_GUEST=y
CONFIG_VMWARE_BALLOON=m
*/

  • 编辑内核配置,开启内核CGROUP支持


make menuconfig
#选择General setup-->Control Group support->Memory Resource Controller for Control Groups选中

  • 自动整理.config


sh -c 'yes "" | make oldconfig'

  • 编译并安装内核

    比较耗时,实体机测试需要半小时,2G内存虚拟机需要1小时左右。

    (j8代表8个线程同时编译,请根据你的机器情况设置,一般机器开4个线程即可)


make -j8 bzImage && make -j8 modules && make -j8 modules_install && make install

  • 配置grub并重启

    编译内核成功后,配置grub.conf自启动并重启


vim /etc/grub.conf
修改default=0保存。即选择从你新编译的内核启动linux。
#重启
reboot
  【注意】:如果需要重新编译内核时,请运行清理命令


cd /usr/src/linux-3.10.81
make mrproper
make clean

安装docker
  重新启动后,通过uname -r 查看系统内核版本。  

例:返回3.10.81表示内核安装并启动成功。

准备安装docker

  • redhat的docker安装说明:https://docs.docker.com/installation/rhel/
  简化的docker安装过程(实际操作成功)
  a.下载docker的rpm


wget https://get.docker.com/rpm/1.7.0/centos-6/RPMS/x86_64/docker-engine-1.7.0-1.el6.x86_64.rpm
  b.本地安装rpm包


sudo yum localinstall --nogpgcheck docker-engine-1.7.0-1.el6.x86_64.rpm
  c.启动docker服务


sudo service docker start
docker image

问题记录

  • 问题1:


ERRO[0000] [graphdriver] prior storage driver "devicemapper" failed: exit status 1
FATA[0000] Error starting daemon: error initializing graphdriver: exit status 1
#1.prior storage driver "devicemapper" failed: exit status 1
yum upgrade device-mapper-libs
#error initializing graphdriver
  解决方法:


sudo yum install -y http://mirror.centos.org/centos/6.6/os/x86_64/Packages/device-mapper-libs-1.02.90-2.el6.x86_64.rpm http://mirror.centos.org/centos/6.6/os/x86_64/Packages/device-mapper-1.02.90-2.el6.x86_64.rpm http://mirror.centos.org/centos/6.6/os/x86_64/Packages/device-mapper-event-1.02.90-2.el6.x86_64.rpm http://mirror.centos.org/centos/6.6/os/x86_64/Packages/device-mapper-event-libs-1.02.90-2.el6.x86_64.rpm https://dl.fedoraproject.org/pub/epel/testing/6/x86_64/docker-io-1.6.2-1.el6.x86_64.rpm
安装aufs文件系统
cd /etc/yum.repos.d
wget http://www.hop5.in/yum/el6/hop5.repo
yum install kernel-ml-aufs
docker -d -s aufs #使用aufs文件系统启动docker服务

  • 问题2:

    安装
  • 问题:

    后续会逐步将问题和解决方法整理到此。
docker配置
  docker创建镜像及容器(实测成功)
创建镜像

  • 修改yum源

    执行这个命令就把源地址改为阿里的:
    curl https://git.oschina.net/feedao/Docker_shell/raw/start/ali-centos.sh | sh
  • 安装Docker:
    yum -y install docker-io
  • 启动Docker:
    service docker start
  • 安装制作CentOS镜像的工具:
    yum -y install febootstrap
  • 制作CentOS镜像文件centos6-image目录
    febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim-minimal -i openssh-server -i openssh-clients centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/
  • 制作Docker镜像,镜像名字是centos6-base
    cd centos6-image && tar -c .|docker import - centos6-base
  • 制作可以ssh登陆的Docker镜像,名字是centos6-ssh
    通过指定的网上的Dockerfile创建镜像,可以打开链接查看Dockerfile的内容。


docker build -t centos6-ssh https://git.oschina.net/feedao/Docker_shell/raw/start/Dockerfile
  经过前面的六个步骤,一个可以登陆的本地docker镜像就制作好了。

用户名是:root,密码是:123456
体验步骤:
  创建容器:


docker run -d -p 127.0.0.1:33301:22 centos6-ssh
docker run -d -p 127.0.0.1:33333:22 centos6-ssh_v1  
  ssh登陆容器:


ssh root@127.0.0.1 -p 33301
  输入密码后就可以开始在容器中进行操作了。

【注意】:为了方便数据库的安装,需要在容器中yum install进行安装vim和tar插件
DockFile配置
  例:


#Dockerfile
FROM centos6-base
MAINTAINER feedao <feedao@163.com>
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
RUN echo 'root:123456' | chpasswd
RUN curl https://git.oschina.net/feedao/Docker_shell/raw/start/ali-centos.sh | sh
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
CMD /usr/sbin/sshd -D
#End

  • 如何编写自己的镜像

    使用Dockerfile或者commit,Dockerfile文件会在后面进行分析整理……
  • 镜像上传
  • 配置私有资源库
  •   创建容器

    在dockerfile文件所在目录下执行 命令
    docker build -t my_centos6-ssh .
  •   启动容器
    docker start 5cfaa9166d7f

  •   停止容器

    docker stop cc34adcd5f37
  •   删除容器

    docker rm -f 208ce86a94a7
  •   删除镜像

    docker rmi -f centos6-ssh
  •   保存容器

  •   打包镜像

    docker save centos6-ssh >/root/InstallDoc/centos6-ssh_xxx.tar #centos6-ssh_xxx镜像打包
  •   在另外的机器上导入镜像

    docker load < centos6-ssh_xxx.tar #导入镜像  
    docker images #查看存在的镜像
  •   加载镜像和加载容器的区别及建议
      –docker文件空间等问题

    ?–docker动态扩展空间大小

  •   挂载共享文件夹

  •   挂载多个共享文件夹(使用 -v 命令行)
    sudo docker run -d -P –name web -v /src/webapp:/opt/webapp training/webapp python app.py
    #上面的命令加载主机的/src/webapp到容器的/opt/webapp目录。这个在测试的时候特别好用,比如我
    们可以加载我们的源码到容器中,来查看他们
    docker run -d -p 127.0.0.1:33301:22 centos6-ssh

  •   挂载宿主机文件夹到docker 中

    docker run -d -p 127.0.0.1:33301:22  -v /docker_data:/dbdata centos6-ssh /bin/bash
    ssh 无法连接时,将如下文件中的IP信息删掉
    cat /root/.ssh/known_hosts
docker网络
  配置多主机网络互通

  •   两台主机间网络访问

        设有两台虚拟机
    v1: 192.168.124.51
    v2: 192.168.124.52
    更改虚拟机docker0网段,v1为172.17.1.1/24,v2为172.17.2.1/24
    #v1
    sudo ifconfig docker0 172.17.1.1 netmask 255.255.255.0
    sudo bash -c 'echo DOCKER_OPTS="-B=docker0" >> /etc/default/docker'
    sudo service docker restart
    # v2
    sudo ifconfig docker0 172.17.2.1 netmask 255.255.255.0
    sudo bash -c 'echo DOCKER_OPTS="-B=docker0" >> /etc/default/docker'
    sudo service docker restart
    然后在v1上把v2的docker虚拟网段加入到路由表中,在v2上将v1的docker虚拟网段加入到自己的路由表中
    # v1 192.168.124.51
    sudo route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.124.52
    sudo iptables -t nat -F POSTROUTING
    sudo iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
    # v2 192.168.124.52
    sudo route add -net 172.17.1.0  netmask 255.255.255.0  gw 192.168.124.51
    sudo iptables -t nat -F POSTROUTING
    sudo iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
    至此,两台虚拟机中的docker容器可以互相访问了。
  •   本机测试

        # v1 10.0.5.62
    sudo route add -net 172.17.2.0 netmask 255.255.255.0 gw 10.0.5.234
    sudo iptables -t nat -F POSTROUTING
    sudo iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
    # v2 10.0.5.234
    sudo route add -net 172.17.1.0  netmask 255.255.255.0  gw 10.0.5.62
    sudo iptables -t nat -F POSTROUTING
    sudo iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
    至此,两台虚拟机中的docker容器可以互相访问了。
    --外部访问docker网段,需要配置宿主机的route
    例:
    linux下:
    route add -net 172.17.1.0  netmask 255.255.255.0  gw 10.0.5.62
    windows下:
    route add 172.17.0.0 mask 255.255.255.0  192.168.1.50
  配置docker容器静态IP

  • 安装iproute
  • 安装pipework
  • 启动Docker容器
  • 配置容器网络,并连到网桥br0上。网关在IP地址后面加@指定。

    例:pipework br0 centos6-ssh 10.10.101.150/24@10.10.101.254
    4195ef5c5db1

    将主机eth0桥接到br0上,并把eth0的IP配置在br0上。这里由于是远程操作,中间网络会断掉,所以放在一条命令中执行。

    【注意】:重启后,IP重置,需重新配置静态IP,仅执行pipework 一条语句即可。

    此办法会在docker容器里多生成一块网卡 eth1 ,此网卡提供的IP 可供外部进行访问。


由于不同机器配置略有不同,故细节暂时忽略……
docker容器下搭建集群

  • 创建并分配docker容器及用途
  • 配置网络

    由于搭建集群涉及到IP的分配等,为避免后续修改IP等麻烦,故最好确认网络没有问题,再进行下一步;
  • 快速安装集群

    • 静默安装
    • 使用集群半自动化脚本配置集群

      内容已忽略……

  搭建过程中参考了一些博客,对我帮助很大,非常感谢…

链接如下:

http://blog.iyunv.com/samxx8/article/details/46727249

http://my.oschina.net/feedao/blog/223795

http://blog.iyunv.com/uid-22120556-id-75158.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126181-1-1.html 上篇帖子: 使用 Fluentd 管理 Docker 日志 下篇帖子: docker 相关一
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表