centosd6.5-64-部署docker及简单命令

举报
水中游 发表于 2019/01/16 13:07:59 2019/01/16
【摘要】 centosd6.5-64-部署docker及简单命令

Docker

1.介绍

1.1 什么是Docker

 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1.2 起源

Docker  PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github , 基于go语言并遵从Apache2.0协议开源。

1.3 Docker架构

Docker 使用C/S架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

1.4 特性

docker的网站上提到了docker的典型场景:

·  Automating the packaging and deployment of applications(使应用的打包与部署自动化)、

·  reation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)

·  Automated testing and continuous integration/deployment(使连续的集成/部署、测试自动化)

·  Deploying and scaling web apps, databases and backend services(部署、衡量网页app、数据库和后台服务)

由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)

1.5局限性

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

1.            Docker是基于Linux 64bit的,无法在32bitlinux/Windows/unix环境下使用

2.            LXC是基于cgrouplinux kernel功能的,因此containerguest系统只能是linux base

3.            隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库

4.            网络管理相对简单,主要是基于namespace隔离

5.            cgroupcpucpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)

6.            dockerdisk的管理比较有限

7.            container随着用户进程的停止而销毁,container中的log等用户数据不便收集

针对1-2,有windows base应用的需求的基本可以pass; 3-5主要是看用户的需求,到底是需要一个container还是一个VM, 同时也决定了docker作为 IaaS 不太可行。

针对6,7虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount --bind)。总之,选用container还是vm, 就是在隔离性和资源复用性上做权衡

Docker并非适合所有应用场景,Docker只能虚拟基于Linux的服务。Windows Azure 服务能够运行Docker实例,但到目前为止Windows服务还不能被虚拟化。

可能最大的障碍在于管理实例之间的交互。由于所有应用组件被拆分到不同的容器中,所有的服务器需要以一致的方式彼此通信。这意味着任何人如果选择复杂的基础设施,那么必须掌握应用编程接口管理以及集群工具,比如SwarmMesos或者Kubernets以确保机器按照预期运转并支持故障切换。

针对Docker环境存在的不足,意味着在开始部署Docker前需要考虑如下几个问题。首先,Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。

其次,开发Docker实例并不像创建一台虚拟机、添加应用然后克隆那样简单。为成功创建并使用Docker基础设施,管理员需要对系统管理的各个方面有一个全面的理解,包括Linux管理、编排及配置工具比如PuppetChef以及Salt。这些工具生来就基于命令行以及脚本。[3] 

1.6 相关资源类别

我们主要关心cgroups可以限制哪些资源,即有哪些subsystem是我们关心。

cpu : cgroup中,并不能像硬件虚拟化方案一样能够定义CPU能力,但是能够定义CPU轮转的优先级,因此具有较高CPU优先级的进程会更可能得到CPU运算。 
  通过将参数写入cpu.shares,即可定义改cgroupCPU优先级 - 这里是一个相对权重,而非绝对值。当然在cpu这个subsystem中还有其他可配置项,手册中有详细说明。

cpusets : cpusets 定义了有几个CPU可以被这个group使用,或者哪几个CPU可以供这个group使用。在某些场景下,单CPU绑定可以防止多核间缓存切换,从而提高效率

memory : 内存相关的限制

blkio : block IO相关的统计和限制,byte/operation统计和限制(IOPS),读写速度限制等,但是这里主要统计的都是同步IO

net_cls cpuacct , devices , freezer 等其他可管理项。[5] 

 

#!/usr/bin

#升级内核带aufs模块

cd /etc/yum.repos.d

wget http://www.hop5.in/yum/el6/hop5.repo

yum install kernel-ml-aufs kernel-ml-aufs-devel

#设置default=0,表示第一个title下的内容为默认启动的kernel

sed -i 10s/1/0/g  /etc/grub.conf

aufs=grep aufs /proc/filesystems

if [$aufs -eq 0 ]

than echo"kernel-aufs install SUCCESS!"

else echo"kernel-aufs install failed. Try again!"

fi

#安装docker

rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/epel.repo

yum -y install docker-io

service docker start

 

docker命令的使用

    1、直接输入docker命令来查看所有的Options和Commands。

    查看某一个command的详细使用方法:docker COMMAND --help

wKiom1R1dHbzIJLfAADQR3jiJtM669.jpg

    2、搜索可用的docker镜像:docker search NAME

 

    3、下载镜像:docker pull NAME[:TAG]

    比如获取最新的centos镜像:docker pull centos:latest

    注意:这里要写用docker search搜索到的完整的镜像名。
    4、查看安装的镜像:docker images [NAME]

wKiom1R1c7LgL0uwAADPCgcMWqw663.jpg

    5、在docker容器中运行命令:docker run IMAGE [COMMAND] [ARG...]

    docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。

    注意:IMAGE=REPOSITORY[:TAG],如果IMAGE参数不指定镜像的TAG,默认TAG为latest。

    在刚刚下载的镜像中输出"hello word":docker run centos echo 'hello world!'wKiom1R1c3fj6XQFAABqRD8XV6o479.jpg

    6、列出容器:docker ps -a

    查看最近生成的容器:docker ps -l

    查看正在运行的容器:docker ps

    7、显示容器的标准输出:docker logs CONTAINERID

    无需拷贝完整的id,一般写最开始的三至四个字符即可。

wKiom1R1m_STX0iUAAGRjbJx35o891.jpg

    8、在容器中安装新程序,比如安装ifconfig命令(centos7默认没有ifconfig):docker run centos yum install net-tools -y

    如果yum不指定-y参数的话,yum命令会进入交互模式,需要用户输入命令来进行确认,在docker环境中是无法响应这种交互的。但使用docker run的-i -t参数就会响应这种交互,用户可以输入命令了,比如:docker run -i -t centos yum install net-tools

    9、保存对容器的修改并生成新的镜像:docker commit CONTAINERID [REPOSITORY[:TAG]]

    REPOSITORY参数可以是新的镜像名字,也可以是旧的镜像名;如果和旧的镜像名和TAG都相同,会覆盖掉旧的镜像。

 

    10、停止正在运行的容器:docker stop CONTAINERID

    默认等待10秒钟再杀死指定容器。可以使用-t参数来设置等待时间。

wKioL1R1eVaAon28AAFM9IS_WPk474.jpg

    11、查看容器或镜像的详细信息:docker inspect CONTAINERID|IMAGE

    参数可以是容器的ID或者是镜像名(NAME:TAG)。

wKioL1R1e8uSeslZAAIcWL54yBA017.jpg

    12、删除容器:docker rm CONTAINERID

    查看所有容器ID:docker ps -a -q

    删除所有的容器:docker rm $(docker ps -a -q)

    13、删除镜像:docker rmi IMAGE

wKioL1R1oW-gqMmrAALqpTRiwN8314.jpg

    14.查看docker的信息,包括Containers和Images数目、kernel版本等。

wKiom1R1sCDBp_afAAEBBnNOVBo956.jpg

创建容器并登入的操作

    1、创建一个新容器并登入:docker run -i -t IMAGE /bin/bash

    使用image创建container并进入交互模式,login shell是/bin/bash,现在可以自由的对容器进行操作了。最后使用exit退出容器。

    注意:如果IMAGE参数不指定TAG,默认TAG为latest。

    2、启动一个退出的容器:docker start CONTAINERID

    3、attach到运行中的容器:docker attach CONTAINERID

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。