一、docker简介:

  容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机 制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机), 甚至有人把他称为新一代的虚拟化技术, Docker 无疑就是其中的佼佼者 在一台服务器上同时运行上百个虚拟机,肯定会被认为是痴人说梦,而在一台机器上同时运 行一千个 Docker 容器,这已成为现实 Docker 的目标 Build,Ship and Run Any App,Anywhere— 即通过对 应用组件的封装 (Packaging), 发布(Distribution), 运行 (runing) 等生命周期的管理 , 达到应用组件级别的”一 次封装 , 到处运行”

二、docker特点:

优点:

1、 启动快,资源占用小 , 资源利用高,快速构建标准化运行环境

2、创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理 局限:

局限:

1、 Docker 是基于 Linux 64bit 的,无法在 windows/unix 或 32bit 的 linux环境下使用

2、 LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是 linux

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

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

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

6、docker 对 disk 的管理比较有限

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

三、docker与虚拟机比较

  docker的特点启动快比虚拟机 , 可以秒级启动 对资源占用小 , 宿主机上可运行千台容器 方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低 通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效 率 Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 , 尽量减小系统开销

四、docker相关网站

https://hub.docker.com/

https://docs.docker.com/

http://docs.docker-cn.com/ docker

五、docker安装:

1、  yum install  docker -y

2、 二进制安装

六、docker 镜像

  镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本 能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务 器中的仓科)下载。

(1) 下载镜像

下载镜像: #docker pull NAME:TAG 下载某个被打上了某个标签的叫 ×× 名字 的镜像

eg:

  docker pull ubuntu:latest 若在下载时你未指定标签,默认追加 latest标签,表示库中最新镜像

1、进入docker 官方镜像仓库

