Docker 入门详解!新手也能看懂!

news2024/11/17 21:39:29

接下来通过4方面来初步了解docker

  • docker介绍
  • docker架构
  • docker镜像操作
  • docker容器操作

一、docker介绍

容器技术

计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化

(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上

由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看起来并不是非常灵活。例如:可以在Ubuntu服务中运行Redhat Enterprise Linux,但无法再Ubuntu服务器上运行Microsoft Windows。

相对于彻底隔离的管理程序虚拟化,容器被认为是不安全的。而反对这一观点的人则认为,由于虚拟容器所虚拟的是一个完整的操作系统,这无疑增大了攻击范围,而且还要考虑管理程序层潜在的暴露风险。

尽管有诸多局限性,容器还是被广泛部署于各种各样的应用场合。在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。最常见的一个例子就是“权限隔离监牢”(chroot jail),它创建一个隔离的目录环境来运行进程。如果权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现自己“身陷囹圄”,

因为权限不足被困在容器所创建的目录中,无法对宿主机进一步破坏。

最新的容器技术引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用这些新技术,容器不在仅仅是一个单纯的运行环境。在自己的权限类内,容器更像是一个完整的宿主机。容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己 的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。

容器被认为是精益技术,因为容器需要的开销有限。和传统虚拟化以及半虚拟化相比,容器不需要模拟层(emulation layer)和管理层(hypervisor layer),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。

尽管有着光辉的历史,容器仍未得到广泛的认可。一个很重要的原因就是容器技术的复杂性:容器本身就比较复杂,不易安装,管理和自动化也很困难。而Docker就是为了改变这一切而生的。

Docker是一个开发,运输和运行应用程序的开放平台。 Docker使您可以将应用程序与基础架构分离,以便快速交付软件。 使用Docker,您可以像管理应用程序一样管理基础架构(OS)。 通过利用Docker的方法快速发送,测试和部署代码,您可以显着减少编写代码和在生产中运行代码之间的延迟。(代码改了)

docker好处

容器提供了隔离性,结论是,容器可以为各种测试提供很好的沙盒环境。并且,容器本身就具有“标准性”的特征,非常适合为服务创建构建块。

Docker的一些应用场景如下:

  • 加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员可以构建、运行并分享Docker容器。容器可以在开发环境中构建,然后轻松的提交到测试环境中,并最终进入生产环境。 开发人员与运维人员进行职责的逻辑分离
  • 能够让独立的服务或应用程序在不同的环境中,得到相同的运行结果。这一点在面向服务的架构和重度依赖微型服务的部署由其实用。
  • 用Docker创建隔离的环境来进行测试。例如,用Jenkins CI这样的持续集成工具启动一个用于测试的容器。(持续化集成 war 实际部署:jenkins持续化集成 Jenkins + git )
  • Docker可以让开发者先在本机上构建一个复杂的程序或架构来进行测试,而不是一开始就在生产环境部署、测试。
  • 构建一个多用户的平台即服务(PaaS)基础设施为开发、测试提供一个轻量级的独立的沙盒环境
  • 提供软件即服务(SaaS)应用程序,例如Memcached即服务
  • 高性能、超大规模的宿主机部署(可以很多容器)

 

沙盒:在计算机安全领域,沙盒(英语:sandbox,又译为沙箱)是一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。

集装箱思想

Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Dock将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件、应用程序。

和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。

Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到 Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

container与vm区别

物理机:

 

虚拟机:

 

容器:最大化的利用资源。

 

通过上面这三张抽象图,我们大概可以通过类比概括出:容器虚拟化的是操作系统而不是硬件,容器之间是共享同一套操作系统资源的。虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统。

容器和虚拟机具有相似的资源隔离和分配优势,但功能有所不同,因为容器虚拟化的是操作系统,而不是硬件,因此容器更容易移植,效率也更高。

容器在Linux上本机运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多。

虚拟机vs容器

 

 

容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。与虚拟机相比,容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动。

虚拟机(VM)是一个物理硬件层抽象,用于将一台服务器变成多台服务器。管理程序允许多个VM在一台机器上运行。每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且VM启动也十分缓慢。

二、docker架构

Docker uses a client-server arch itecture.The Docker client talks to the Docker daemon, which does the heavy lifting of building,running,and distributing your Docker containers. The Docker clientanddaemon can run on the same system, or you can connect a Docker client to a remote Docker daemon. The Docker client and daemon communicate using a REST API,over UNIX sockets or a network interface.(Docker使用客户端-服务器架构。Docker客户端与Docker守护进程通信,后者负责构建,运行和分发Docker容器。Docker客户端和守护程序可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序使用RESTAPI,通过UNIX套接字或网络接口进行通信。)

 

Docker守护程序(dockerd)侦听DockerAPI请求并管理Docker对象,如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。)

Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如 dockerrun之类的命令时,客户端会将这些命令发送到dockerd,后者将其执行。 docker命令使用DockerAPI。Docker客户端可以与多个守护进程通信。

