1. 背景

* Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源。

* Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。

* Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机VM额外的操作系统开销,提高资源利用率。

2. 优势

  * 部署简单

* 管理简单

* 秒级应用启动

* 与宿主机使用同一个内核,性能损耗小

* 隔离性高

* 镜像一次构建,到处运行

3. 应用场景

* 简化配置,统一配置,通过镜像快速启动(Simplifying)

* 代码流水线管理,开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里实现了快速迁移(Code Oioeline Management)

* 开发效率,对开发人员,有了镜像,直接启动容器即可(Developer Productivity)

* 应用隔离,相对于虚拟机的完全隔离会占用资源,docker会比较节约资源(Applsolation)

* 服务器整合,一台服务器跑多个docker容器,提高服务器的利用率(Server Consolidation)

* 调试能力,debug调试(Debugging Capabilties)

* 多租户,一个租户多个用户,类似于阿里公有云的一个project下多个用户(Multi-tenancy)

* 快速部署,不需要启动操作系统,实现秒级部署(Rapid Deplovment)

4. docker相关注意

* 容器不同于虚拟机

* 容器理论推荐单一进程

* 容器不如虚拟机来得成熟

* 容器可以在几分之一秒内启动

* 容器已在大规模环境证明了自身的价值

* IT人员称容器为轻量级

* Docker已成为容器的代名词,但它不是唯一的提供者

* 容器能节省IT人力,加快业务更新效率

5. docker与容器本身意义

    * 面向产品: 简化交付流程

    * 面向开发: 简化环境配置

    * 面向测试:   多版本测试

    * 面向运维: 简化环境问题

    * 面向架构:   自动化扩容 [ 微服务 ]


6. 使用Docker原因

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式具有众多的优势。

首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker对系统资源的利用率很低,一台主机上可以同时运行数千个Docker容器。

6. docker相关概念

 ** 镜像 [ p_w_picpath ]

* Docker镜像就是一个只读的模板。

例如:一个镜像可以包含一个完整的CentOS操作系统环境,里面仅安装了Apache或用户需要的其他应用程序。

 镜像可以用来创建Docker容器。

Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

 ** 容器 [ container ]

* Docker利用容器来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

 ** 仓库 [ registry ]

* 仓库是集中存放镜像文件的场所。有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问。

当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需需要从仓库上pull下来就可以了。

7. docker实战

* 系统环境 [ docker运行环境推荐在 linux 内核大于 2.6 ]

[root@docker ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@docker ~]# uname -r
3.10.0-327.36.3.el7.x86_64

* docker 服务安装

[root@docker ~]# yum install docker

* 启动 docker 服务

[root@docker ~]# systemctl start docker.service

* 查看 docker 版本信息

[root@docker ~]# docker version
Client:Version:         1.12.6API version:     1.24Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64Go version:      go1.7.4Git commit:      1398f24/1.12.6Built:           Fri May 26 17:28:18 2017OS/Arch:         linux/amd64Server:Version:         1.12.6API version:     1.24Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64Go version:      go1.7.4Git commit:      1398f24/1.12.6Built:           Fri May 26 17:28:18 2017OS/Arch:         linux/amd64

* 在 docker hub 仓库上搜索镜像[ 默认从docker.io上搜索 ]

docker search 镜像名称:版本号[ 不填默认为latest ]

INDEX: 搜索源

NAME: 镜像名称

   DESCRIPTION: 描述

STARS: 下载次数

   OFFICIAL: 是否官方

   AUTOMATED: 是否自动化