也可以直接进入(网址:https://hub.docker.com/ )

2、选择一个镜像

3、选择一个镜像 下载

docker  pull  nginx

(2) 查看本地镜像

docker  images

(3)搜索一个镜像

docker   search   mysql

(4) 删除本地镜像

docker  rmi  nginx : latest

七、docker镜像分层

  docker镜像的分层结构:支持通过扩展现有镜像,创建新的镜像

  新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

分层结构的优势:

&1、共享资源:

有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

&2、可写的容器层:

当容器启动时,一个新的可写层被 加载到镜像的顶部。这一层通常被 称作“容器层” , “容器层”之下 的都叫“镜像层” 。 所有对容器的改动。

- 无论添加、删除、还是修改文件都只会发生在容器层中。 只有容器层是可写的,容器层下面的所有镜像层都是只读的。

这个特性。

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。 如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a, 也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠 加之后的文件系统。

1、添加文件

在容器中创建文件时,新文件被添加到容器层中。

2、读取文件

在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文 件。一旦找到,打开并读入内存。

3、修改文件

在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。

4、删除文件

在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。 找到后,会在容器层中记录下此删除操作。

  只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

八、docker镜像的创建

创建镜像的三种方法

(1)基于修改后的容器创建:docker commit 命令

(2)基于本地模板导入

(3)基于 Dockerfile 文件创建

(1) 基于修改后的容器创建:

1、下载一个centos 镜像

 docker  pull centos

2、创建并启动一个镜像为 centos 的容器

docker  run -it  centos:latest   /bin/bash     ( /bin/bash    环境变量)

3、退出容器

exit

4、查看所有的 容器

docker ps -a  ( 查看正在运行的容器,docker  -ps )

5、重新唤醒  刚才启动的容器

docker start  CONTAINER ID

6、进入容器 并创建一个文件

# 进入容器

docker  exec -it   CONTAINERID   /bin/bash

# 创建一个文件

7、退出容器到命令行界面

此时容器较镜像已经发生改变,我们以此生成新镜像

8、生成新的镜像

docker commit   f0decea12ae  centos7.:latest

9、查看本地镜像

docker images

生成了一个新的镜像!

(2)基于本地模板导入

1、导出:将镜像保存为本地文件

docker   save -o  centos.tar    centos7.:latest   ( 也可以  centios.tar.gz )

2、删除 centos7.1 镜像

docker  rmi  centos7.: latest

3、导入:将压缩包文件导入到本地镜像列表

docker  load  -i   centos7..tar

(3)基于 Dockerfile 文件创建

Dockerfile 是一个文本文件,用来配置 image,记录了镜像构建的所有步骤。

Docker 根据 该文件生成二进制的 image 文件

1、创建目录dockerfile  并切换至此目录

mkdir  dockerfile
cd dockerfile

2、创建并编辑文件 dockerfile

# 创建

vim  dockerfile  

# 编辑内容如下

FROM centos:
RUN yum install -y vim

3、创建镜像

docker build -t centostest .

build:创建镜像

-t:为镜像指定名字

注:

下面列出了 Dockerfile 中最常用的指令

FROM:指定 base 镜像。

MAINTAINER:设置镜像的作者,可以是任意字符串。

COPY:将文件从 build context 复制到镜像。

COPY 支持两种形式:

COPY src dest

COPY ["src", "dest"]

注意:src 只能指定 build context 中的文件或目录。

ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会

被自动解压到 dest。

ENV:设置环境变量,环境变量可被后面的指令使用。

EXPOSE:指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。

VOLUME:将文件或目录声明为 volume。

WORKDIR:为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

RUN:在容器中运行指定的命令,RUN 指令通常用于安装应用和软件包。

CMD:容器启动时运行指定的命令。 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。

ENTRYPOINT:设置容器启动时运行的命令,可让容器以应用程序或者服务的形式运行。 Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

九、docker的使用

1、创建容器,create命令是创建并不启动容器   (不常用)

docker create  -it centos7.:latest

2、停止一个容器

docker    stop  CONTAINER ID   (kill)

3、启动停止的容器

docker  start  CONTAINER ID    (重启  restart)

注:非持久后台守护状态的虚拟机,在重启后当你查看时还是关闭状态

4、运行一个容器

# docker run -ti centos:latest /bin/bash

创建并运行一个容器 ,此时你会直接被切换到容器中

#ctrl+d//exit退出,并且容器也退出

#ctrl+p+q退出容器,并且保持容器up的状态

-t 分配一个伪终端

-i 让容器的标准输入持续打开

用/bin/bash环境显示

5、以后台守护进程(Daemonized)形态运行

6、删除一个容器

docker  rm  CONTAINER ID

-f 强制删除处于运行中的容器

-l 删除链接,保留容器

-v 删除挂载的数据卷

7、进入容器

# 1

docker attach直接进入容器 启动命令的终端,不会启动新的进程.

docker  attach  CONTAINER ID

&

docker run -d centos /bin/bash -c "while true;do sleep 1;echo I_am_docker;done"

&

#2  docker exec则是在容器中打开新的终端,并且可以启动新的进程

docker  exec  -it      CONTAINER ID   /bin/bash

8、导出容器:导出一个已经创建的容器到文件,不管容器是否运行

docker export  CONTAINER ID  > centos7..tar

9、将容器导入系统成为镜像

cat centos7..tar | docker import - test

10、查看容器日志 (显示容器启动进程的控制台输出)

docker  logs  -f    CONTAINER ID

11、暂停容器

docker pause   CONTAINER ID

12、取消暂停 继续运行容器

docker unpause   CONTAINER ID

十、docker镜像的仓库 --- repository的创建

仓库分为公共仓库和私有仓库

DockerHub的官方仓库 https://hub.docker.com

DockerPool社区仓库 https://dl.dockerpool.com

Dockern Pool (http://dockerpool.com)是国内专业的Docker社区,目前 也提供了官方镜像的下载管理服务

1、下载 registry 镜像

2、利用容器启用私有仓库

docker run -d -p : -v /var/lib/registry:/var/lib/registry --restart=always --name registry registry:

3、客户端修改配置文件 /etc/docker/daemon.json

#  vim /etc/docker/daemon.json

# 添加以下内容

"insecure-registries": ["192.168.226.147:5000"],

4、客户端: 重启 docker

systemctl restart docker

5、客户端:对镜像进行改名

# docker tag nginx:latest 192.168.226.147:/nginx:latest

6、客户端:上传镜像

docker push  192.168.226.147:/nginx:latest

7、客户端:删除已有镜像

docker rmi  192.168.226.147:/nginx:latest
docker rmi nginx

8、客户端:下载镜像

docker  pull   192.168.226.147:/nginx:latest

下载成功,证明私有仓库可用!

docker (1) ---简介,使用的更多相关文章

  1. Docker 容器简介与部署

    关于Docker容器技术 参考文献:<docker 从入门到精通> Docker容器简介 Docker的构想是要实现 "Build,Ship and Run Any App,An ...

  2. Docker的简介以及Dockerfile编写与使用

    Docker的简介 Docker是在容器的基础上,进行了进一步的封装,极大的简化了容器的创建和维护.使得Docker技术比虚拟机技术更为轻便.快捷. 下面是两张对比图. 可以看到传统虚拟机技术是虚拟出 ...

  3. docker 概念简介、简单入门

    1.docker 简介 Docker 是一个开源项目,这个项目旨在通过把应用程序打包为可移植的.自给自足的容器(引用语) DocKer一次构建可放在任何地方就可以运行,不需要进行任何改变DocKer  ...

  4. Docker(一) 简介

    简介 Docker是一款针对程序开发人员和系统管理员来开发.部署.运行应用的一款虚拟化平台.Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的 ...

  5. Docker入门简介

    Docker的概念 什么是Docker? Docker是一个开源平台,包含:容器引擎和Docker Hub注册服务器 Docker容器引擎:可以将开发者打包他们的应用和依赖包到一个可一直的容器中,然后 ...

  6. Docker Machine 简介

    Docker Machine 是什么? Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在 ...

  7. Docker学习笔记 - Docker的简介

    传统硬件虚拟化:虚拟硬件,事先分配资源,在虚拟的硬件上安装操作系统,虚拟机启动起来以后资源就会被完全占用. 操作系统虚拟化:docker是操作系统虚拟化,借助操作系统内核特性(命名空间.cgroups ...

  8. Docker Compose 简介

    Compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用.使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建 ...

  9. Docker网络简介

    Docker允许通过外部访问容器或则容器互联的方式来提供网络服务. 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或则-P参数来指定断开映射.当使用 -P 标记时, ...

随机推荐

  1. 前端入门22-讲讲模块化 包括webstrom建立简单ES6

    https://www.cnblogs.com/dasusu/p/10105433.html

  2. CAD参数绘制多段线(com接口)

    多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::PathLineTo 把路径下一个点移到指定 ...

  3. ubuntulinux 更改时区设置时间

    Linux/shell命令的实际应用——查看并修改系统时区 命令: www.2cto.com date -R //查询当前系统时间与默认时区 cp /usr/share/zoneinfo/Asia/S ...

  4. vim要粘贴的话,先set paste,然后粘贴,然后再set nopaste

    要粘贴的话,先set paste,然后粘贴,然后再set nopaste

  5. C++11新特性之final override标识符

    final: final修饰符可用于修饰类,放在类名后面,被final修饰符修饰的类不能被继承.示例代码: // 正确的示范 #include <iostream> class A { p ...

  6. 零基础入门学习Python(35)--图形用户界面入门:EasyGui

    知识点 EasyGui学习文档[超详细中文版] 1. 建议不要在IDLE上运行EasyGui EasyGui是运行在TKinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并 ...

  7. Windows Server 2012 防火墙如何添加端口例外的方法(转)

    Windows Server 2012 防火墙如何添加端口例外的方法 Windows Server 2012 防火墙如何添加端口例外的方法 在Windows Server 2012系统中,如果用户想在 ...

  8. Django用法补充

    1. 自定义Admin from django.contrib import admin from xx import models # 自定义操作 class CustomerAdmin(admin ...

  9. Thinkphp5.0 的Model模型

    Thinkphp5.0 的Model模型 新建user模型User.php: <?php namespace app\index\model; use think\Model; class Us ...

  10. ArrayAdapter的使用

    package com.pingyijinren.test; import android.content.Context; import android.view.LayoutInflater; i ...