前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用部署与管理 —— Docker

应用部署与管理 —— Docker

作者头像
腾讯云 CODING
发布2022-03-16 09:28:11
7110
发布2022-03-16 09:28:11
举报
文章被收录于专栏:CODING DevOpsCODING DevOpsCODING DevOps

本文作者:何文强 — CODING 高级解决方案架构师 具有一线互联网、物联网独角兽、全国股份制银行、新型智慧交通等跨行业从业经历,历任 Java 开发高级工程师、DevOps 技术专家、高级研发经理等职,对微服务、敏捷、DevOps、容器技术有深刻的理解和丰富的实践。

Docker 简介

容器是应用程序层的抽象,将代码和依赖项打包在一起,多个容器可以在同一台计算机上运行,并与其他容器共享 OS 内核,每个容器在用户空间中作为隔离的进程运行。虚拟机是将一台服务器转变为多台服务器的物理硬件的抽象,虚拟机管理程序允许多个 VM 在单台计算机上运行,每个 VM 包含操作系统、应用程序、必要的二进制文件和库的完整副本:

  • 基于 GO 语言遵循 Apache 2.0 协议开源;
  • 基于 Linux 内核的 Cgroup Namespace 等技术对进程进行隔离;
  • Docker 让开发者可以打包应用以及依赖包到一个可移植的容器中,发布到任何流行的 Linux 机器上;
  • 容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker vs VM

容器是应用程序层的抽象,将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,并与其他容器共享 OS 内核,每个容器在用户空间中作为隔离的进程运行。

虚拟机(VM)是将一台服务器转变为多台服务器的物理硬件的抽象。虚拟机管理程序允许多个 VM 在单台计算机上运行。每个 VM 包含操作系统,应用程序,必要的二进制文件和库的完整副本。

Docker 优势(VS 虚拟机)
  • 开销更小;
  • 提高可移植性;
  • 操作更加一致;
  • 更高的效率;
  • 更好的开发应用程序。
Docker 架构

主要是从三个部分来看,分别就是客户端、引擎、仓库;Docker 客户端通过一个物理或虚拟的机器用于执行命令或者其他工具使用 Docker API 与 Docker 的守护进程通信和容器;Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,运行在 Docker Host 上,负责创建、运行、监控容器、构建、存储镜像。而 Docker 镜像是用于创建 Docker 容器的模板,容器是独立运行的一个或一组应用,则 Docker 仓库是用来保护镜像,可以理解为代码控制中的代码仓库。

Client

Docker Client 是 Docker 架构中用户用来和 Docker Daemon 建立通信的客户端;Docker Client 发送容器管理请求后,由 Docker Daemon 接受并处理请求。

Docker Host

一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。

Docker Daemon

Docker Daemon 是 Docker 架构中一个常驻在后台的系统进程, 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像。

Docker Daemon 启动所使用的可执行文件也为 Docker,与 Docker Client 启动时所使用的 Docker 可执行文件相同。在 Docker 命令执行时,通过传入的参数来辨别Docker Daemon 与 Ddocker Client。Docker Daemon 接受并处理 Docker Client 发送的请求。

Images

Docker 镜像是用于创建 Docker 容器的模板,Docker 镜像是一个只读模板。

Docker 容器镜像(Docker Image),一种新型的应用打包、分发和运行机制。容器镜像将应用运行环境,包括代码、依赖库、工具、资源文件和元信息等,打包成一种操作系统发行版无关的不可变更软件包。

Docker 镜像特点

容器镜像打包了整个容器运行依赖的环境,以避免依赖运行容器的服务器的操作系统,从而实现 “build once,run anywhere”。

容器镜像一旦构建完成,就变成 read only,成为不可变基础设施的一份子。

操作系统发行版无关,核心解决的是容器进程对操作系统包含的库、工具、配置的依赖。

Containers

Docker 利用容器来运行应用,容器是从镜像创建的运行实例;每个容器都是相互隔离的,保证安全的平台。可以把容器看作一个简易的 Linux 环境。

