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

[经验分享] docker搭建

[复制链接]

尚未签到

发表于 2019-2-21 09:50:32 | 显示全部楼层 |阅读模式
1,宿主机系统与docker版本选型
        从现有的系统来看centos7对虚拟化的支持相对来说更完美,对于docker的版本当然是最新的版本功能更完善;
故选择 Centos7+docker最新版本

2kernel升级
现象描述:系统死机
原因描述:centos7.1默认安装的内核为3.10版本,对于运行少量的容器来说不存在任何问题,当运行容器的数量增多时(比如100台)就会发现容器运行一段时间后操作系统会死机,导致整个物理机不可用,经研究发现将系统内核升级到4.2即可解决此问题。
解决方案:
查看系统当前内核版本




yum升级kernel至4.x
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    yum install http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
    yum --enablerepo=elrepo-kernel install kernel-ml
    grub2-set-default 0

cat /boot/grub2/grub.cfg |grep menuentry

grub2-set-default "CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)"   设置第一个内核选项为默认启动项

 grub2-editenv list  查看是否设置成功



重启操作系统
    reboot
再次查看nerker版本

如需卸载可使用:yum remove kernel-ml

repo.org
3,内核调优
现象描述:网络高延时、丢包
原因描述:单台宿主机运行百台以上容器时,对宿主机的压力相应增加,其中网络方面表现最为明显;
以ARP为例:容器使用br0的网络与外面通信,这样每台容器都会将arp信息缓存下来,如果100台容器分别将网关、宿主机这两条信息存入ARP缓存表,那么物理机上的arp缓存表就有200条;而系统默认的arp缓存条目为128条,所以将导致一部分arp信息被覆盖掉。如果容器间进行频繁的网络通信,就会表现出大量的延时甚至丢包。
cat /proc/sys/net/ipv4/neigh/default/gc_thresh1   #系统默认的ARP缓存条目
cat /proc/sys/net/ipv4/neigh/default/gc_thresh2  #系统ARP条目值的软限制
cat /proc/sys/net/ipv4/neigh/default/gc_thresh3   #系统ARP条目值的硬限制


解决方案:
修改系统内核参数
vim /etc/sysctl.conf

# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).


net.ipv4.ip_forward=1
net.ipv4.neigh.default.gc_thresh1=25600
net.ipv4.neigh.default.gc_thresh2=51200
net.ipv4.neigh.default.gc_thresh3=102400
net.core.rmem_default = 2097152
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.wmem_default = 2097152
net.ipv4.neigh.default.base_reachable_time = 172800
net.ipv4.neigh.default.gc_stale_time = 172800
kernel.msgmax=65536
kernel.msgmnb=65536
kernel.pid_max=65535

sysctl -p



/etc/security/limits.d/20-nproc.conf
*          soft    nproc     65535

ulimit -n 65535
echo "* soft nproc 65535"  >> /etc/security/limits.conf
echo "* hard nproc 65535"  >> /etc/security/limits.conf
4,设置桥接网卡
1    安装包
yum install  bridge-utils -y  

2)设置bond网卡
[root@docker011 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
BOOTPROTO=none
DEVICE=bond0
ONBOOT=yes
BONDING_OPTS='mode=1 miimon=100'   (mode=1,网卡绑定模式为主备)
BRIDGE=br0

3)设置 ifcfg-br0 网卡文件
[root@docker011 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPADDR=21.68.26.247
PREFIX=23
GATEWAY=21.68.27.254

结尾  Service  network  restart  重启网卡

5,安装docker
    1)配置yum源
cd /etc/yum.repos.d/
vim docker.repo
[docker-epel]
name=docker-epel
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=0



    2)配置http代理,如果宿主机能直接链接外网请跳过此步骤
export http_proxy=http://10.59.19.251:48080


3)yum安装docker-io
yum install docker-io


安装完成后修改docker服务的启动参数
vim /etc/sysconfig/docker
修改other_args=""other_args="-b br0 --insecure-registry=rocshen.io"
-b=br0    #容器启动时的网络地址池
--insecure-registry=rocshen.io   #支持使用HTTP协议从仓储rocshen.io下载镜像




Stg1 :OPTIONS='--insecure-registry=1qianbao.com -b=br0 --storage-driver=devicemapper --storage-opt dm.basesize=80G --selinux-enabled=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:9999'
/etc/sysconfig/docker-storage-setup
CONTAINER_THINPOOL=docker-pool
目前我的docker环境:OPTIONS='--selinux-enabled=false --storage-driver=devicemapper --storage-opt dm.basesize=100G --insecure-registry=mrroy.io -b br0'