Docker注册表存储Docker镜像。

DockerHub是任何人都可以使用的公共注册中心,Docker配置为默认在DockerHub上查找图像。您甚至可以运行自己的私人注册表。如果您使用Docker Datacenter(DDC),它包括DockerTrustedRegistry(DTR)。使用dockerpull或 dockerrun命令时,将从配置的注册表中提取所需的映像。使用dockerpush命令时,图像将被推送到配置的注册表。)

三、docker镜像操作

Docker镜像是容器的基础。镜像是一个有序集合,其中包含根文件系统更改和在容器运行时中使用的相应执行参数。镜像通常包含堆叠在彼此之上的联合分层文件系统。镜像没有状态并且始终不会发生更改。当运行容器时,使用的镜像如果在本地中不存在, docker就会自动从docker镜像仓库中下载,默认是从 DockerHub 公共镜像源下载。

列出镜像

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello‐world         latest              fce289e99eb9        5 months ago 
       1.84kB
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下。
  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签(版本),同一仓库源可以有多个TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本。
  • IMAGEID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

查找镜像

 docker search 镜像名称
NAME                               DESCRIPTION                           
          STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.         
          5391                [OK]                
ansible/centos7‐ansible            Ansible on Centos7                       
       121                                     [OK]
jdeathe/centos‐ssh                 CentOS‐6 6.10 x86_64 / CentOS‐7 
7.5.1804 x86…   110                                     [OK]
consol/centos‐xfce‐vnc             Centos container with "headless" VNC 
session…   91                                      [OK]
imagine10255/centos6‐lnmp‐php56    centos6‐lnmp‐php56                           
   56                                      [OK]
centos/mysql‐57‐centos7            MySQL 5.7 SQL database server         
          53                                      
tutum/centos                       Simple CentOS docker image with SSH 
access      44                                      
centos/postgresql‐96‐centos7       PostgreSQL is an advanced Object‐
Relational …   37                                      
kinogmt/centos‐ssh                 CentOS with SSH                       
          26                                      [OK]
pivotaldata/centos‐gpdb‐dev        CentOS image for GPDB development. Tag names…  
 10                                      
drecom/centos‐ruby                 centos ruby                           
          6                                       [OK]
mamohr/centos‐java                 Oracle Java 8 Docker image based on 
Centos 7    3                                       [OK]
darksheer/centos                   Base Centos Image ‐‐ Updated hourly   
          3                                       [OK]
pivotaldata/centos                 Base centos, freshened up a little 
with a Do…   3                                       
miko2u/centos6                     CentOS6 日本語環境                               
    2                                       [OK]
pivotaldata/centos‐mingw           Using the mingw toolchain to cross‐
compile t…   2                                       
ovirtguestagent/centos7‐atomic     The oVirt Guest Agent for Centos 7 
Atomic Ho…   2                                       
indigo/centos‐maven                Vanilla CentOS 7 with Oracle Java 
Developmen…   1                                       [OK]

mcnaughton/centos‐base             centos base image 
          1                                       [OK]
blacklabelops/centos               CentOS Base Image! Built and Updates 
Daily!     1                                       [OK]
pivotaldata/centos‐gcc‐toolchain   CentOS with a toolchain, but 
unaffiliated wi…   1                                       
pivotaldata/centos7‐dev            CentosOS 7 image for GPDB development 
          0                                       
smartentry/centos                  centos with smartentry                 
         0                                       [OK]
fortinj66/centos7‐s2i‐nodejs       based off of ryanj/centos7‐s2i‐nodejs.  Bigg… 
  0                                       
pivotaldata/centos6.8‐dev          CentosOS 6.8 image for GPDB 
development         0                                       

拉取镜像

docker pull 镜像名称[:version]

Docker镜像首页,包括官方镜像和其它公开镜像。DockerHub上最受欢迎的10大镜像

