理解并使用Docker

本文并不是科普问,只是对Docker的一些个人理解,使用。
为什么使用Docker呢?一般程序员在搭建开发环境问题时,通常会遇到如下问题:

  • 软件安装麻烦,系统环境不同,软件安装通过运维人员操作容易出现问题,因为不提供ssh权限,导致调试不便。
  • 隔离性差,例如不同的开发人员如果在同一台主机环境下共享开发,虽然是用户隔离,但端口如果不规范可能会冲突;同一个Mysql如果权限管理不好很有可能误删别人的数据
  • 可移植性差,例如和生产环境不一致,开发人员之间也无法共享;更严重的情况是当有新人入职时,通常需要又折腾一遍开发环境,无法快速搭建

Docker利用Linux的LXC和AUFS,为我们的应用程序提供轻量级的虚拟环境。性能有待考证,不知国内是否有公司运用在生产环境。
Docker有两个重要概念:image,container

image

可以理解为基本的操作系统镜像,为只读的,共享的,支撑container的层。

container

基于image的,可写的层。所有基于image运行的命令,都会产生一个container,运行完,container就会停止。
做个试验
基于centos6-ssh这个image,创建一个包含hello word的文件/root/hello.txt:

[root@localhost ~]# docker run centos6-ssh echo "hello world" > /root/hello.txt

再试图读取一下该文件:

[root@localhost ~]# docker run centos6-ssh cat /root/hello.txtcat: /root/hello.txt: No such file or directory

无法读取,没有这个文件。因为其实是运行了2个container,文件是在第一个container中创建的。我们来看一下刚才自动创建的container:

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS                     NAMES
2f55c998fa75        centos6-ssh:latest   cat /root/hello.txt    2 minutes ago       Exit 1                                        focused_ritchie
6822bdf4eae8        centos6-ssh:latest   echo hello world       3 minutes ago       Exit 0                                        sharp_poincare

那我们要如何从新访问刚才那个container中的hello.txt文件呢?正确的使用方式,应该是将container后台运行(-d参数),通过开启ssh服务,保持container up状态。通过ssh连接到container,创建或或者访问文件。

基本命令

查看已经下载、或者自己构建的image

[root@localhost centos6-image]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos6-base        latest              4cd606247337        42 minutes ago      311.2 MB

开启一个bash,交互性的,伪tty。exit退出

[root@localhost centos6-image]# docker run -i -t centos6-base /bin/bash
bash-4.1# ls
bin   dev  home  lib64  mnt  proc  sbin     srv  tmp  var
boot  etc  lib   media  opt  root  selinux  sys  usr

创建包含ssh服务的image,开启ssh服务;ssh端口暴露出来.最为后台运行,不会退出。

docker build -t centos6-ssh https://git.oschina.net/feedao/Docker_shell/raw/start/Dockerfile
docker run -d -p 127.0.0.1:33301:22 centos6-ssh

之后就可以ssh我们创建的container,正常使用linux系统一样使用container.

Reference

http://tech.uc.cn/?p=2726
http://my.oschina.net/feedao/blog/223795
http://docs.docker.io/

时间: 2024-10-29 08:11:59

理解并使用Docker的相关文章

Docker改名啦?什么是 Moby Project

DockerCon上最大的新闻莫过于Solomon Hykes宣布Moby项目了,这也在网上引发了轩然大波,关切和争论纷至沓来,一些所谓"解读"也更加让人困惑. 简而言之,Docker公司决定将软件产品"Docker"和开源项目"Docker"区分开来.Moby Project项目将作为开源项目的新名称,它包含了一系列公共开源组件,用于组装专门的容器系统.Moby将由开源社区的开发者共同维护.而Docker公司会基于Moby构建Docker社区版

我的碎碎念:Docker入门指南