Rm -rf /var/lib/docker/*
cd /var/lib/docker      -----清除全部内容
mkdir -p  /var/lib/docker/devicemapper/devicemapper/       ---创建两个devicemappe目录

然后再进入devicemappe目录下创建:
dd if=/dev/zero of=data bs=1G count=0 seek=1500
dd if=/dev/zero of=metadata bs=1G count=0 seek=2



启动docker服务
systemctl start docker.service
查看docker版本
[root@docker3 ~]# docker -v


  Docker version 1.13.1, build 774336d/1.13.1




6,拉取docker镜像
添加hosts主机名信息
添加 10.59.41.251 rocshen.io /etc/hosts



拉取镜像
docker pull rocshen.io/centos6_base

l

至此,docker服务器搭建完

7私有仓储搭建:

#[root@docker5 ~]# yum install docker-registry
#[root@docker5 ~]# vim /etc/sysconfig/docker-registry

# Port to bind the registry to
    REGISTRY_PORT=80    --->修改端口号未本机80,支持http

#[root@docker5 ~]# service docker-registry start                    

下载or 创建基础镜像

1将基础镜像打 tag  并传到本地image
    docker tag  roy-web  roy.com/jboss-test     


2)通过dockerfile文件定制镜像文件(命令后.表示当前目录加载dockerfile文件
    docker  build  -t  roy.com/jboss-test  .    


# docker histry --no-trunc


3)将定制好的镜像push到目前docker私有仓库中。
docker   push   roy.com/jboss-test                 

#到此可以通过docker客户端通过以上私有仓库进行pull镜像文件,(需要修改docker客户端/etc/sysconfig/docker OPTIONS='--insecure-registry= roy.com

4.docker run -id --name cip-web --privileged roy.com/jboss-test /init.sh -h cip-web
   启动刚build的镜像系统,并-id在后台运行,--name 启动时添加的别名。

5.docker exec -it  cip-web  /bin/bash                                                                     进入到cip-web系统

6docker stop cip-web                                                                                                停止刚启动的系统,可以使用docker ps查看哪些系统在启动

7.docker rmi  b989f592aed2                                                                                     删除镜像文件





脚本方法:
1.bash dockerbuild.sh -v 1224 -h cip-web --build --push               使用dockerbuild.sh脚本构建cip-web子系统镜像文件
2.rundocker -v 0121 -h abp-web                                                                      -v 指定本次需要启动的版本,-h 系统名称
  docker导出镜像
  docker save -o 文件名 镜像名
  docker导入镜像
  docker load < 文件名
  docker images  查看当前机器所有镜像
  docker inspect 容器名字    获取容器/镜像的元数据。
  docker stop 容器名字
  docker rm 容器名字
  docker stats $(docker ps --format={{.Names}}) --no-stream
  docker exec -i 容器ID bash ps -a
  docker tag 66ee80d59a68 1qianbao.com/centos7
  docker磁盘动态扩容
  重启docker后会无法启动容器
  需要先启动docker start centos7 忽略报错
  在运行一遍扩容脚本disk.sh centos 250(大于等于之前的容量)

  在启动dcoker start centos7 就好了
#!/bin/bash
#This script is dynamic modify docker container disk
if [ -z $1 ] || [ -z $2 ]; then
    echo &quot;Usage: container_name increase_capacity&quot;
    echo &quot;Example: I want increase 11G to test&quot;
    echo &quot;The command is:   sh `basename $0` test 11&quot;
    exit 1
                                                                                                                                                        fi
if [ `docker inspect $1 &>>/dev/null &&  echo 0 || echo 1` -eq 1 ];then
    echo &quot;The container $1 is no exist!&quot;
    exit 1
fi
#container_id=`docker inspect -f '{{ .Id }}' $1`
container_id=`docker inspect $1 | grep DeviceName | awk -F '&quot;' '{print $4}'`
now_disk=`dmsetup table /dev/mapper/$container_id|awk '{print $2}'`
disk=$(($2*1024*1024*1024/512))
if [ $disk -lt $now_disk ];then
    echo &quot;I can't shink container $1 from $(($now_disk*512/1024/1024/1024))G to ${2}G!I only modify contanier increase disk!&quot;
    exit 1
fi
dmsetup table /dev/mapper/$container_id|sed &quot;s/0 [0-9]* thin/0 $disk thin/&quot;|dmsetup load /dev/mapper/$container_id
dmsetup resume /dev/mapper/$container_id
xfs_growfs /dev/mapper/$container_id
if [ $? -eq 0 ];then
    echo &quot;dynamic container $1 disk to ${2}G is success!&quot;
else
    echo &quot;dynamic container $1 disk to ${2}G is fail!&quot;
fi



运维网声明 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-675184-1-1.html 上篇帖子: docker中容器(Debian)安装软件 下篇帖子: Docker进阶与实战_帝都客_ pdf扫描版_完整版_资源免费下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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