博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker概述与安装使用
阅读量:2069 次
发布时间:2019-04-29

本文共 6314 字,大约阅读时间需要 21 分钟。

序言

      “Docker”一词来自英国口语,意为码头工人(Dock Worker),即从船上装卸货物的人。

       有意思的是,Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的!

      2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为“Docker”,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。(从此也可以知道docker的应用场景,cuiyaonan2000@163.com)

       多数技术人员在谈到 Docker 时,主要是指 Docker 引擎Docker 引擎是用于运行和编排容器的基础设施工具。有 VMware 管理经验的读者可以将其类比为 ESXi。ESXi 是运行虚拟机的核心管理程序,而 Docker 引擎是运行容器的核心容器运行时。其他 Docker 公司或第三方的产品都是围绕 Docker 引擎进行开发和集成的。

       Docker 引擎可以从 Docker 网站下载,也可以基于 GitHub 上的源码进行构建。无论是开源版本还是商业版本,都有 Linux 和 Windows 版本。Docker 引擎主要有两个版本:企业版(EE)和社区版(CE)。每个季度,企业版和社区版都会发布一个稳定版本。社区版本会提供 4 个月的支持,而企业版本会提供 12 个月的支持。社区版还会通过 Edge 方式发布月度版。

 

Docker开源项目(Moby)

        “Docker”一词也会用于指代开源 Docker 项目。其中包含一系列可以从 Docker 官网下载和安装的工具,比如 Docker 服务端和 Docker 客户端。不过,该项目在 2017 年于 Austin 举办的 DockerCon 上正式命名为 Moby 项目。由于这次改名,GitHub 上的 docker/docker 库也被转移到了 moby/moby,并且拥有了项目自己的 Logo.

        可以说Moby是Docker之母。通过Moby可以将定制化的组件打包做成一个Docker,而Moby就相当于一个组件仓库与Docker工厂。Docker公司的这一举动可以说也是顺应了潮流,将Docker与操作系统解耦,并且将其以组件组装的形式模块化。可以说今后,操作系统也是Docker容器的一个基础组件。而Moby项目既是一个组件库又是一个框架,为今后组件制作与组装提供了一套规范。(Moby是Docker的上游,用于组装Docker,Docker在用来应用.从2个项目的Logo上就可以看出来,Moby是个鲸鱼尾巴,而Docker是个鲸鱼cuiyaonan2000@163.com)

 

Docker架构与流程

Docker的架构如下(粘贴复制自官网^_^)

 

从图上可以看出Docker分了3个大类,客户端,主机,仓库(注意都是复数),

  • Clients:就是用于接收连接Hosts的客户端,用于发送命令给Hosts执行
  • Hosts:用于接收Clients的命令,同时与远程仓库交互,同时屏蔽了不同的操作系统差异,提供了统一的API给Clients操作.(就是我们说的Docker守护进程)
  • Repositorys:存储了很多不同应用的镜像.当本地没有镜像的时候,会从远程仓库下载到本地.

如下是个简单的流程图途(也是从网上下的原址是:)

Actor可以看成是Clients,Docker Dameon是Hosts,官方仓库对应Repositorys.

 

 

应用于镜像的关系

容器与镜像的关系类似于面向对象编程中的对象与类。(在举例来讲Nginx就是个镜像,他的应用实例就是Nginx容器.这么描述感觉有点怪哈.在一般使用的时候一般我们会选择Linux的镜像,创建一个Linux的容器,然后在Linux的容器里面创建Nginx服务~~~~我觉得这么描述是不是要容易理解一点.cuiyaonan2000@163.com)

Docker属性 面向对象属性
容器 对象
镜像

 

 

安装tomcat用例

 

Centos7上安装Docker Client 和 Docker Service

这环境的安装其实很简单,主要是熟悉命令.具体可以参考

#Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 #Docker 。#通过 uname -r 命令查看你当前的内核版本[cuiyaonan2000@runoob ~]# uname -r #移除旧的版本[cuiyaonan2000@runoob ~]# sudo yum remove docker \                  docker-client \                  docker-client-latest \                  docker-common \                  docker-latest \                  docker-latest-logrotate \                  docker-logrotate \                  docker-selinux \                  docker-engine-selinux \                  docker-engine#安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的[cuiyaonan2000@runoob ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2#设置yum源[cuiyaonan2000@runoob ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#更新yum 缓存[cuiyaonan2000@runoob ~]# sudo yum makecache fast#以查看所有仓库中所有docker版本,并选择特定版本安装[cuiyaonan2000@runoob ~]# yum list docker-ce --showduplicates | sort -r#由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0#也可以指定版本  例如:sudo yum install docker-ce-17.12.0.ce[cuiyaonan2000@runoob ~]# sudo yum install docker-ce#启动docker[cuiyaonan2000@runoob ~]# sudo systemctl start docker#加入开机启动[cuiyaonan2000@runoob ~]# sudo systemctl enable docker#验证安装是否成功(有client和service两部分表示docker安装启动都成功了)[cuiyaonan2000@runoob ~]# docker version

设置docker阿里镜像

#没有就创建该文件[cuiyaonan2000@runoob ~]# vi /etc/docker/daemon.json增加如下内容:{  "registry-mirrors": ["https://ohc3axil.mirror.aliyuncs.com"]}

创建Tomcat镜像实例

注意创建过得容器并不会消失,如果停用了可以使用docker ps -a 查看.然后使用docker start <name>启动.如果不能启动使用systemctl restart docker 后在启动就可以了.创建了当然也能删除塞.具体命令可以参考:.

 

