Docker初探

近期虚拟化领域Docker炒的沸沸扬扬,一时间不晓得它究竟是个什么鬼~ 查阅许久。略微明确了点:

1,Docker是一种应用虚拟化技术,它是基于Linux内核提供的LXC技术实现的,而传统的虚拟化技术是基于CPU虚拟化的(当然,还有KVM等应用软件虚拟化,这里不讨论)。

CPU虚拟化是硬件提供的一种功能,在RING0下引入了RING-1。

因此它对于主流OS都是透明的。而Docker是基于Linux内核的LXC技术,这也注定了它上面仅仅能跑Linux的虚拟机,并且跑在上面的虚拟机看到的内核都是宿主的内核。这就是本质差别,详细点:

1.1 CPU虚拟化下的虚拟机,每个虚拟机全然独立,彼此不受影响。

1.2 Docker下的虚拟机,基于LXC技术,和宿主机共用一个内核(不信?在虚拟机下和宿主机下执行下uname -a就知道了);虚拟机的一个进程直接映射到宿主机的一个进程(在虚拟机下和宿主机下都ps -a试下吧)。

但每个虚拟机看不到其它虚拟机及宿主机的进程。但宿主机能够看到全部虚拟机的进程,并且和自身进程一一相应。这就是Docker效率高的原因之中的一个。

看透了这点基本上就搞明确Docker是个什么鬼了。可惜我在度娘上折腾了半天,愣是没有一个人说明确的,亏我悟性好~

2,Docker是一种更轻量级的虚拟化技术。但它临时还代替不了CPU虚拟化技术,人家的优势在:

2.1 虚拟机隔离,安全

2.2 OS透明,虚拟机的系统能够是linux、windows。啥都行,Docker仅仅支持linux。

不要告诉我windows也支持Docker了。它仅仅是装了linux虚拟机,然后在这个虚拟机上执行docker,再虚拟些docker容器。

包了个壳。扯淡的技术。

3。Docker配套的工具还不是非常成熟。基本上全得命令行干活。我一開始在想:虚拟机的文件存在那?怎么获取客户机IP地址?如何远程获取终端?使用图形界面怎么办(如,安装Oracle)?摸索了一番,基本解决。

以下说说我在Ubuntu 14.04.3 上折腾的经历:

3.1 安装docker: apt-get install docker.io

3.2 启动docker服务: service docker.io restart

3.3 下载镜像:docker pull centos:6

3.4 启动容器:docker run -i -t centos:6 /bin/bash

此时会进入bash终端,但不是执行在root用户下,建议马上su。否则有时你会非常纠结。比方后面安装vncserver时~

假设su报错,多半是内核版本号问题。亲測:3.13.0-62的内核是行的,但3.19.0-26的内部不行

3.5 安装ssh:yum install openssh-server

service sshd restart

3.6 关闭防火墙:service iptables stop

3.7 文件存在哪:这个网上说的到挺清晰的,AuFS。主要的镜像文件,加容器改动的内容单独保存的文件,层次结构,就像CAD的图层一样。

。。

3.8 网络信息:宿主机下ifconfig。可看到docker0虚拟网卡。全部的虚拟机都接在它上面,由他分配ip地址;虚拟机下ifconfig。可看到自己的eth0网卡。假设你须要在其它电脑上訪问虚拟机,则须要添加一条路由规则,将全部訪问docker0子网下的请求都路由到宿主机的eth0地址上。我是改动的路由器,添加了静态路由;也能够改动须要訪问电脑的路由表,仅仅是麻烦些。

3.9 图形界面咋搞定:这个说实话,比較纠结,资料也少,我悟性这么高的人。也折腾了一上午。总的思路是先安装图形包,然后通过vnc訪问图形界面:

yum groupinstall "Desktop"

yum groupinstall "X Window System"

yum groupinstall "Chinese Support"

yum install tigervnc-server

vi /etc/sysconfig/vncservers,添加:

VNCSERVERS="1:root"           --指定远程用户

VNCSERVERARGS[1]="-geometry 1024x768"      --指定远程桌面分辨率

vncpasswd (注意,此时一定要在root用户下运行,不放心还是su一下吧,docker容器里who没反应)

vi ~/.vnc/xstartup,改动:

#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &               --将它凝视,加#代表凝视

#twm &  --将它凝视

gnome-session &  --加入它

service vncserver restart

好了,能够通过vncclientIP:1訪问图形界面了。

Docker基本命令參考:http://www.tuicool.com/articles/7V7vYn

CentOS安装VNC參考:http://blog.csdn.net/Matrix_Designer/article/details/7604872、http://blog.itpub.net/666724/viewspace-1058843/

时间: 2024-08-24 16:09:36

Docker初探的相关文章

