初识Docker--Linux Container容器管理

当前,完全硬件虚拟化技术(KVM、Xen、Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等。有时候对用户来说,完全的硬件虚拟化并不是最好的选择。 一种替代方案是使用轻量级虚拟化技术 —— 所谓的 LinuX Container 容器 (LXC),它提供的是系统级虚拟化。与跑虚拟机相比,LXC 可以在一个轻量级沙箱容器里面跑多个 Linux 操作系统。当你需要设置一些易于克隆的开发环境、测试环境,或想在安全沙盒里安装应用时,LXC 就非常有用了。 Docker 是一个开源工具,可以让用户方便地布署 Linux Container 容器。Docker 很快变成了 container 技术的非官方标准,从而被 Ubuntu 和 Red Hat等众多发行版吸收进去。 本教程中我会向你们演示如何在 Ubuntu 14.04 中使用 Docker 来管理 LXC。需要注意的是,本教程的一些内容可能会与其他 Ubuntu 版本下的操作会稍微有些出入。 当前Ubuntu 系统下的 Docker 的安装包只提供64位。如果你想运行32位的 Docker,你需要使用源码编译32位 Docker 工具。 安装 Docker 通过 apt-get 安装 Docker 简直是小菜一碟。 $ sudo apt–get install docker.io 如果你不是 root 组的用户,你可以把自己加入到 docker 用户组。下面的命令可以让没有 root 权限的用户使用…

Read More

Docker小结(二)配置mysql数据库

一、Dockerfile # Dockerizing Mariadb: Dockerfile for building Mariadb images # FROM hub.c.163.com/public/centos:7.2.1511 MAINTAINER yangbk <www.361way.com> ENV DATA_DIR /var/lib/mysql ENV http_proxy 10.212.186.250:3128 # Install Mariadb RUN yum install –y mariadb mariadb–server && \ yum clean all ADD mysqld_charset.cnf /etc/my.cnf.d/ COPY scripts /scripts RUN chmod +x /scripts/start EXPOSE 3306 VOLUME [“/var/lib/mysql”] ENTRYPOINT [“/scripts/start”] 该代码使用文件已上传到:https://github.com/361way/docker/tree/master/mysql ,这里有注意下VOLUME命令,该命令的作用是映射容器的/var/lib/mysql 目录到本地的某个路径(即使该容器删除,相关数据文件依然存在),这个参数后面还会提到,该参数也是本篇着重要介绍的东西。 二、编译使用 使用如下命令编译该镜像文件 docker build –t mysql:5.5…

Read More

Docker小结(二)dockerfile

一、Dockerfile解析 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。其包含的参数有FROM、cmd、RUN、MAINTAINER、CMD、ENTRYPOINT、USER、EXPOSE、ENV、ADD、VOLUME、WORKDIR、ONBUILD等相关命令。我们先以一个dockerfile为例具体理解下: # cat Dockerfile FROM centos:centos7.1.1503 MAINTAINER yangbk <www.361way.com> ENV TZ “Asia/Shanghai” ENV TERM xterm ADD base.repo /etc/yum.repos.d/CentOS–Base.repo ADD aliyun–epel.repo /etc/yum.repos.d/epel.repo RUN yum install –y curl wget tar bzip2 unzip vim–enhanced passwd sudo yum–utils hostname net–tools r sync man && \ yum install –y gcc gcc–c++ git make automake cmake patch logrotate python–devel libpng–devel lib jpeg–devel && \ yum…

Read More

Docker小结(一)docker架构及常用命令

14年左右最早接触过docker,当时在ubuntu系统中只简单的运行过几个命令稍略测试过。在红帽RHCA中有DO280课程(红帽DIY 的 docker + k8s + etcd + haproxy组合产品),趁着学习DO280课程的机会 ,做下DOCKer内容的小结,本篇先从docker架构开始说起。 一、docker架构和常用命令 在开始之前,先简单的看下docker的架构图,如下: docker的常用命令如下: 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port] 容器rootfs命令 — docker [commit|cp|diff] 镜像仓库 — docker [login|pull|push|search] 本地镜像管理 — docker [images|rmi|tag|build|history|save|import] 其他命令 — docker [info|version] 二、命令执行 1、images镜象 这里先从国内的163镜像源下载一个image镜像,查看并运行该镜像,使期产生一个容器: [root@localhost docker]# docker pull hub.c.163.com/public/centos:7.2.1511 //从国内163源拉取一个docker镜像 [root@localhost centos7]# docker images //查看现有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE hub.c.163.com/public/centos 7.2.1511 84352c4ff678…

