Docker(1)

一.基本理念

1.Linux Namespace

    pid    容器有自己独立的进程表和1号进程

    net    容器有自己独立的network info

    ipc    在ipc通信的时候,需要加入额外的信息来标识进程

    mnt  每个容器有自己唯一的目录挂载

    utc   每个容器有独立的hostname,domain

2.cgroup

3.chroot

隔离根文件系统

二.

1.dotcloud docker

dotCloud 是docker的前身,专注于PaaS云计算

docker 是用go语言写的

docker也是container技术的实现,最早使用LXC作为container的引擎,最新版docker使用libcontainer替换lxc

采用 aufs文件系统管理Image和container

基于C/S架构实现,server使用unixSocket,也可切换到Tcp Protocol


aufs文件系统

  可以把多个不同目录内容合并到一起

docker hub 方便image管理

dockerfile

2。安装docker

安装Docker使用apt-get命令:

apt-get install docker.io
启动服务和守护进程
 service docker.io status
$ service docker.io start
创建软连接
ln -sf /usr/bin/docker.io /usr/local/bin/docker

三.

Linux FS :bootfs(Kernel和bootloader) rootfs(和kernel无关,和不同的Linux分发版本有关)

    传统的LInux启动时,将rootfs设置为readonly并检查完整性,然后设置成read_write

    Docker在启动container的时候,也是把rootfs设置为readonly,然后通过aufs把一个readwrite的文件系统挂载到rootfs之上,并且把下层文件系统设置成readonly,这样构成一个完整的操作系统

    对于底层的readonly的FS,在docker中成为image

    对于顶上read_write的FS,称为container

    对于readonly中内容的修改,采用的是COW(写时复制技术)的技术,把文件复制到read_only层并改写,实际用户看到的是当前container层中的文件,image中的文件不会被影响。

Image

    除了base image之外,每一层Image都有一个parent image

    基于COW技术,image部分是不会被修改的,因此container可以共享image层的FS,提高了存储的效率.

Storage driver

    除了默认的aufs之外,docker通过对于storage的抽象,可以支持一些其他的storage driver,eg:vfs,devicemapper,btrfs

    修改docker启动时的参数设置,增加-storage-driver={storage plugin} 在配置文件中

docker hub

    官方提供的image平台

    Automated Builds Image,通过和Github集成,自动监控github项目中的变化,构建新的Image然后自动发布到docker hub

    https://hub.docker.com/

镜像命名和版本管理

    普通镜像命名规范{namespace}/{repository name}:{tag}

respository,类似于github项目,mysql,ubuntu

tag:版本信息

  search image

        docker search

pull image

        docker pull  如果不指定tag的话,会pull所有版本的镜像

上传镜像

        docker login ,登录到docker hub中

         把container 通过docker commit 的命令转化成一个image

            通过docker tag 来命名新的image

            docker push到docker hub中

Docker基本命令:

        1docker search busybox 查找busy box的image

    2 docker pull busybox:ubuntu-12.04  下载busybox 的image           

root@djhllpf123-All-Series:~# docker pull busybox:ubuntu-12.04 (分层次下载)
            Pulling repository busybox
            492dad4279ba: Download complete
            511136ea3c5a: Download complete
            df7546f9f060: Download complete
            2982ec56c8d9: Download complete

       3 docker images 查看当前已下载的image    

 root@djhllpf123-All-Series:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox             ubuntu-12.04        492dad4279ba        9 days ago          5.455 MB

                             

       4 docker images --     no-trunc  显示完整的Image ID

root@djhllpf123-All-Series:~# docker images --no-trunc
REPOSITORY          TAG                 IMAGE ID                                                           CREATED             VIRTUAL SIZE
busybox             ubuntu-12.04        492dad4279bae5bb73648efe9bf467b2cfa8bab1d593595226e3e7a95d9f6c35   9 days ago          5.455 MB
5.push docker  上传docker

docker login  登录docker 登录一次就会记录密码,哟哈珀登录只要输入用户名