Registry

Docker Registry 是存储容器镜像的仓库。容器镜像是在容器被创建时,被加载用来初始化容器的文件架构与目录。

Docker 的运行过程中,Docker Daemon 会与 Docker Registry 通信,实现镜像的搜索(search)、下载(pull)、上传(push)功能。

Dockerfile

Dockerfile 是用于构建 Docker 镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile 结构及常用命令

指令

示例

说明

FROM

FROM <IMAGE>FROM <IMAGE>:<TAG>

通过 FROM 指定的镜像名称必须是一个已经存在的镜像,这个镜像称之为基础镜像,必须位于第一条非注释指令

MAINTAINER

MAINTAINER <NAME>

指定镜像的作者信息,包含镜像的所有者和联系人信息

RUN

RUN <command> (shell模式)

在 shell 模式下,是使用 /bin/sh -c COMMAND 来运行命令的。RUN 在 build 镜像时执行

RUN [ "executable", "param1", "param2" ](exec模式)

在 exec 模式下可以指定其他的 shell 来运行命令例如:RUN [“/bin/bash”, “-c”, “echo hello”]

EXPOSE

EXPOSE <PORT>

指定运行该镜像的容器使用的端口,可以是多个。

CMD

CMD <command> (shell 模式)

用于提供容器运行的默认命令,如果 Dockerfile 存在多个 CMD 命令,只有最后一个生效。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

CMD [ "executable", "param1", "param2" ] (exec 模式)

CMD [ 'param1', 'param2'](通常与 ENTRYPOINT 搭配)

ENTRYPOINT

ENTRYPOINT <command> (shell 模式)

与 CMD 类似,ENTRYPOINT 不会被 docker run 中指定的命令覆盖,如果想覆盖 ENTRYPOINT,则需要在 docker run 中指定--entrypoint 选项。如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

ENTRYPOINT [ "executable", "param1", "param2" ] (exec 模式)

ADD

ADD <src> <dest>ADD ["<src>" "<dest>"]

将文件或目录复制到 Dockerfile 构建的镜像中。<src>路径使用 Dockerfile 相对路径,<dest>路径使用镜像绝对路径。ADD 包含了类似 tar 的解压功能

COPY

COPY <src> <dest>COPY ["<src>" "<dest>"]

将文件或目录复制到 Dockerfile 构建的镜像中。单纯复制文件,建议使用 COPY。<src>路径使用 Dockerfile 相对路径,<dest>路径使用镜像绝对路径。

VOLUME

VOLUME ['/data']

定义匿名数据卷。在启动容器时没有挂载数据卷,会自动挂载到匿名卷。VOLUME 数据会随着容器重启而丢失。

WORKDIR

WORKDIR <workdir>

在容器内部设置工作目录,这样 ENTRYPOINT 和 CMD 指定的命令都会在容器中这个目录下进行。例如:WORKDIR /nginx,ENTRYPOINT 和 CMD 命令就会在容器的 /nginx 目录下执行

ENV

ENV <key> <value>ENV <key>=<value>

设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。在 docker build 和 docker run 中有效

ARG

ARG <key> <value>ARG <key>=<value>

设置构建变量,在 docker build 中有效,在 docker run 中无效

USER

USER username

用于指定镜像为什么用户去运行。例如USER nginx,镜像就会以 nginx 身份运行。可以使用 uid,gid 等各种组合使用

LABEL

LABEL <key>=<value>

LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式

ONBUILD

ONBUILD RUN [ "npm", "install" ]

为镜像创建触发器,当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行。当子镜像被构建时会插入触发器中的指令。ONBUILD 指令不在当前 Dockerfile 中执行,在当前 Dockerfile 构建的镜像作为基础镜像被引用时才会执行 ONBUILD

Docker 常用命令

作用域

命令

命令说明

命令示例

容器生命周期管理

run

运行一个新的容器

docker run [image]

start/stop/restart

