Docker由浅入深(一)

这篇具有很好参考价值的文章主要介绍了Docker由浅入深(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

容器化技术介绍

介绍容器化之前,我们得先知道,为什么会出现容器化,容器化之前都经历了什么

物理机时代
  • 部署非常慢
  • 成功很高
  • 浪费资源
  • 难于扩展与迁移
  • 受制于硬件
虚拟化时代

在同一个物理机上安装多个虚拟机,每个虚拟机安装操作系统和应用,虚拟机之间物理资源互相隔离

  • 多部署
  • 资源池
  • 资源隔离
  • 很容易扩展
  • VM需要安装操作系统
容器化时代

在虚拟化的基础上**,容器做到应用层面的隔离**,共享底层的资源,容器内的操作系统最下小话,容器化技术比虚拟机更灵活,更小巧

容器化技术应用场景
  • 标准化的迁移方式
  • 统一的参数配置
  • 自动化部署
  • 应用集群监控
Docker是容器化平台

Docker是提供应用打包,部署,运行应用程序的容器化平台。

基本概念
镜像

镜像是文件,是只读的,提供了运行程序的完整的软硬件资源,是应用程序的“集装箱”

容器

是镜像的实例,由Docker负责创建,容器之间彼此隔离

Docker 常用命令
docker pull 镜像名 <:tags>

从远程仓库抽取镜像,tags指定版本,默认是latest,即最新的镜像

docker push 拥有者/镜像名:版本(latest)

可以使用镜像的 push 命令来发布

docker tag 镜像名:版本号 拥有者/镜像名

可以使用命令 tag 来修改镜像的标签为用户名/镜像名格式

docker images / docker image ls

查看本地镜像

docker image inspect 镜像id/ 镜像名

查看镜像的配置信息

docker create

只创建容器,不启动容器

docker run 镜像名<:tags>

创建容器启动应用

docker ps/ docker container ls

查看正在运行中的镜像

docker container kill 容器id

杀死正在运行中的容器

docker rm <-f> 容器id

删除指定容器id的容器,-f参数会强制删除正在运行中的容器

docker rmi <-f> 镜像名:<:tags>

删除指定镜像,-f参数会强制删除存在对应镜像的容器的镜像

容器内部结构

以tomcat容器为例,从上层到下层依次为 Apache Tomcat/8.5.46、Jdk(1.8.0_222)、Linux(Red Hat 4.8.5-28)

容器中的命令
docker exec [it] 容器id /bin/bash

exec :在对应容器中执行命令

-it :采用交互方式执行命令

-d:守护进程的方式执行

-p:为物理机和容器创建端口映射 ,像-p 8000:8080

/bin/bash:开启一个接受后续命令的终端

容器的生命周期

容器的生命周期可以看成由容器事件和容器状态构成的关系图

容器的事件:

create/start/restart/die/kill/pause/unpause/destroy/oom

注意:kill和stop都会使容器进入stopped状态,但是kill会杀死进程,stop只是停止。start/restart处于stopped状态的容器,通过kill命令杀死的进程,会重新创建新的进程,而stop的容器不会创建新的进程

容器的状态:

running/stopped/paused/deleted

关系

running:start/restart/unpause

paused:pause

stopped: create/kill/stop/restart

deleted:destroy

Dockerfile 构建镜像
  • Dockerfile是一个包含用于组合镜像的命令的文本文档
  • Docker通过读取Dockerfile中的指令按步自动生成镜像
  • docker build -t 机构/镜像名<:tags> Dockerfile目录
Dockerfile构建镜像

1.创建Dockerfile文件

四个关键词

  • FROM tomcat:latest
  • MAINTAINER xxx.com
  • WORKDIR /user/local/tomcat/webapps
  • ADD 第一个文件目录 第二个文件目录
镜像分层

控制台根据Dockerfile打印出的step1, step2,step3…步骤,每一个步骤都会产生一个临时的镜像,如果修改了Dockerfile的step4步骤,那么会使用step3产生的临时镜像。最大的好处是可以共享资源

Dockerfile 基础命令
FROM 基于基准镜像
  • FROM centos # 基于centos:latest制作基准镜像
  • FROM scratch # 不依赖任何基准镜像base image
  • FROM tomcat<:tags>
LABEL & MAINTAINER 说明信息

MAINTAINER ANDY # 机构或者个人

LABEL version = “1.0” # 方便约阅读

LABEL description = “ANDY的描述标签” # 方便约阅读

WORKDIR 设置工作目录

WORKDIR /usr/local # 进入 /usr/local 目录

WORKDIR /usr/local/newdir # /usr/local/newdir不存在的情况,会自动创建

ADD & COPY 复制文件(基本一致,ADD多了一个添加远程文件的功能)

ADD xxx / # 将xxx复制到根路径

ADD test.tar.gz / # 添加根目录并解压

ENV 设置环境常量

ENV JAVA_HOME /usr/local/openjdk8

RUN ${JAVA_HOME}/bin/java -jar test.jar

Dockerfile执行指令
不同的执行时机
RUN

在构建镜像的过程中,对镜像内部的资源进行调整

ENTRYPOINT

在镜像创建后,在容器创建的过程中执行命令

CMD

在镜像创建后,在容器创建的过程中执行命令

具体使用
RUN构建镜像时使用

RUN yum install -y vim # Shell命令格式,使用Shell执行时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell, 回到当前shell

RUN [“yum”, “install”,“-y”,“vim”] # Exec命令格式(推荐),使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变。执行完毕,直接退出,并不胡退回之前的进程环境。

ENTRYPOINT启动命令

ENTERPOINT(入口点)用于在容器启动时执行命令

Dockerfile中只有最后一个ENTERPOINT会被执行(一定会被执行)

CMD默认命令

CMD 用于设置默认执行的命令, 解释下为什么叫默认命令,如果命令 docker run 容器名 ls, 这里的ls会代替cmd命令执行

如Dockerfile中出现多个CMD,则只有最后一个被执行

如容器启动时附件指令,则CMD被忽略文章来源地址https://www.toymoban.com/news/detail-436860.html

到了这里,关于Docker由浅入深(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 由浅入深Netty代码调优

    序列化,反序列化主要用在消息正文的转换上 序列化时,需要将 Java 对象变为要传输的数据(可以是 byte[],或 json 等,最终都需要变成 byte[]) 反序列化时,需要将传入的正文数据还原成 Java 对象,便于处理 目前的代码仅支持 Java 自带的序列化,反序列化机制,核心代码如

    2024年02月05日
    浏览(46)
  • 【个人笔记】由浅入深分析 ClickHouse

    项目中不少地方使用到ClickHouse,就对它做了一个相对深入一点的了解和研究。并对各种知识点及整理过程中的一些理解心得进行了汇总并分享出来,希望对其他同学能有帮助。 本文主要讲解ClickHouse的特点、读写过程、存储形式、索引、引擎、物化视图等特性。 适合 入门和

    2024年01月20日
    浏览(47)
  • 【由浅入深学习MySQL】之索引进阶

    本系列为:MySQL数据库详解,为千锋资深教学老师独家创作 致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~ 文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流! 从今天开始本系列

    2024年02月05日
    浏览(45)
  • 手拉手Vue组件由浅入深

    组件 (Component) 是 Vue.js 最强大的功能之一,它是html、css、js等的一个聚合体,封装性和隔离性非常强。 组件化开发:     1、将一个具备完整功能的项目的一部分分割多处使用     2、加快项目的进度     3、可以进行项目的复用 组件注册分为:全局注册和局部注册 目录

    2024年01月18日
    浏览(46)
  • Springboot3+EasyExcel由浅入深

    环境介绍 技术栈 springboot3+easyexcel 软件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。 官网https://easyexcel.opensource.ali

    2024年01月16日
    浏览(47)
  • 由浅入深理解C#中的事件

    本文较长,给大家提供了目录,可以直接看自己感兴趣的部分。 前面介绍了C#中的委托,事件的很多部分都与委托类似。实际上,事件就像是专门用于某种特殊用途的简单委托,事件包含了一个私有的委托,如下图所示: 有关事件的私有委托需要了解的重要事项如下: 1、事

    2024年02月03日
    浏览(44)
  • 【由浅入深学MySQL】- MySQL连接查询

    本系列为:MySQL数据库详解,为千锋教育资深Java教学老师独家创作 致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~ 文末有重点总结和福利内容! 技术类问题,也欢迎大家和我们沟通交流!

    2024年02月05日
    浏览(63)
  • 什么是感知机——图文并茂,由浅入深

    生活中常常伴随着各种各样的逻辑判断,比如看到远方天空中飘来乌云,打开手机看到天气预报说1小时后40%的概率下雨,此时时候我们常常会做出等会下雨,出门带伞的判断。 上述思考过程可以抽象为一个”与“的”神经逻辑“。当”看到乌云“和”天气预报40%下雨“同时

    2023年04月20日
    浏览(41)
  • 由浅入深剖析 Apollo(阿波罗)架构

    目录 一、介绍 二、架构和模块 三、架构剖析 1.最简架构  2. 高可用保障  3.多接口扩展 四、总结 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的

    2024年02月13日
    浏览(41)
  • 由浅入深了解机器学习和GPT原理

    我不是一个机器学习专家,本来是一名软件工程师,与人工智能的互动很少。我一直渴望深入了解机器学习,但一直没有找到适合自己的入门方式。这就是为什么,当谷歌在2015年11月开源TensorFlow时,我非常兴奋,知道是时候开始学习之旅了。不想过于夸张,但对我来说,这就

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包