docker info  查看docker信息


docker run -t 制作container

root@djhllpf123-All-Series:~# docker run -t busybox:ubuntu-12.04 echo "hello world"
hello world

 docker ps 查看是否有docker container

root@djhllpf123-All-Series:~# docker ps -a
CONTAINER ID        IMAGE                  COMMAND              CREATED             STATUS                      PORTS               NAMES
743ed69954ba        busybox:ubuntu-12.04   echo 'hello world'   21 seconds ago      Exited (0) 21 seconds ago                       romantic_fermat   

root@djhllpf123-All-Series:~# docker commit 743ed69954ba 返回临时的镜像ID
0a202fef0a790e3d4e24642c2200f7414475ab64be563806dddfe54a70c7b160

root@djhllpf123-All-Series:~# docker images 可以看到现在生成了没有repository ,tag的image
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              0a202fef0a79        21 seconds ago      5.455 MB
生成tag

root@djhllpf123-All-Series:~# docker tag 0a202fef0a790e3d4e24642c2200f7414475ab64be563806dddfe54a70c7b160 centrald/busybox:osforce

现在继续查看image,可以看到:

root@djhllpf123-All-Series:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centrald/busybox    osforce             0a202fef0a79        4 minutes ago       5.455 MB
busybox             ubuntu-12.04        492dad4279ba        9 days ago          5.455 MB
上传:

docker push centrald/busybox

四.使用docker run 运行container

运行一个container必须要指定一个image。

对于不存在的Image,Docker 会自己去下载

COMMAND

    Command 标志的是在container中实际运行的首进程

    如果Image里面包含了CMD的指令,那么在启动container的时候,不需要指定Command,否则用指定的Command来覆盖Image中的CMD.

前台运行与后台运行

    默认的Container是在前台运行的,会绑定Command 进程的STDIN,STDOUT,STDERR到console上

    可以通过 -d 的选项让Container运行在后台

    如果是在前台运行,也可以通过指定-a{STDOUT,STDIN,STDERR}选择需要绑定的IO

    通过attach命令可以重新attach一个后台运行的containter

Container Identification

    在后台运行的情况下,RUN命令会返回一个UUID,唯一标示Container

    可以通过docker ps 来查看container的UID和运行信息

    可以通过指定-name 的方式来指定container的名字,name必须唯一

Inspect

       通过docker inspect {Container ID} 来获取container的更多信息,包括网络,Volume,实际在Host上的进程ID等信息

Log

    通过Logs命令可以看到Container中的Command所指向的进程的STDOUT,STDERR数据

环境变量

    通过 -e 参数,可以在运行container的时候添加系统环境变量


demo:

    docker rm xxx 删除一个container

运行一个循环程序,每隔2秒输出hello world

     root@djhllpf123-All-Series:~# docker run -dt busybox:ubuntu-14.04 sh -c "while true;do echo hello world;sleep 2;done"
6a47ee3b269abd13dfdc2a16787f8e7bc545da2f0f0fde3a2f72e48bb3035a70

查看日志报错

root@djhllpf123-All-Series:~# docker logs e43b5e161f88272e7bde601e04bb7683c921818d3b144b34caccc9933ef0bbdb
sh: can't open 'while ture;do echo hello world;sleep 2;done'

root@djhllpf123-All-Series:~# docker ps -a
CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS                     PORTS               NAMES
6a47ee3b269a        busybox:ubuntu-14.04   sh -c 'while true;do   18 seconds ago      Up 18 seconds                                  thirsty_thompson    
324368395e0d        busybox:ubuntu-14.04   sh -c 'while ture;do   2 minutes ago       Exited (0) 2 minutes ago                       silly_wilson        
e43b5e161f88        busybox:ubuntu-14.04   sh -x 'while ture;do   6 minutes ago       Exited (2) 6 minutes ago                       tender_hawking   

  docker attach 583b6aaf50cd  让其前台运行



 


  

        

你可能感兴趣的:(Docker(1))