#拉取官方的镜像[cuiyaonan2000@runoob ~]# docker pull tomcat#查看本地的镜像[cuiyaonan2000@runoob ~]# docker images# 创建镜像名称为tomcat的一个实例 -p指定端口映射 -d表示以守护线程运行[cuiyaonan2000@runoob ~]# docker run --name mytomcat -p 8080:8080 -d tomcat# 此命令用于查看 实例化的镜像容器[cuiyaonan2000@runoob ~]# docker ps#停止容器运行[cuiyaonan2000@runoob ~]# docker stop mytomcat   #启动一个已经存在的容器[cuiyaonan2000@runoob ~]# docker start mytomcat

 

进入Docker内部

执行如下命令就进入了docker容器内部,但是有的命令是不支持的,比如ll 就不支持,而是支持ls。

另外进入容器内部主要做一件事情就是可以修改配置文件,比如nginx容器的nginx.conf 文件

# /bin/bash  或者 /bin/sh#/bin/sh与/bin/bash虽然大体上没什么区别,但仍存在不同的标准#-it的说明如下所示OPTIONS说明:-d :分离模式: 在后台运行-i :即使没有附加也保持STDIN 打开-t :分配一个伪终端---------------------实例---------------------$ sudo docker exec -it 容器ID /bin/bash

docker内部时区

 

大部分 Docker 镜像都是基于 Alpine,Ubuntu,Debian,CentOS 等基础镜像制作而成。基本上都采用 UTC 时间,默认时区为零时区。

基本上都采用 UTC 时间,默认时区为零时区。而我们主要用的是 CST 时间,北京时间,位于东八区。时区代号: Asia/Shanghai   ------所以启动docker 容器以及制作镜像的时候需要设置时区

创建容器实例的时候设置

在 Linux 系统中,控制时区和时间的主要是两个地方:

  1. /etc/timezone 主要代表当前时区设置,一般链接指向/usr/share/zoneinfo目录下的具体时区。
  2. /etc/localtime 主要代表当前时区设置下的本地时间。

挂载宿主主机的配置文件

当宿主机为 Linux 系统时,我们可以直接将宿主机上的/etc/timezone和/etc/localtime挂载到容器中,这样可以保持容器和宿主机时区和时间一致。

# 如下的为挂载主要参数 -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro#如下的是实例docker run --name test --rm -ti -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro alpine /bin/sh# dateFri Nov 29 16:13:55 CST 2019

 

通过传递环境变量改变容器时区

 

  1. 适用于基于 Debian 基础镜像, CentOS 基础镜像 制作的 Docker 镜像
  2. 不适用于基于 Alpine 基础镜像, Ubuntu 基础镜像 制作的 Docker 镜像
    对于基于 Debian 基础镜像,CentOS 基础镜像制作的 Docker 镜像,在运行 Docker 容器时,传递环境变量-e TZ=Asia/Shanghai进去,能修改 docker 容
# 如下的为环境变量主要参数-e TZ=Asia/Shanghai#如下的是实例docker run --name test -e TZ=Asia/Shanghai --rm -ti debian /bin/bash# dateFri Nov 29 18:46:18 CST 2019

 

Docfile中设置-----永久解决

 

因为基础镜像的不同,所以制作Dockfile中的内容设置也不一样

Alpine

根据《Setting the timezone》提示,我们可以将以下代码添加到 Dockerfile 中:

ENV TZ Asia/ShanghaiRUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime \    && echo ${TZ} > /etc/timezone \    && apk del tzdata

 

Debian

Debian 基础镜像 中已经安装了 tzdata 包,我们可以将以下代码添加到 Dockerfile 中:

ENV TZ=Asia/Shanghai \    DEBIAN_FRONTEND=noninteractiveRUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \    && echo ${TZ} > /etc/timezone \    && dpkg-reconfigure --frontend noninteractive tzdata \    && rm -rf /var/lib/apt/lists/*

Ubuntu

Ubuntu 基础镜像中没有安装了 tzdata 包,因此我们需要先安装 tzdata 包。

我们可以将以下代码添加到 Dockerfile 中。

ENV TZ=Asia/Shanghai \    DEBIAN_FRONTEND=noninteractiveRUN apt update \    && apt install -y tzdata \    && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \    && echo ${TZ} > /etc/timezone \    && dpkg-reconfigure --frontend noninteractive tzdata \    && rm -rf /var/lib/apt/lists/*

CentOS

CentOS 基础镜像 中已经安装了 tzdata 包,我们可以将以下代码添加到 Dockerfile 中。

ENV TZ Asia/ShanghaiRUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \    && echo ${TZ} > /etc/timezone

 

转载地址:http://ffcmf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
Leetcode C++ 剑指 Offer 09. 用两个栈实现队列
查看>>
Leetcode C++《每日一题》20200707 112. 路径总和
查看>>
云原生 第十一章 应用健康
查看>>
Leetcode C++ 《第202场周赛》
查看>>
云原生 第十二章 可观测性:监控与日志
查看>>
Leetcode C++ 《第203场周赛》
查看>>
云原生 第十三章 Kubernetes网络概念及策略控制
查看>>
《redis设计与实现》 第一部分:数据结构与对象 || 读书笔记
查看>>
《redis设计与实现》 第二部分(第9-11章):单机数据库的实现
查看>>
算法工程师 面经2019年5月
查看>>
搜索架构师 一面面经2019年6月
查看>>