Docker 基础和常用命令总结

news2024/11/18 9:49:11
  • 一,Docker 简介
    • 1.1,什么是 Docker
    • 1.2,Docker 与虚拟机的区别
    • 1.3,Docker 架构
    • 1.4,为什么用 Docker
  • 二,Docker 基本概念
    • 2.1,镜像
    • 2.2,容器
    • 2.3,仓库
  • 三,Docker 使用
    • 3.1,Docker 服务
    • 3.2,下载与使用Docker公共镜像(Images)
  • 四,Docker 镜像命令
  • 五,Docker 容器命令
    • 5.1,docker run 命令
  • 六,参考资料

一,Docker 简介

1.1,什么是 Docker

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、能更高效地利用服务器。

专业名词 Docker 有两个意思:

  • 代指整个 Docker 项目。
  • 代指 Docker 引擎。

Docker 引擎(Docker Engine)是指一个服务端-客户端结构的应用,主要有这些部分:Docker 守护进程、Docker Engine API(页面存档备份,存于互联网档案馆)、Docker 客户端。

1.2,Docker 与虚拟机的区别

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
  • Docker 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
特性Docker虚拟机
启动秒级分钟级
硬盘使用一般为 MB一般为 GB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个

1.3,Docker 架构

image

runc 是一个 Linux 命令行工具,用于根据 OCI 容器运行时规范 创建和运行容器。

containerd 是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集。

1.4,为什么用 Docker

Docker 作为一种新的虚拟化技术,跟传统的虚拟化技术相比具有众多的优势:

  1. 更高效的利用系统资源:不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。
  2. 更快速的启动时间:Docker 容器应用直接运行于宿主内核,不需要启动完整的操作系统,所以启动时间可做到秒级的启动时间。
  3. 一致的运行环境:Docker 镜像提供了除内核外完整的运行时环境,确保开发环境、测试环境、生产环境的一致性。
  4. 持续交付和部署:开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
  5. 更轻松的迁移:Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。
  6. 更轻松的维护和扩展。

二,Docker 基本概念

Docker 三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

2.1,镜像

操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。

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

Docker 镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。其被设计为分层存储的架构,镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

2.2,容器

镜像(Image)和容器(Container)的关系,类似面向对象程序设计中的类和实例的关系。可以把 Docker容器(Container) 看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。它可以被启动、开始、停止、 删除。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

容器和镜像一样都是使用分层存储,每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层

2.3,仓库

镜像构建完成后,可以很容器的在当前宿主主机上运行,但是如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,即仓库(Repository)-集中存放镜像的地方。

Docker 仓库(Registry) 分为公开仓库(Public)和私有仓库(Private)两种形式。目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 2,650,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。Docker Registry 是官方提供的工具,可以用于构建私有的镜像仓库。

一个 Docker Registry 中可以包含多个仓库Repository);每个仓库可以包含多个标签Tag);每个标签对应一个镜像

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如:ubuntu: 14.04ubuntu: 16.04 等等。

$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               329ed837d508        3 days ago          63.3MB
ubuntu              bionic              329ed837d508        3 days ago          63.3MB

三,Docker 使用

3.1,Docker 服务

安装 Docker 这里不做介绍。以下是 Linux 系统下,一些 docker 使用命令:

1,查看 Docker 服务状态:使用 systemctl status docker 命令查看 Docker 服务的状态。其中 Active: active (running) 即表示 Docker 服务为正在运行状态。

image

2,停止 Docker 服务:使用 systemctl stop docker 命令。

3,启动 Docker 服务:使用 systemctl start docker 命令。

4,重启 Docker 服务:使用 systemctl restart docker 命令。

5,测试 Docker 是否安装正确

$ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:13e367d31ae85359f42d637adf6da428f76d75dc9afeb3c21faea0d976f5c651
Status: Downloaded newer image for hello-world:latest
 
Hello from Docker!
This message shows that your installation appears to be working correctly.
 
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
 
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
 
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
 
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

3.2,下载与使用Docker公共镜像(Images)

macos 系统环境下操作示例,ubuntu 系统可能略有不同。

1,使用 docker search 命令从 Docker Repo 搜索 Dokcer 可用的镜像。示例命令:docker search ubuntu18.04

