序言
“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 系统中,控制时区和时间的主要是两个地方:
- /etc/timezone 主要代表当前时区设置,一般链接指向/usr/share/zoneinfo目录下的具体时区。
- /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
通过传递环境变量改变容器时区
- 适用于基于 Debian 基础镜像, CentOS 基础镜像 制作的 Docker 镜像
- 不适用于基于 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
本文深入探讨Docker的起源、架构、安装与配置过程,详解容器与镜像的关系,演示如何在CentOS环境下搭建Docker服务,创建并管理Tomcat容器实例,以及调整Docker容器的时区设置。
3896

被折叠的 条评论
为什么被折叠?