启动/停止/重启容器

docker start [container]

kill

杀掉一个运行中的容器

docker kill [container]

rm

删除一个或多个容器

docer rm [container1] [container2]

pause/unpause

暂停/恢复容器中所有的进程

docker pause [container]

create

创建一个新的容器但不启动它

docker create [image]

exec

在运行的容器中执行命令

docker exec -it [container] /bin/sh /root/venture.sh

容器操作

ps

列出容器

docker ps

inspect

获取容器/镜像的元数据

docker inspect [container] [image]

top

查看容器中的进程信息

docker top [container]

logs

获取容器中的日志

docker logs [container]

port

列出指定容器的端口映射

docker port [container]

作用域

命令

命令说明

命令示例

镜像仓库

login/logot

登录/登出到docker镜像仓库,默认dockerhub

docker login/logout -u username -p password

pull

从镜像仓库中拉取或更新制定镜像

docker pull [image]:[tag]

push

将本地镜像上传到镜像仓库

docker push [image]:[tag]

search

从docerHub中查找镜像

docker search [image]

本地镜像管理

images

列出本地镜像

docker images

rmi

删除本地镜像

docker rmi [image]

tag

给指定镜像打标签

docker tag [image]:[tag] [new-image]:[new-tag]

build

使用Dockerfile创建镜像

docker build -t [image] .

history

查看指定镜像的创建历史

docker history [image]

save

将指定镜像保存成tar归档文件

docker save -o [name.tar] [image]

load

导入使用docker save 导出的镜像

docker load -i [name.tar]

import

从归档文件中创建镜像

docker import [name.tar] [new-image]

Docker 价值

通过 Docker 标准化的方式,有利于加强用户资产积累。例如集装箱,Docker 有个中文翻译过来是集装箱的意思,而集装箱既然可以节省了海运 90% 的成本,这是不可想象的。正是因为 Docker 标准化的能力,让成本得到了极大的降低、效率得到了极大的提高。除了标准化以外,还有一致性,大家都是使用一样的规格、一样的规范、出错的效率非常的低,那么世界范围内非常方便的去流通,可移植性非常的强,价值主要体现在以下几方面:

  • 标准化应用的部署和交付;
  • 加快部署效率;
  • 提升软件可移植性和灵活性;
  • 提升资源利用率;
  • 加速企业软件资产积累。
Docker 发展趋势
  • 增强容器安全能力;
  • 提升镜像仓库的稳定性和传输效率;
  • 增强资源隔离能力。

《数字化 IT 从业者知识体系》背景

数字化和可持续发展是中国企业未来发展的两大主题,掌握数字化知识,具备数字化能力,应用数字化技术是我们 IT 从业者未来核心竞争力所在。《数字化 IT 从业者知识体系》的初衷是为 IT 从业者提供的系统性的数字化知识体系,内容涵盖管理实践、工程实践、技术实践三个层次,涉及软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四大方面。

在接下来的《数字化 IT 从业者知识体系》系列文章,何文强将从软件开发方法、应用技术架构、应用部署与管理、软件交付与协作四个方面,为大家进行逐一分享介绍:

1. 软件开发方法主要包括瀑布、敏捷、精益等;

2. 应用技术架构主要包括微服务架构、服务网格架构、无服务器架构、分布式多运行架构等;

3. 应用部署与管理主要包括但不限于虚拟化技术、容器技术与容器编排等;

4. 软件交付与协作主要包括但不限于 CMMI、ITIL、DevOps 等。

相信该知识体系有利于 IT 从业者构建丰富的技术体系、全面的技术视野和系统的能力建设。欢迎大家前往《数字化 IT 从业者知识体系》话题进行详细阅读。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾云 CODING 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker vs VM
  • Docker 优势(VS 虚拟机)
  • Docker 架构
    • Client
      • Docker Host
        • Docker Daemon
          • Images
            • Containers
              • Registry
              • Dockerfile
              • Docker 价值
              • Docker 发展趋势
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档