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模板网!

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

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

相关文章

  • React - redux 使用(由浅入深)

    中文文档: http://www.redux.org.cn/ 英文文档: https://redux.js.org/ Github: https://github.com/reactjs/redux 可直接参照 目录十 进行使用 react-redux redux 是一个专门用于做状态管理的JS库(不是react插件库)。 它可以用在 react, angular, vue 等项目中, 但基本与 react 配合使用。 作用: 集中式管理 re

    2024年02月07日
    浏览(49)
  • 由浅入深Netty代码调优

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

    2024年02月05日
    浏览(42)
  • 【由浅入深学习MySQL】之索引进阶

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

    2024年02月05日
    浏览(42)
  • 由浅入深理解C#中的事件

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

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

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

    2024年01月18日
    浏览(41)
  • 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日
    浏览(42)
  • 由浅入深了解机器学习和GPT原理

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

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

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

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

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

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

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

    2024年02月13日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包