Docker--------企业级最佳入门

简介:

1. 背景

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

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

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


2. 优势

  部署简单

  * 管理简单

  * 秒级应用启动

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

  * 隔离性高

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


3. 应用场景

wKioL1lBN06TcMSYAAYrdwW3KW8078.png

简化配置,统一配置,通过镜像快速启动(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相关概念

 ** 镜像 [ image ]

  * 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 ]

1
2
3
4
[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 服务安装

1
[root@docker ~] # yum install docker


   * 启动 docker 服务

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


   * 查看 docker 版本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@docker ~] # docker version
Client:
  Version:         1.12.6
  API version:     1.24
  Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64
  Go version:      go1.7.4
  Git commit:      1398f24 /1 .12.6
  Built:           Fri May 26 17:28:18 2017
  OS /Arch :         linux /amd64
 
Server:
  Version:         1.12.6
  API version:     1.24
  Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64
  Go version:      go1.7.4
  Git commit:      1398f24 /1 .12.6
  Built:           Fri May 26 17:28:18 2017
  OS /Arch :         linux /amd64


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

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

     INDEX: 搜索源

     NAME: 镜像名称

   DESCRIPTION: 描述

     STARS: 下载次数

   OFFICIAL: 是否官方

   AUTOMATED: 是否自动化

1
2
3
4
5
6
[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 images 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 ]

1
[root@docker ~] # docker pull centos


   * 查看本地库所有镜像

     docker images

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

 

   * 导出本地库镜像

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

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


   * 删除本地库镜像

     docker rmi 镜像名称:版本号

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


   * 导入镜像文件至本地库

     docker load < 镜像文件

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


   * 新建容器并运行 

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

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

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

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

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

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

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

        * 执行完毕后容器被终止


     docker run [option....]

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

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


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

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

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

        /bin/bash: 执行一个命令

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


  * 退出并不关闭容器

     ctrl + p + q

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


   * 启动已终止容器

   docker start 容器名称

1
2
[root@docker ~] # docker start hello
hello


   *以守护进程运行

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

      docker run -d [opation...]

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

   * 查看正在运行的容器

        docker ps

1
[root@docker ~] # docker ps


   * 查看所有容器

1
2
3
[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 查看]

1
2
[root@docker ~] # docker stop daemon
daemon


   * 删除已停止的容器

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

1
2
[root@docker ~] # docker rm daemon
daemon

 




8. 总结



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


  





      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1936855,如需转载请自行联系原作者


相关文章
|
2月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
217 0
|
3月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
49 1
|
9天前
|
存储 虚拟化 数据中心
|
1天前
|
应用服务中间件 持续交付 nginx
【Docker专栏】Docker入门指南:快速构建你的第一个容器
【5月更文挑战第7天】Docker 入门指南:容器化应用利器。了解 Docker 核心概念——镜像、容器和仓库。安装 Docker 后,运行官方 `hello-world` 验证安装,再尝试运行 `nginx` Web 服务器。通过端口映射访问容器内服务,学习管理容器命令。创建自定义镜像,编写 Dockerfile,实现 Python Web 应用容器化。Docker 助力高效开发与运维,探索更多自动化部署与微服务场景。
【Docker专栏】Docker入门指南:快速构建你的第一个容器
|
9天前
|
安全 Linux 数据库
Docker 入门详解
通过遵循这些步骤,你将能够快速入门 Docker 并开始探索容器化的世界,关注 V 哥,技术之路一起成长。
|
13天前
|
存储 Apache Swift
无限套娃_docker入门(镜像、容器、仓库)
无限套娃_docker入门(镜像、容器、仓库)
27 0
|
13天前
|
Linux 虚拟化 Docker
docker入门
docker入门
20 2
|
14天前
|
存储 API 数据安全/隐私保护
企业级Docker镜像仓库Harbor部署与使用
企业级Docker镜像仓库Harbor部署与使用
|
14天前
|
存储 运维 Docker
Docker从入门到精通:Docker 容器数据卷详解
Docker 数据卷是持久化容器数据的关键机制,允许跨容器或主机共享,即使容器删除数据仍保留。创建数据卷可通过命令行或容器启动时指定,挂载到容器目录以读写。使用 `docker volume` 命令可管理数据卷,适用于持久化存储、数据共享及备份场景。了解和善用数据卷能优化 Docker 应用程序的运维。
22 0
|
15天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs &lt;container_name&gt;` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
16 0