[root@docker ~]# docker search centos
INDEX       NAME                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                                 The official build of CentOS.                   3397      [OK]
docker.io   docker.io/jdeathe/centos-ssh                     CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   70                   [OK]
docker.io   docker.io/nimmis/java-centos                     This is docker p_w_picpaths of CentOS 7 with dif...   26                   [OK]
docker.io   docker.io/gluster/gluster-centos                 Official GlusterFS Image [ CentOS-7 +  Glu...   19                   [OK]

* 从 docker hub 仓库上获取(下载)镜像至本地库 [ 默认从docker.io上下载 ]

   docker pull 镜像名称:版本号[ 不填默认为latest ]

[root@docker ~]# docker pull centos

* 查看本地库所有镜像

docker p_w_picpaths

[root@docker ~]# docker p_w_picpaths
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos             latest              3bee3060bfc8        9 days ago          192.5 MB

* 导出本地库镜像

docker save 镜像名称:版本号 > 导出文件名

[root@docker ~]# docker save centos > centos.tar.gz

* 删除本地库镜像

docker rmi 镜像名称:版本号

[root@docker ~]# docker rmi centos
Untagged: centos:latest
Untagged: docker.io/centos@sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9
Deleted: sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d

* 导入镜像文件至本地库

docker load < 镜像文件

[root@docker ~]# docker load < centos.tar.gz
Loaded p_w_picpath: docker.io/centos:latest

* 新建容器并运行

当利用docker run来创建容器时,Docker在后台运行的标准操作包括:

* 检查本地是否存在指定的镜像,不存在就从公有仓库下载

* 利用镜像创建并启动一个容器

* 分配一个文件系统,并在只读的镜像层外面挂在一层可读写层

* 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

* 从地址池配置一个ip地址给容器

* 执行用户指定的应用程序

* 执行完毕后容器被终止

docker run [option....]

例如:运行一个容器,指定名称为hello,  输出hello之后终止容器

[root@docker ~]# docker run --name hello centos echo "hello"
hello

   例如:启动一个容器,指定bash命令,并进入容器内部

-i: 则让容器的标准输入保持打开。

-t: 让Docker分配一个伪终端,并绑定到容器的标准输入上

/bin/bash: 执行一个命令

[root@docker ~]# docker run -it centos  /bin/bash
[root@b4473c885f51 /]# pwd
/

  * 退出并不关闭容器

ctrl + p + q

[root@f91270f431bd /]# [root@docker ~]#

* 启动已终止容器

   docker start 容器名称

[root@docker ~]# docker start hello
hello

*以守护进程运行

更多的时候,需要让Docker容器在后台以守护形式运行。此时可以通过添加-d参数来实现。

docker run -d [opation...]

[root@docker ~]# docker run --name daemon -d centos /bin/bash
6fd939dd05004e18248e04d10de88076c61878aea904093e24e122a907371234

* 查看正在运行的容器

docker ps

[root@docker ~]# docker ps

* 查看所有容器

[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS                        PORTS                                                              NAMES
65c0868177e7        centos                             "/bin/bash"              34 seconds ago      Exited (0) 32 seconds ago                                                                        daemon

* 停止正在运行的容器

docker stop  容器名称或唯一容器ID [容器ID通过ps CONTAINER ID 查看]

[root@docker ~]# docker stop daemon
daemon

* 删除已停止的容器

docker rm 容器名称或唯一容器ID [容器ID通过ps CONTAINER ID 查看]

[root@docker ~]# docker rm daemon
daemon

8. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

  


转载于:https://blog.51cto.com/lisea/1936855

Docker--------企业级最佳入门相关推荐

  1. docker desktop使用入门

    Docker是一个用于创建容器化应用程序的完整开发平台,而Docker Desktop for Windows是在Windows上开始使用Docker的最佳方式. 有关系统要求和稳定和边缘通道的信息, ...

  2. java教程分享-我赢职场2018年 曹雪松老师java零基础最佳入门视频教程

    要论编程语言哪家强,还属我们的java,尽管现在人工智能很火,从而带动了python语言的火热,但论跨平台能力还是首选java,其中javase,javaee,javame强大的功能即可以满足桌面应用 ...

  3. 决胜Spark大数据时代企业级最佳实践:Spark CoreSpark SQLGraphXMachine LearningBest Practice

    王家林:Spark.Docker.Android技术中国区布道师. 联系邮箱18610086859@126.com 电话:18610086859 QQ:1740415547 微信号:186100868 ...

  4. 数据分析及机器学习环境配置(docker极简入门指南)

    做数据科学一般需要用到类似XGBOOST.TensorFlow之类的库,这些库在win下不是那么好安装的,但是很多人又需要它们,那怎么办呢,最简单的就是用docker的方式,不仅具备一个linux虚拟 ...

  5. Docker极简入门

    原 Docker极简入门 2018年05月22日 20:25:12 阅读数:44 一.Docker概述 Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码.运行时.库 ...

  6. .Net Core in Docker极简入门(下篇)

    点击上方蓝字"小黑在哪里"关注我吧 Docker-Compose 代码修改 yml file up & down 镜像仓库 前言 上一篇[.Net Core in Dock ...

  7. 编码的奥秘txt_各学科最佳入门丛书推荐

    各学科最佳入门丛书推荐 1. 师从天才 作者 : [ 美 ] 罗伯特 · 卡尼格尔 出版社 : 上海科技教育出版社 评语 : sunfield 推荐(药理学) :介绍里说这本书说的是科研界的师承关系, ...

  8. Docker真正的入门

    Docker真正的入门 前言(重): Docker概述 Docker 为什么这么火? 解决方案 DocKer 的历史 聊聊DocKer DocKer能干嘛 安装Docker 安装 阿里云镜像加速 底层 ...

  9. Docker/Podman使用入门---从容器构建镜像 提交镜像到服务器UCloud dockerhub

    文章目录 1.docker commit 提交镜像命令 2.将镜像提交到UCloud服务器 step1: 先在UCloud服务器上面,创建镜像仓库 step2: 登录UCloud镜像仓库 step3: ...

  10. Nginx(docker安装)快速入门

    Nginx(docker安装)快速入门 文章目录 Nginx(docker安装)快速入门 一.nginx简介 1.什么是Nginx 二.Nginx安装 1.搜索nginx镜像 2.拉取nginx镜像 ...

最新文章

  1. 甲骨文们是怎么被干掉的
  2. 多线程和多进程的差别(小结)
  3. 平衡二叉树的构造_LeetCode 题解 | 110.平衡二叉树
  4. web后端轻量级框架flask基础调用程序模板
  5. python用途与前景-2019年Python就业及发展前景如何 看完你就清晰了
  6. Python:__slots__()方法和@property方法
  7. setings.py配置文件详解
  8. MySql like 查询 变向写法(不用like 完成like查询)
  9. .net npoi xssfclientanchor设置图片缩放大小_.NET导出Excel的四种方法及评测
  10. jsp mysql事务锁,JSP操作数据库的事务回滚
  11. html可视化编辑器 mac,Sparkle For Mac v2.8.11 强大的可视化网页编辑设计工具 _ 黑苹果乐园...
  12. 最新服务器处理器天梯,至强cpu天梯图2020_intel服务器cpu排行榜2020
  13. Kotlin 异常处理之 Option、Either、Result
  14. 一个故事带你了解集线器、交换机与路由器
  15. node在linux无法连接mysql,无法连接到Node.js上的MySQL数据库
  16. 【笔记】html文件的图片上添加文字说明或者链接文字
  17. 头歌HTML实训笔录
  18. window 下载安装minio
  19. addEventlistener()方法,事件监听
  20. error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

热门文章

  1. 使用ob_gzhandler函数有3种方法让它对php进行压缩
  2. Spring Boot拦截器(WebMvcConfigurerAdapter)
  3. 实战系列-Java中线程安全集合类(二)
  4. mwget安装及使用
  5. 三种传递gRPC动态参数方式的使用体验
  6. K8s上的Go服务怎么扩容、发版更新、回滚、平滑重启?教你用Deployment全搞定!
  7. php ajax loading图片居中显示,php-通过ajax框架加载漂亮照片
  8. mysql线上问题之Lock wait timeout exceeded; try restarting transaction
  9. 关于JVM中YGC的来龙去脉
  10. kafka消费者分区消费策略