Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。利用Linux的LXC、AUFS、Go语 言、cgroup实现了资源的独立,可以很轻松的实现文件、资源、网络等隔离,其最终的目标是实现类似PaaS平台的应用隔离。

Docker值得关注的特性:


  • 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。

  • 资源隔离:系统资源,像cpu和内存等可以分配到不同的容器中,使用cgroup。



  • 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。



  • 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。



  • 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。



  • 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次***互shell。


Docker通常用于如下场景:

web应用的自动化打包和发布;

  • 自动化测试和持续集成、发布;

  • 在服务型环境中部署和调整数据库或其他的后台应用;

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

本文介绍如何在RedHat/CentOS环境下安装Docker。官方文档要求Linux kernel至少3.8以上,且docker只能运行在64位的系统中。由于RHEL6和CentOS6的内核版本为2.6,因此必须要先升级内核。

下面以CentOS6.5(64位)为例,介绍下docker安装步骤和使用方法:

一、升级内核(带aufs模块)

1、yum安装带aufs模块的3.10内核(或到这里下载kernel手动安装:http://down.51cto.com/data/1903250)

cd /etc/yum .repos.d
wgethttp: //www .hop5. in /yum/el6/hop5 .repo
yum install kernel-ml-aufskernel-ml-aufs-devel

2、修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)。

3、重启系统,这时候你的内核就成功升级了。

[root@localhost~] #uname-r
3.10.5-3.el6.x86_64

查看内核是否支持aufs:

#grepaufs/proc/filesystems
nodevaufs

二、安装docker

1、首先关闭selinux:


setenforce0


sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

2、在FedoraEPEL源中已经提供了docker-io包,下载安装epel:

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


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

3、yum安装docker-io:



yum-y docker-io


4、启动docker:





servicedockerstart



5、查看docker版本:

查看docker日志:


cat /var/log/docker


三、docker命令的使用

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

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

2、搜索可用的docker镜像:docker search NAME docker search centos-6.8 docker search ubuntu-14.04

3、下载镜像:docker pull NAME[:TAG] //docker pull ubuntu:14.04 docker pull centos:6.8

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

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

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

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

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

在刚刚下载的镜像中输出"hello word":docker run centos echo 'Hello World!'

6、列出容器:docker ps -a

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

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

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

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

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

docker run -it centos /bin/bash

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

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

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

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

快速停止可用命令:docker kill CONTAINERID

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

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

12、删除容器:docker rm CONTAINERID

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

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

13、删除镜像:docker rmi IMAGE

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

四、创建容器并登入的操作

1、创建一个新容器并登入:docker run -i -t IMAGE /bin/bash //(默认容器名称自动产生)

定义容器名字:docker run --name=centos -i -t IMAGE /bin/bash

使用image创建container并进入交互模式,login shell是/bin/bash,现在可以自由的对容器进行操作了。最后使用exit退出容器。 执行ctrl+p和ctrl+q启动守护式容器 用docker ps查看

docker run --name=centos -d IMAGE /bin/bash //启动守护式容器,在后台运行程序

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

2、启动一个退出的容器:docker start CONTAINERID docker start -i CONTAINERID //-i交互方式启动

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

查看日志

wKiom1eYew6iGTrIAADyX5kmx1U060.png

查看运行中容器的进程

docker top container

在运行中的容器内启动子进程
$docker exec [-d][-i][-t] 容器名 Command Arg
docker exec -i -t centos /bin/bash


五:容器端口号的映射 :run命令

wKioL1eYiUnjq7-XAALgZaAnnjQ617.png

创建映射80端口的交互式容器
$ docker run -p 80 --name web -i -t centos /bin/bash

wKioL1eYhYTzZCp3AABn4lIGy84006.png

查看网站是否可以访问

~$ curl 127.0.0.1:49167

也可以用ip地址直接访问

~$ docker inspect container //得到ip


$ docker stop container

$ docker start -i container // ctrl+p ctrl+q

$ docker exec container Nginx //开启Nginx服务

当停止一个容器,并重新启动时,原来的ip和端口映射都会发生改变

CentOS6下安装docker的更多相关文章

  1. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 将容器带到视图前方

    我怎样才能解决这个问题?

  3. ios – 如何使用XCode 6.4下载和替换AppGroup容器

    我知道如何使用XCode6的Devices窗口下载和替换特定iOS应用程序的文件系统容器.但是对于我正在开发的应用程序,我需要能够下载和替换共享的AppGroup容器以进行调试.这将使我能够模拟AppGroup文件夹内容中的情况以进行测试.任何人都可以告诉我如何做到这一点?

  4. ios – 在UITableView上移动UIView – 触摸顶部UIView仍然选择表行

    =======用一些代码编辑:这是我在容器B中所做的代码.这是B帧的一个非常直接的动画.self.view是ContainerB的UIView.所有视图都在屏幕上通过故事板.其他容器是B的子视图.请让我知道你想看到的其他代码.解决方法嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.我的意思是,创建一个包含A,B,O及其子视图的ContainerZ,并尝试从Z中设置B的位置动画,检查B是否在A前面.

  5. 在两个屏幕上运行的iOS应用程序(无镜像)

    我创建了一个包含幻灯片的iPad应用程序,当用户点击此幻灯片时,他/她可以输入一些信息.我现在要做的是在通过AirPlay连接电视和iPad时在电视上显示幻灯片显示内容可以这样做吗?如何在iOS中完成?所以不要反映整个应用程序.解决方法您可以使用Airplay和AppleTV编写应用程序以处理2个UIScreens,然后为电视UIScreen和iPadUIScreen设置单独的根视图控制器.然后在电视的视图控制器上显示图像或幻灯片,并从iPad视图控制器的事件中运行该图像或幻灯片!

  6. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

  7. ios – 如何镜像UIBezierPath?

    我有一个UIBezierPath,我想得到它的镜像.我该如何做到这一点?

  8. ios – 编程嵌入UIViewController?

    我有一个带有一个容器视图的UIViewController的Storyboard设置,以便我可以在其中嵌入另一个UIViewController.在某种情况下,我需要更改嵌入式视图控制器.在我的故事板中,我的容器视图不能有两个区段.这导致我以编程方式进行.我的容器视图在我的故事板,没有连接的嵌入.现在从这一点开始,我如何以编程方式嵌入我所选择的UIViewController对象?

  9. ios – 使用Swift访问非默认的Cloudkit容器

    我有一个IOS8应用程序,它成功地将记录写入其默认的Cloudkit容器.现在我希望在OSX下的不同应用程序中读取和处理这些记录.我已经设置了具有iCloud访问权限的新应用程序,并选中了“指定自定义容器”选项.这已成功找到原始应用程序和我的容器没有错误要在Capabilities界面上修复.我的所有搜索都告诉我“同一个开发人员签署的两个应用程序可能共享同一个容器”但我找不到的任何教程文档都告诉我

  10. ios – Airplay:外部窗口镜像子视图

    米解决方法称为AirPlay镜像的技术命名不佳.它实际上以两种模式运行,一种是将整个iOS设备镜像到AirPlay设备,另一种模式下,一旦连接了镜像AirPlay设备,开发人员就可以使用两个UIWindow/UIScreen.您正在使用后一种模式,通常被称为“镜像”,但是您真的有一个完全独立的窗口/屏幕进行管理,应该有更好的术语来指代这种操作模式.上面所描述的内容基本上是将UIView从设备窗口移动到AirPlay窗口,它的工作原理与之一致!

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部