Docker概述与安装使用

本文深入探讨Docker的起源、架构、安装与配置过程,详解容器与镜像的关系,演示如何在CentOS环境下搭建Docker服务,创建并管理Tomcat容器实例,以及调整Docker容器的时区设置。

序言

      “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:存储了很多不同应用的镜像.当本地没有镜像的时候,会从远程仓库下载到本地.

如下是个简单的流程图途(也是从网上下的原址是:https://www.jianshu.com/p/2302ef03cfa2)

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

应用于镜像的关系

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

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

安装tomcat用例

Centos7上安装Docker Client 和 Docker Service

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

#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 后在启动就可以了.创建了当然也能删除塞.具体命令可以参考: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
# date
Fri 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
# date
Fri Nov 29 18:46:18 CST 2019

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

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

Alpine

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

ENV TZ Asia/Shanghai

RUN 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=noninteractive

RUN 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=noninteractive

RUN 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/Shanghai

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值