image

2,使用 docker image pull 命令从 Docker Repo 获取指定的 Dokcer镜像(Images)。示例命令: docker image pull docker.io/hello-world。拉取名为 docker.io/hello-world 的镜像。

image

3,使用 docker image ls 命令查看本地的 Dokcer 镜像(Images)。

4,使用 docker run 命令运行 Dokcer 镜像(Images)。示例命令:docker run hello-world

image

5,使用 docker info 命令,查看当前 docker容器 的所有的信息。

image

6,使用 docker version 查看容器的版本信息。

$ docker --version # 这个命令查看 docker 版本更简单
Docker version 19.03.13, build 4484c46d9d

image

四,Docker 镜像命令

Docker 镜像(Images) 也可以理解为是一个用于创建 Docker容器(Container) 的静态模板。一个 Docker 镜像(Images) 可以创建很多 Docker容器(Container)。

Docker 镜像常用命令如下:

命令描述
docker commit创建镜像。
docker images查看镜像信息。
docker load导入镜像。
docker pull拉取 Docker 镜像。
docker push上传镜像。
docker rmi删除镜像。
docker save导出镜像。
docker search在 Docker Hub 搜索镜像。
docker tag为镜像打标签。

五,Docker 容器命令

5.1,docker run 命令

通过 docker run 命令可以基于镜像新建一个容器并启动,语法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

其他常用容器管理命令如下:

# 新建容器并启动
$ docker run [镜像名/镜像ID]
# 启动已终止容器
$ docker start [容器ID]
# 列出本机运行的容器
$ docker ps
# 停止运行的容器
$ docker stop [容器ID]
# 杀死容器进程
$ docker kill [容器ID]
# 重启容器
$ docker restart [容器ID]

docker run 命令语法

1, docker run 命令常用选项:可通过 docker run --help 命令查看全部内容。

选项说明
-d, --detach=false指定容器运行于前台还是后台,默认为 false。
-i, --interactive=false打开 STDIN,用于控制台交互。
-t, --tty=false分配 tty 设备,该可以支持终端登录,默认为 false。
-u, --user=“”指定容器的用户。
-a, --attach=[]登录容器(必须是以 docker run -d 启动的容器)。
-w, --workdir=“”指定容器的工作目录。
-c, --cpu-shares=0设置容器 CPU 权重,在 CPU 共享场景使用。
-e, --env=[]指定环境变量,容器中可以使用该环境变量。
-m, --memory=“”指定容器的内存上限。
-P, --publish-all=false指定容器暴露的端口。
-p, --publish=[]指定容器暴露的端口。
-h, --hostname=“”指定容器的主机名。
-v, --volume=[]给容器挂载存储卷,挂载到容器的某个目录。
–volumes-from=[]给容器挂载其他容器上的卷,挂载到容器的某个目录。
–cap-add=[]添加权限。
–cap-drop=[]删除权限。
–cidfile=“”运行容器后,在指定文件中写入容器 PID 值,一种典型的监控系统用法。
–cpuset=“”设置容器可以使用哪些 CPU,此参数可以用来容器独占 CPU。
–device=[]添加主机设备给容器,相当于设备直通。
–dns=[]指定容器的 dns 服务器。
–dns-search=[]指定容器的 dns 搜索域名,写入到容器的 /etc/resolv.conf 文件。
–entrypoint=“”覆盖 image 的入口点。
–env-file=[]指定环境变量文件,文件格式为每行一个环境变量。
–expose=[]指定容器暴露的端口,即修改镜像的暴露端口。
–link=[]指定容器间的关联,使用其他容器的 IP、env 等信息。
–lxc-conf=[]指定容器的配置文件,只有在指定 --exec-driver=lxc 时使用。
–name=“”指定容器名字,后续可以通过名字进行容器管理,links 特性需要使用名字。
–net=“bridge”器网络设置:
1. bridge 使用 docker daemon 指定的网桥。
2. host //容器使用主机的网络。
3. container:NAME_or_ID >//使用其他容器的网路,共享 IP 和 PORT 等网络资源。
4. none 容器使用自己的网络(类似–net=bridge),但是不进行配置。
–privileged=false指定容器是否为特权容器,特权容器拥有所有的 capabilities。
–restart=“no”指定容器停止后的重启策略:
1. no:容器退出时不重启。
2. on-failure:容器故障退出(返回值非零)时重启。
3. always:容器退出时总是重启。
–rm=false指定容器停止后自动删除容器(不支持以 docker run -d 启动的容器)。
–sig-proxy=true设置由代理接受并处理信号,但是 SIGCHLD、SIGSTOP 和 SIGKILL 不能被代理。

