qq78707 发表于 2015-10-13 10:22:28

Docker学习小结

  经过短期的自学,对docker基础有了简单了了解,并在docker容器上搭建了某数据库6节点的集群,测试成功。下面结合自己搭建成功的过程对部分知识点做下整理,希望对大家有用。
docker安装
检查内核


      uname -a

uname -r

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

一般追加nameserver 4.4.4.4 和 8.8.8.8即可。


# 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.repo 、redhat.repo 这两个文件即可(推荐);

后面如果不能正常进行yum安装,可以配置 epel.repoepel-testing.repohop5.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 prior storage driver "devicemapper" failed: exit status 1
FATA 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.0netmask 255.255.255.0gw 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.0netmask 255.255.255.0gw 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.0netmask 255.255.255.0gw 10.0.5.62
windows下:
route add 172.17.0.0 mask 255.255.255.0192.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]
查看完整版本: Docker学习小结