本文讲的是我的碎碎念:Docker入门指南,[编者的话]之前曾经翻译过很多Docker入门介绍的文章,之所以再翻译这篇,是因为Anders的角度很独特,思路也很调理.你也可以看下作者的演讲稿<Docker, DevOps的未来>.本文介绍了Docker的一些基本概念.诱人的特性.Docker的工作原理.日常管理基本操作,以及一些Docker的问题的解决方案. 什么是Docker,你应该知道些什么? 相比很多人的解释,我相信说Docker是一个轻量级的虚拟机更容易理解.另外一种解释是:Docke

docker 架构 与原理

注个人理解: docker 的镜像是位于最底层,但使用宿主主机的操作系统内核,我们可以看到docker的镜像十分的小,原因是docker镜像只是一些环境的配置,所以十分的小,他是只能读不能写的. docker的 容器 是依赖与镜像的,是在镜像上安装一些自定义软件,是可读可写的. Docker 架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于面向对象编程中的对象与类

深入分析 Docker 镜像原理

第一部分:Docker镜像的基本知识 1.1 什么是Docker镜像 从整体的角度来讲,一个完整的Docker镜像可以支撑一个Docker容器的运行,在 Docker容器运行过程中主要提供文件系统视角.例如一个ubuntu:14.04的镜像,提供了一个基本的ubuntu:14.04的发行版,当然此 镜像是不包含操作系统Linux内核的. 说到此,可能就需要注意一下,linux内核和ubuntu:14.04Docker镜像的区别了.传统虚拟机安装ubuntu:14.04会包含两部分,第一,某一个L

深入分析Docker镜像原理 (转载)

深入分析Docker镜像原理 (转载) 发表于2015-08-21 13:50| 24023次阅读| 来源CSDN| 6 条评论| 作者孙宏亮 云计算DockerDaoCloud 摘要:8月20日晚上8点30分,CSDN Container微信群邀请到DaoCloud软件工程师孙宏亮,他带来了Docker镜像原理的深度分享,分享内容包含两个部分:1.Docker镜像的基本知识:2.Dockerfile.Docker镜像与Docker容器的关系. 分享简介:Dockerfile重塑新镜像,定义的不

深入了解Docker存储驱动

本文讲的是深入了解Docker存储驱动[编者的话]本文深入探讨了Docker容器的存储驱动,内容包括graphdriver以及各个选项比如Vfs.Aufs.Overlay.Overlay2.Btrfs.ZFS.Devicemapper和Windows,还有具体如何选择的规则. 如果你曾经上手用过Docker,你可能已经见过存储驱动(storage driver)这个词.或者你已经偶然听过graphdriver这个词,并心想这到底是个什么鬼?或者你听过大牛们谈论的话题中出现的aufs和device

《自己动手写Docker》书摘之一: Linux Namespace

Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具,但是什么是Linux Namespace 它在Docker内是怎么被使用的,说到这里很多人就会迷茫,下面我们就先介绍一下Linux Namespace 以及它们是如何在容器里面使用的. 概念 Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等.一

Docker 从入门到精通(一)基本操作

 一,为什么要用 Docker? Docker 是一个能够把开发应用程序自动部署到容器的开源引擎.它由Docker公司的团队编写,基于Apache 2.0开源协议授权.它提供了一个简单.轻量的建模方式,使开发生命周期更高效快速,鼓励了面向服务的架构设计.Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案. Docker 的基础是 Linux 容器(LXC)等技术.在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便.用户操作 Docke

Docker学习总结之Docker与Vagrant之间的特点比较

Docker学习总结之Docker与Vagrant之间的特点比较 以下内容均出自Vagrant作者(Mitchell Hashimoto)与Docker作者(Solomon Hykes)在stackoverflow上面一个问题讨论.在这个问题中,双方阐述了vagrant和docker的特点和使用范围,对于深入理解vagrant和docker很有意义,因此笔者翻译出来,以供大家讨论学习. Mitchell作为vagrant的作者,其在DevOps的世界里面沉浸多年,接触了很多类似docker的虚拟