2,Docker 交互式运行的语法为:docker run -i -t IMAGE [COMMAND] [ARG]Docker 交互式运行,即 Docker 启动直接进入 Docker 镜像内部。

image

3,使用 docker ps 命令,查看正在运行的 docker

image

六,参考资料

  • Docker-从入门到实践
  • Docker教程

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

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

相关文章

【记录】网站变灰色怎么实现?

最近&#xff0c;大家应该注意到了&#xff0c;各大网站和APP都变成灰色了。原因也很简单&#xff0c;一般在清明节、全国哀悼日、大地震的日子、以及一些影响力很大的伟人逝世或纪念日的时候使用&#xff0c;使用后的网站的网页变成灰色(黑白色)&#xff0c;以表示对逝者的悼念…

补贴来了 | 人社部:获得这些证书,国家有补贴

近期&#xff0c;人社部等3部门发布《关于做好失业保险稳岗位提技能防失业工作的通知》&#xff0c;通知提出拓宽技能提升补贴受益范围&#xff1a; 1.领取失业保险金人员取得职业资格证书或职业技能等级证书的&#xff0c; 可按照初级(五级)不超过1000元、中级(四级)不超过150…

流程引擎activiti太难?(看这篇就够了)

一、工作流介绍 1、概念 工作流(Workflow)&#xff0c;就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或者促使此目标的实现”。 …

[附源码]Python计算机毕业设计Djang基于vuejs的文创产品销售平台app

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

MPLS协议介绍

MPLS介绍 1.MPLS协议概述 MPLS根据自己的标签交换&#xff0c;需要给数据包先写上自己的标签&#xff0c;然后设备才能查看标签之后就转发&#xff0c;此标签是需要在原有的数据包的基础上加进去的&#xff0c;并没有将以前的包头删除&#xff0c;MPLS的标签加在了第二层帧的…

数据仓库规范建设指南

数据仓库规范建设指南 1.数仓公共开发规范 1.1 层次调用规范 稳定业务按照标准的数据流向进行开发&#xff0c;即ODS-> DWD-> DWS-> APP。 非稳定业务或探索性需求&#xff0c;可以遵循ODS-> DWD->APP或者ODS-> DWD-> DWM-> APP 两个模型数据流。 …

国际物流概述:国际物流的流程是什么?

国际运输有很多参与者:航运公司、预订代理、国际货运代理和报关行;本文主要介绍托运人、收货人、国际货运代理和航运公司这四大LCL运输的参与者。从托运人到收货人的货物运输有五个物理流程和两个单证流程&#xff0c;每次装运都需要进行。每个流程都有相关的费用&#xff0c;必…

windows系统安装opencv2.4.12及bug解决

目录前言一、opencv2.4.12安装二、BUG修复1、问题解决&#xff1a;找不到MSVCR100.dll,无法继续执行代码2、问题解决&#xff1a;无法定位程序输入点******于动态链接库opencv_highgui2412.lib上前言 最近在学习CUDA&#xff0c;对照cuda by example一书的例子对照实验&#x…

深入理解Linux网络技术内幕(一)——基础介绍

文章目录前言简介基础术语常见的编码模式内存缓存缓存和hash表引用计数垃圾收集函数指针和虚拟函数表&#xff08;VFT&#xff09;goto语句向量(数组)定义条件指示指令&#xff08;#ifdef及其系列指令&#xff09;条件检查的编译期间最优化互斥主机和网络之间的字节次序转换捕获…

C#学习记录——软件工程师必备素养与技能

