Kubernetes实践讲解——基于RancherV2.3.5之Docker讲解

Kubernetes实践讲解——基于RancherV2.3.5

一、Docker

Docker是什么

​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口 ————百度百科

​ 简单来说,Docker镜像就是存放一个或者多个应用的系统。

Docker优点

​ 一个优秀的项目之所以优秀,完全是因为他们的优点的突出(废话

  • Automating the packaging and deployment of applications(使应用的打包与部署自动化)
  • Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
  • Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
  • Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

可以实现应用程序的自动化部署,这不得不说对开发还是运维来讲这是非常nice的,不需要被测试来回的催促是否将修改的bug部署上去,在Kubernetes的时候还可以实现不停机部署,那种舒适度岂是一个爽字可以描述。

Docker局限

没有什么应用可以实现一切,只是做了比优秀更好

  1. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
  2. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
  3. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
  4. 网络管理相对简单,主要是基于namespace隔离
  5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
  6. Docker对disk的管理比较有限
  7. container随着用户进程的停止而销毁,container中的log等用户数据不便收集

虽然有这么多的局限性,但是也无法掩盖Docker的发光点,使用的丝滑。

Image(镜像)

​ 正如开头讲的,Docker是让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,那么镜像又是什么呢?

​ 操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系 统。

​ Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文 件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含任何动态数据,其内容在构建之后也不会被改变。

​ 因为镜像包含了操作系统完整的root文件系统,所占有的空间往往会非常的大,所以Docker在设计的使用使用了UnionFS的技术,进行分层存储。

​ 分层存储是怎么实现的呢?

img

简单的说,就是你在Dockerfile中写的几行命令就会有几层的镜像层。

在镜像构建的过程中,也是一层层的进行构建的,所以前一层总是后一层的基础,当镜像层构建完成后不在改变,新的镜像只会构建新的镜像层,而没有发生改变的镜像层会使用之前构建好的。这个也是为什么第一次构建的时候时间会比后期用的时间长的原因。

img

使用镜像
获取镜像,获取镜像的命令为:
docker pull  [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

例子

docker pull ubuntu
启动镜像
 docker run -it --rm ubuntu:16.04  /bin/bash
  • -it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • –rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容 器并不会立即删除,除非手动 docker rm 。我们这里只是随便执行个命令,看看结果, 不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
  • ubuntu:16.04 :这是指用 ubuntu:16.04 镜像为基础来启动容器。
  • /bin/bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash 。
  • 进入镜像后,可以使用基础的shell指令 退出exit
列出镜像
docker image ls

列出部分镜像

docker image ls ubuntu

列出特定的某个镜像,也就是说指定仓库名和标签

docker image ls ubuntu:16.04
查看所有容器
docker ps -a

启动已经停止的容器

docker start [CONTAINER ID]

停止启动的容器

docker stop [CONTAINER ID]

docker restart 重启

导入和导出镜像

导出 [CONTAINER ID] 快照到本地的地址/文件名.tar

docker export [CONTAINER ID]  本地的地址/文件名.tar

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1

cat docker/ubuntu.tar | docker import - test/ubuntu:v1
删除容器
docker rm -f [CONTAINER ID]
删除镜像
docker rmi 镜像名/[CONTAINER ID]
构建镜像
docker build -t 镜像名:标签  .

一定不要忘记构建的标点

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
设置标签
docker tag [CONTAINER ID] 新的名字和标签
docker tag 860c279d2fec runoob/centos:dev

Dockerfile

一切的一切的根源,docker的构建起于此。

指令作用
FROM指定基础镜像
RUN执行命令
COPY复制文件,从上下文目录中复制文件或者目录到容器里指定路径。
ADD复制文件、可以解压文件,在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
CMD容器启动命令
ENTRYPOINT如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
ENV设置环境变量
AGE构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
VOLUME定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
EXPOSE仅仅只是声明端口。
WORKDIR指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
USER用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
HEALTHCHECK用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
LABELLABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式
FROM golang:1.9-alpine
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/go/helloworld/app .
CMD ["./app"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值