docker 初探

2015-08-14 09:24:42 查看本地已经有的镜像: docker images 启动镜像实例(例centos), 并进入centos命令行提示符 (镜像的一个实例就叫container): docker run -it centos bash 查看最后一次创建的container: docker ps -l 查看当前运行的所有container: docker ps -a 进入一个container继续使用命令行交互: docker exec -it containerID bash

Docker初探:利用Docker运行samtools

# Dockerfile 文件 From ubuntu:18.04 LABEL maintainer="luo <@ibnesayeed>" WORKDIR /app RUN apt-get update RUN apt-get install -y samtools COPY runsamtools.py /app/ RUN chmod 777 runsamtools.py ENTRYPOINT ["./runsamtools.py"] # runsa

Flynn初探:基于Docker的PaaS平台

Flynn是一个开源的PaaS平台,可自动构建部署任何应用到Docker容器集群上运行,其功能特性与组件设计大量参考了传统的PaaS平台Heroku.本文旨在从使用动机.基本对象.层次架构.功能组件.基本工作流这几个方面对Flynn做总体的介绍. 为什么需要Flynn 为了便于理解Flynn的作用与功能,让我们先来看看应用程序从开发到构建再到部署再到运行分别需要经历的几个实体状态: 更具体一点,以一个Java程序为例来描述: 源代码:包括*.java.log4j.properties.pom.x

Docker的使用初探(一):常用指令说明

目录 Docker的使用初探(一):常用指令说明 为什么要用Docker Docker的安装与简单使用 国内镜像加速 常用指令 Docker的使用初探(一):常用指令说明 前几个星期实践的了,再不记录一下真的就忘干净了 Docker即容器技术,具体的介绍已经有很多,不打算赘述了,说一些优点 为什么要用Docker 对我个人来说,最大的优点就是在一台电脑上可以部署不同的环境而不用担心它们产生冲突,最常见的冲突就是端口占用,使用Docker技术可以很方便地规避这一问题,而且便于管理,我不用在本地处理

Docker的使用初探(二):Docker与.NET Core的结合

目录 Docker的使用初探(二):Docker与.NET Core的结合 添加Dockefile 1. 在创建项目时添加 2. 手动添加 3. 容器业务流程协调控制程序支持 Dockefile语法 Docker项目调试 仅添加文件的方式 容器业务流程协调控制程序支持 Docker的使用初探(二):Docker与.NET Core的结合 在二者的结合上,微软官方给予了很大的支持,从官方发布的一些文章和VS 2017在建立.NET Core项目时自带的Docker选项都可以看出来,这也与Core的

Docker Hub 使用初探

Docker Hub 使用初探 —— 魏刘宏 2019.10.26 容器的话题越来越热,今天我也来试试容器的使用,我们以 Docker Hub 为例. Docker Hub 官网为 https://hub.docker.com/ ,主要用于托管容器镜像,我们以 Linux 系统 centos 为例: 详细页面给出了拉取的命令,不带标签默认拉取最新的: 点击 View Available Tags 可查看所有标签,其中标签 7 应该就是标签 centos7 的简写: 我们在 Docker Hub

[docker]swarm初探

Docker新发布了swarm,machine,compose. 这里主要对swarm进行说明. 之前,用户需要对各个docker engine进行操作(发送rest消息或者执行docker命令). swarm则将一组docker enginge作为一个集群进行管理,并提供过了lablel,schedule,filter的能力. swarm保持了对docker原有API的兼容,我们可以像使用单一个docker engine一样管理一个docker engine集群. swarm还可以对集群中的节

[Docker][ansible-playbook]3 持续集成环境初探

预计阅读时间: 20分钟 本期解决痛点如下:1. 代码版本的多样性,编译环境的多样性如何解决?答案是使用docker,将不同的编译环境images统统打包到私有仓库上,根据需求进行下载,从宿主机上挂载volume到docker container上进行编译等操作2. 打包编译好的各个模块组件如何部署到不同的服务器上?答案是使用ansible-playbook,根据yml脚本进行部署,其服务器部署ip由统一的inventory配置文件控制(默认路径在 /etc/ansible/hosts) Tal

初探Docker

本文旨在让大家了解什么是Docker,并带领大家体验Docker使用的整个流程. 开启Docker学习之旅前,我们简单描述几个场景,应该很多人都有碰到过: 小凹同学开发了一个web应用,服务器环境是: centos 7 + nginx + node4.6 + mongodb3.2.3 最近要上线了. [场景1]:刚好公司有一台服务器可以用,但是服务器上有一些其他服务,而且已经装了node3.31和mongodb2.3,小凹蒙了,到底是直接升级环境呢?还是改一个适配低版本的应用呢? [场景2]:终