『聪明是一种天赋&#xff0c;而善良是一种选择。』—— 网络 1、软件工程师的基本素养 2、个人素质必修课程 3、项目开发流程 具备了良好的个人素质和基础的编程知识&#xff0c;作为一名优秀的开发人员&#xff0c;还应熟悉一个软件项目怎么开展工作&#xff0c;这就是项目…

木字楠后台管理系统开发(1):SpringBoot项目初始化并引入基础文件

&#x1f3b6; 文章简介&#xff1a;木字楠后台管理系统(1)&#xff1a;SpringBoot项目初始化并引入基础文件 &#x1f4a1; 创作目的&#xff1a;为了带大家完整的体验木字楠后台管理系统模版的开发流程 ☀️ 今日天气&#xff1a;天气☁️很好。太阳晒在身上暖暖的 &#x1f…

ChatGPT到底是个啥?它会让我们失业么?

谈起AI届&#xff0c;几家大公司是无论如何都不能不提及的&#xff0c;谷歌的GoogleX与DeepMind (下围棋那个)、Meta的FAIR (Resnet提出者恺明所就职的)、OpenAI (搞大模型的领先公司&#xff0c;代表作是GPT&#xff0c;对标谷歌的Bert)、亚马逊 (中国AI研究生的实际导师李沐大…

正厚干货 软件测试用例设计方法之一_等价类划分

今天开始我们学习关于软件测试用例的设计方法。其中较为常用的是等价类划分发&#xff0c;那么我们就从等价类划分开始吧。一、等价类划分的介绍1.定义 把所有可能输入的数据&#xff0c;即程序的输入域划分策划国内若干部分&#xff08;子集&#xff09;&#xff0c;然后从每一…

数据处理技巧(9):MATLAB将多个矩阵放在同一行显示,并写入txt文件

MATLAB将多个矩阵放在同一行显示&#xff0c;并写入txt文件生成效果要打印的矩阵代码思路记录程序运行时间写入文档MATLAB程序生成效果相关链接记得点个赞再走~~~生成效果 将9个矩阵显示在MATLAB命令行窗口中&#xff0c;一行有3个矩阵&#xff0c;一列显示3个矩阵&#xff0c…

[附源码]JAVA毕业设计网上拍卖系统(系统+LW)

[附源码]JAVA毕业设计网上拍卖系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

166.JWT简介与Django中使用JWT

1. JWT 1.1 JWT概述 基于django-rest-framework的登陆认证方式常用的大体可分为四种: BasicAuthentication&#xff1a;账号密码登陆验证SessionAuthentication&#xff1a;基于session机制会话验证TokenAuthentication&#xff1a; 基于令牌的验证JSONWebTokenAuthenticatio…

Python中使用国内源头下载依赖

有关更多的Python 开发内容,可访问:《 Python Flask开发指南》 Python开发中对于项目的依赖通常是用pip install命令进行下载,默认官网下载源为国外网络,会经常出现下载超时的问题。那么如何修改下载源使得我们能快速下载资源,如下介绍两种方式设置国内下载源。 国内下载源…

西湖大学张岳老师NLP课程笔记1 Introduction

西湖大学张岳老师NLP课程笔记1 Introduction 参考资料 B站链接课程主页 《Natural Language Processing: A Machine Learning Perspective 》 csdn大佬笔记 https://blog.csdn.net/qq_45645521/category_11685799.html 文章目录西湖大学张岳老师NLP课程笔记1 Introduction1.…

常用工具:介绍一款免费开源录屏工具-captura

网上能搜到的大部分录屏工具表面打着免费的旗号&#xff0c;实际上下载之后不是有水印就是限制分辨率和时长&#xff0c;介绍一款免费无水印的开源录屏截屏工具captura。 准备工作 要使用这个工具&#xff0c;必须事先在电脑上安装ffmpeg工具包&#xff0c;安装方式见&#x…

DRV8870/A4950/AT8870(3.6A单通道刷式直流电机驱动IC)

描述 AT8870是一款刷式直流电机驱动器&#xff0c;适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制H桥驱动器&#xff0c;该驱动器由四个N-MOS组成&#xff0c;能够以高达3.6A的峰值电流双向控制电机。利用电流衰减模式&#xff0c;可通过对输入进行脉宽调制(…