(通过DockerregistryAPI获取不了镜像被pull的个数,只能通过镜像的stars数量,来衡量镜像的流行度。毫无疑问,拥有最高stars数量的库都是官方库。国情的原因,国内下DockerHUB官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。配置镜像加速器:

 PS:配置镜像加速器(参考该网站具体的文档操作)
‐ 阿里云(先加入阿里云开发者平台:https://dev.aliyun.com)
‐ docker中国加速器(https://www.docker‐cn.com)
‐ USTC加速器(https://lug.ustc.edu.cn/wiki/ )  真正的公共服务(无需任何操作)
‐ daocloud、网易蜂巢加速器:略

步骤:
sudo vim /etc/docker/daemon.json
    配置内容:
    {
        "registry‐mirrors": ["https://cs913o6k.mirror.aliyuncs.com"]    }
sudo systemctl daemon‐reload
sudo systemctl restart docker

删除镜像

 1、删除一个镜像
docker rmi 镜像名称/id

2、删除多个镜像
docker rmi 镜像名称1/id1 镜像名称2/id2 ...

3、删除所有镜像
docker rmi `docker images ‐q`  

四、docker容器操作

容器是 docker镜像的运行时实例。

创建容器

 docker run [options] image command [ARG...]options选项: ‐i、‐t、‐d、‐‐name
‐i:交互式容器
‐t:tty,终端
‐d:后台运行,并且打印容器id

sh /usr/local/tomcat7/bin/startup.sh(shell脚本  #/bin/bash  py  rb  lua)
Linux:根的进程:/bin/bash  tree
                /xxx
                    /yyy


eg:创建的容器名称不能重复
docker run ‐‐name=u1 ubuntu
docker run ‐i ‐t ‐‐name=u1 ubuntu /bin/bash
docker run ‐i ‐t ‐d ‐‐name=u3 ubuntu /bin/bash

进入容器

方式一:
docker attach 容器名称/id               (ps:exit,容器停止)
eg:docker attach u3

方式二:
docker exec ‐it 容器名称/id /bin/bash    (ps:exit,容器不会停止)
eg:docker exec ‐it u3 /bin/bash

查看容器

docker ps:查看正在运行的容器
docker ps -a:查看运行过的容器(历史)
docker ps -l:最后一次运行的容器

停止/启动容器

docker start 容器名称/id
docker stop 容器名称/id

获取容器/镜像的元数据

查看容器/镜像全部信息:
docker inspect 容器/镜像

查看容器/镜像部分信息:
docker inspect ‐f='{{.NetworkSettings.IPAddress}}' 容器/镜像‐f:可通过‐‐format代替

删除容器

删除一个容器:
docker rm 容器名称/id

删除多个容器:
docker rm 容器名称1/id1 容器名称2/id2 ...

删除所有容器
docker rm `docker ps ‐a ‐q`

PS:无法删除正在运行的容器

查看容器日志

 docker logs 容器名称/id

文件拷贝

如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录 
例如:docker cp 1.txt c2:/root

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录 
例如:docker cp c2:/root/2.txt /root

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可

以通过修改宿主机某个目录的文件从而去影响容器。

创建容器添加-v参数 后边为 宿主机目录:容器目录

docker run ‐id ‐‐name=c4 ‐v /opt/:/usr/local/myhtml centos

如果你共享的是多级的目录,可能会出现权限不足的提示

 这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数--

privileged=true来解决挂载的目录没有权限的问题

 docker run ‐id ‐‐privileged=true ‐‐name=c4 ‐v /opt/:/usr/local/myhtml centos

更多详细内容深入解析docker容器化技术_Java进阶教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postman断言使用总结

一、断言的概念一个完整的接口测试包括:请求——>获取响应结果——>断言断言:实际结果与预期结果的校验二、断言的作用通过实际结果与预期结果的对比,来判断接口测试用例是否通过;对比结果一致则通过,对比结果不…

webgl绘制图形API——drawArrays、drawElements

文章目录前言gl.drawArrays()——按顶点绘制可绘制基本类型绘制矩形和圆形gl.drawElements()——按索引绘制使用规范绘制矩形总结前言 gl.drawArrays()作为webgl中常用的函数图形绘制方法,可以在浏览器按照指定的模式绘制图形,与之相对的gl.drawElement…

字节跳动测试岗面试挂在2面,复盘后,我总结了失败原因,决定再战一次...

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了&#xf…

Java图形化界面---JSplitPane和JTabbedPane

目录 一、JSplitPane (1)JSplitPane的介绍 (2)JSplitPane的使用步骤 (3)案例 二、JTabbedPane (1)JTabbedPane的介绍 (2)JTabbedPane的使用步骤 &…

CSS样式基础内容6

目录 定位 为什么需要定位? 定位的四种方式 静态定位 相对定位 绝对定位(脱标) 子绝父相 固定定位(脱标) 固定定位---固定到版心右侧 粘性定位 定位的叠放顺序z-index 绝对定位盒子水平垂直居中 定位特殊特…

C#/WPF入门到多项目实战开发教程2——

登录界面 布局 右上角退出按钮 编辑图标和名称 用户名设置 布局 用户名框设置 密码框设置,使用模板进行设置 验证码框设置,使用模板进行设置 登录按钮 创建登录模板按钮 绑定模板 失败提醒 第三方登录设置 使用字体图标去替代一般图标,字体…

QThread的应用——在线程里面更新QProgressBar进度条

在线程里面更新QProgressBar进度条 编写QT软件的时候,经常会遇到点击某个按钮,进行一个比较耗时的计算。为了在计算过程中,软件界面就继续响应用户的点击,不会有卡死的感觉,一般会将这个耗时的计算放在另外一个线程里…

“打家劫舍”系列总结,偷不偷这个房间呢?(Java实现)

目录 前言 一、打家劫舍 ——>房子是线性的 1.1、dp定义 1.2、递推公式 1.3、初始化 1.4、遍历顺序 1.5、解题代码 二、打家劫舍II ——>房子是环型 2.1、分析 2.2、解题代码 三、打家劫舍III ——>房子是树形 3.1、dp含义 3.2、递推公式 3.3、解题代码…

【Trusted Firmware-A 移植】

Trusted Firmware-A 移植Trusted Firmware-A 简介步骤一、解压标准 tf-a 源码包,进入 tf-a 源码目录下:二、将 ST 官方补丁文件打到 tf-a 源码中:三、配置交叉编译工具链四、添加设备树文件五、编译源码六、固件烧写结果Trusted Firmware-A 简介 嵌入式…

Magisk工具使用指南

对于一般玩机用户,Magisk官方提供的发布版本即可满足要求,但对于高级开发者来说这远远不够,我们不仅仅是满足于使用,更要学会定制面具,最好的能完全理解面具的核心架构以便于自己也能写出来一套和面具差不多的工具,这才是我们研究面具最根本的原因所在。因为做移动安全,…

edp 基本信号-参数及命令

基本信号及概念通信双方及通道下图为edp规范中的总体框图。通过此框图我们可以了解到:交互的双方:1)source device 即 显卡的显示控制部分2) sink device 即 显示屏 双方间的通道:1) HPD 即热插拔,通过sink…

mysql之6中索引失效情况

对索引使用左或者左右模糊匹配 mysql> explain select * from user where name王五; -------------------------------------------------------------------------------------------- | id | select_type | table | type | possible_keys | key | key_len | ref …

2023.1.30---TF-A相关

完成TF-A源码的移植过程在tf-a源码目录下将补丁文件打到tf-a源码中2.在上级目录中的Makefile.sdk文件中,配置交叉编译工具链,找到CROSS_COMPILE将红色部分改为arm-linux-gnueabihf-3.在fds目录下添加设备树文件4.在上级目录中的Makefile.sdk文件中&#…

全世界游客访问最多的城市,重庆以5.9亿游客量排名第一

经过全面开放和“阳康”,旅游市场已经开始复苏。现在恰逢寒冬,海南等国内许多旅游胜地成为热门旅游目的地,泰国等国际旅游频频上热搜。旅游市场目前现状如何跟随《旅游市场数据报告》一起来了解吧。全国5A景区数量全国共有318个景区被评为AAA…

重温数据结构与算法之约瑟夫问题

文章目录前言一、暴力法二、动态规划三、实战3.1 力扣 1823. 找出游戏的获胜者3.2 洛谷 P1996 约瑟夫问题参考前言 约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”…

K8s关键性概念图解

Kubernetes可以看做云原生时代的操作系统,统一管理下层的基础设施,如计算资源、网络资源、存储资源等等。将集群中存在的各种复杂关系抽象成各种API资源,以统一的方式暴露出各种接口,也便于未来的扩展以及开发团队根据自己的需要定…

JS创建ZIP文件,JSZip的使用

Hi I’m Shendi 最近编写压缩工具,需要使用js创建zip文件,使用 JSZip 插件 官网: https://stuk.github.io/jszip/ Github: https://github.com/Stuk/jszip https://sdpro.top/blog/html/article/1012.html 下载 NPM : npm inst…

论文笔记:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

目录 文章摘要 1 Neural Radiance Field Scene Representation (基于神经辐射场的场景表示) 2 Volume Rendering with Radiance Fields (基于辐射场的体素渲染) 2.1 经典渲染方程 2.2 经典的体素渲染方法 2.3 基于分段采样近似的体素渲染方法 3 Optimizing a Neural Rad…

高通开发系列 - linux kernel启动阶段串口无打印采用LED点灯

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题背景kernel启动汇编探测kernel启动C函数阶段探测这篇文章之前请参考下:高通开发系列 - MSM8909指示灯操作 问题背景 最近在基于…

38. 外观数列

打卡!!!每日一题 今天给大家带来一道比较有意思的题目,先看看题目描述 题目描述: 题目示例: 大家题目读完可能还没太理解什么意思,我简单给大家翻译翻译: n:表示我们要计算多少次 每一次都是对前面一个…