Read More

主流Linux发行版包管理对比速查表

使用 Linux 系统总是免不了要接触包管理工具。比如,Debian/Ubuntu 的 apt、openSUSE 的 zypp、Fedora 的 yum、Mandriva 的 urpmi、Slackware 的 slackpkg、Archlinux 的 pacman、Gentoo 的 emerge、Foresight 的 conary、Pardus 的 pisi,等等。DistroWatch 针对上述包管理器的主要用法进行了总结,对各位 Linux 用户来说具有很好的参考作用。这个总结还是有一点不足,有空给大家整理一个更全面的版本。 任务 apt Debian, Ubuntu zypp openSUSE yum Fedora, CentOS 安装包 apt-get install <pkg> zypper install <pkg> yum install <pkg> 移除包 apt-get remove <pkg> zypper remove <pkg> yum erase <pkg> 更新包列表 apt-get update zypper refresh yum check-update…

Read More

centos转型ubuntu的基础总结

以前经历的公司的server system主要都是centos/redhat ,目前新的公司主要使用ubuntu,虽然两者之间在很多命令的用法上没有区别,不过一些配置项的东西还是有些差异。这里做下简单的一个概况 。 一、主机名的配置 centos下修改主机名涉及到两个文件的修改/etc/hosts 、/etc/sysconfig/network ,两个文件的内容类似如下: [root@361way etc]# cat /etc/hosts 127.0.0.1 361way.com 361way localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 [root@361way etc]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=361way.com 如果修改完成后不想重启主机,可以使用hostname 361way先临时生效。 ubuntu修改主机名的方法和centos下的类似,也是修改两个文件/etc/hostname 、/etc/hosts ,文件内容类似如下: yang@yang–acer:~$ cat /etc/hostname yang–acer yang@yang–acer:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 yang–acer 注:上面那个主机名下使用的是127.0.1.1 ,这点我感觉有点奇怪 。同样,不重启临时生效也可以使用hostname命令。 二、网络配置 IP配置 centos下的配置文件是/etc/sysconfig/network-scripts/ifcfg-eth0 ,具体内容类似如下: cat /etc/syscionfig/network–scripts/ifcfg–eth0 DEVICE=eth0 #网卡设备名称 HWADDR=“XX:XX:XX:XX:XX:XX” #网卡的MAC地址 ONBOOT=“yes” #随机启动 BOOTPROTO=static #静态分配IP IPADDR=*.*.*.*…

Read More

三张图看遍Linux性能监控、测试、优化工具

Linux 平台上的性能工具有很多,眼花缭乱,长期的摸索和经验发现最好用的还是那些久经考验的、简单的小工具。系统性能专家 Brendan D. Gregg在最近的 LinuxCon NA 2014 大会上更新了他那个有名的关于 Linux 性能方面的 talk (Linux Performance Tools)和幻灯片。 和 Brendan 去年的 talk 比较,今年增加了测试和优化两部分。下面的三张图片分别总结了 Linux各个子系统以及监控、测试、优化这些子系统所用到的工具。 监控 测试 优化

ZooKeeper快速搭建

Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文侧重于zookeeper的快速搭建。具体分为单机配置和集群模式两部分。 一、单机模式 1、配置JDK环境,略过。 2、获取及下载zookeeper 下载地址:http://mirror.bit.edu.cn/apache/zookeeper/stable/ , #wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz #tar zxvf zookeeper-3.4.6.tar.gz -C /usr/local #cd /usr/local #mv zookeeper-3.4.6 zookeeper 3、配置cfg文件 复制cfg配置文件 #cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg 并将配置文件中的datadir修改存放zookeeper的直实路径,如: dataDir=/opt/zookeeper 4、创建数据目录并启动zookeeper #mkdir -p /opt/zookeeper #/usr/local/zookeeper/bin/zkServer.sh start 5、检测是否启动成功 #/usr/local/zookeeper/bin/zkCli.sh 或 #echo stat|nc localhost 2181 二、集群模式 前两步操作和单机模式下的操作相同,这里略过,直接从第三步开始。 3、配置 cfg文件 修改配置文件的内容如下: tickTime=2000 dataDir=/opt/zookeeper clientPort=2181 initLimit=5 syncLimit=2 server.1=192.168.1.1:2888:3888 server.2=192.168.1.2:2888:3888 server.3=192.168.1.3:2888:3888 具体可以参看:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper 这里要注意下server.1这个后缀,表示的是192.168.1.1这个机器,在机器中的server id是1 。 4、创建server…

Read More

也看linux内存去哪儿了

前两天一台128G内存的oracle主机发生故障触发kdump,最终由于var目录空间不足,导致kdump生成不完全。结合之前redhat给出的建议,crash设置的空间最好大于memory 空间。对此我们做了一个简单的计算,认为kdump主机生成的是运行在内存里的信息 ,虽然主机有128G的内存,不过通过top查看并计算后发现我实际上只使用7G多的大小,而使用free -m查看时已经使用了80G左右的内存 。站在DBA的角度看的话,这部分内存提前分配给了sga ,貌似也可以讲通。记得之前看过taobao褚霸写的一篇分析。这里再结合该文章算算。 通过褚霸的Linux Used内存到底哪里去了?我们已经了解到内存主要消耗在三个方面:1. 进程消耗。 2. slab消耗 3.pagetable消耗。 由于不便于直接在现网oracle主机上进行操作,这里就以本blog的云主机为例进行测试。 一、查看已用内存总量 [root@91it ~]# free -m total used free shared buffers cached Mem: 996 908 88 0 174 283 -/+ buffers/cache: 450 546 Swap: 0 0 0 关于已用内存和可用内存这已经是一个老生长谈的问题了。这里看到的信息如下: 1、总内存996M ,已用内存908M 2、由于buffers + cached内存实际上也是可用内存,该内存也可以通过echo 3 > /proc/sys/vm/drop_caches 回收pagechae、dentries and inodes ,所以实际上已经使用的内存是450M 。 注: 1、关于内存的计算方法就不上图了,这点可以参考:http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf 2、linux内存强制回收的方法具体可以参考:linux 下 强制回收内存 。 即然实际使用了450M内存,那这450M内存是如何分配的呢?…

Read More

ansible小结(十 三)playbook中使用debug模块

平时我们在使用ansible编写playbook时,经常会遇到错误,很多时候有不知道问题在哪里 。这个时候可以使用-vvv参数打印出来详细信息,不过很多时候-vvv参数里很多东西并不是我们想要的,这时候就可以使用官方提供的debug模块来查找问题出现在哪里。 playbook示例 # verbosity(added in 2.1),如果使用的的该本低于该版本,使用时会报错 – name: debug test one host hosts: 200.200.6.53 tasks: – debug: msg: “System {{ inventory_hostname }} has uuid {{ ansible_product_uuid }}” – debug: msg: “System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}” when: ansible_default_ipv4.gateway is defined – shell: /usr/bin/uptime register: result – debug: var: result verbosity: 4 – name: Display all variables/facts…

Read More