docker介绍及使用

news2025/7/11 12:24:47

简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

原理

Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以我们从虚拟化到docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的。

安装docker

snap install docker

基本组成

  1. Docker镜像(Image)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
  2. Docker容器(Container)独立运行一个或一组应用。容器是使用镜像创建的运行实例。
  3. 仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
  4. 卷:目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统。备份容器内的数据到主机目录中,关闭后不会被删除。docker run后加(-v,并设置超级权限):-v 容器内部路径:容器外部路径 --privileged=true

镜像和容器的区别:1、镜像是包含了各种环境或者服务的一个模板,而容器是镜像的一个实例;2、镜像是不能运行的,是静态的,而容器是可以运行的,是动态的。

查看要安装的有哪些版本(tags),对应版本后可复制下载命令

修改镜像源

// 服务器
sudo nano /etc/docker/daemon.json
// 添加如下配置(这个是我windows电脑上的)
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

命令字和help

docker --help
docker run --help 查看帮助(得到的内容第一列等同于同行第二列,否则用第二列名字)
第一例可以-后同时加多个命令,如下i为保持打开,t为分配一个tty
docker exec -it 9019bce34a84 cat /etc/onlyoffice/documentserver/local.json
docker exec 9019bce34a84 cat /etc/onlyoffice/documentserver/local.json

命令操作

仓管中心和仓库(Registry & Repository)

docker login                登入仓管中心
sudo docker login --username=1172648136@qq.com registry.cn-hangzhou.aliyuncs.com
docker logout               登出仓管中心。
docker search               从仓管中心检索镜像。
docker pull                 从仓管中心拉取镜像到本地。
docker pull nginx:1.17.8    下载对应版本
docker push 名字:镜像版本号  从本地推送镜像到仓管中心。结合tag命令使用

镜像

# 生命周期
docker images       查看所有镜像。
docker import       从归档文件创建镜像。
docker build        从 Dockerfile 创建镜像。
docker commit       为容器创建镜像,如果容器正在运行则会临时暂停。
docker commit 容器id 建立的镜像名:版本号(标签)
docker rmi image_id 删除镜像。id通过docker images获取,并且删除前需要将对应的容器停止运行删除后才能正常删除
docker load         从标准输入 (STDIN) 加载归档包 (tar archive) 作为镜像,包括镜像本身和标签 (tags, 0.7 起)。
docker save         将镜像打包为归档包,并输出至标准输出 (STDOUT),包括所有的父层、标签和版本 (parent layers, tags, versions, 0.7 起)。
# 其它信息
docker history                                              查看镜像的历史记录。
docker tag                                                  给镜像打标签命名(本地或者仓库均可)。
docker tag image_id 名字:镜像版本号                          出版本给push推送到服务器
# 加载 / 保存 / 导入 / 导出镜像
docker load < my_image.tar.gz                               从文件中加载镜像
docker save my_image:my_tag | gzip > my_image.tar.gz        保存既有镜像
cat my_container.tar.gz | docker import - my_image:my_tag   从文件中导入容器镜像,import后为镜像用户名、镜像名
docker export my_container_id | gzip > my_container.tar.gz  导出既有容器,导出容器为当前正常运行的,可以用上一行再倒入使用
docker export my_container_id > my_container.tar            导出既有容器

容器

# 生命周期
docker create             创建容器但不启动它。
docker rename             用于重命名容器。
docker run                一键创建并同时启动该容器。docker run --help可以查看帮助(得到的内容第一列等同于同行第二列,否则用第二列名字),-d后台运行并且打印id,-p端口转发
docker run -d -p 9011:80 onlyoffice/documentserver
docker rm id              删除容器。id通过docker ps -a查询
docker update             调整容器的资源限制。
# 启动和停止
docker start              启动已存在的容器。
docker stop               停止运行中的容器,stop后加容器id(可以通过docker ps获得)
docker restart 容器id     重启容器。
docker pause              暂停运行中的容器,将其「冻结」在当前状态。
docker unpause            结束容器暂停状态。
docker wait               阻塞地等待某个运行中的容器直到停止。
docker kill               向运行中的容器发送 SIGKILL 指令。
docker attach             连接到运行中的容器。
# 信息
docker ps                 查看运行中的所有容器。
docker ps -a              将显示所有容器,包括运行中和已停止的。
docker logs               从容器中读取日志。(你也可以使用自定义日志驱动,不过在 1.10 中,它只支持json-file和journald)。
docker inspect            查看某个容器的所有信息(包括 IP 地址)。
docker events             从容器中获取事件 (events)。
docker port               查看容器的公开端口。
docker top                查看容器中活动进程。
docker stats              查看容器的资源使用量统计信息。
docker stats --all        同样将显示所有容器,默认仅显示运行中的容器。
docker diff               查看容器文件系统中存在改动的文件。
# 导入、导出
docker cp                 在容器和本地文件系统之间复制文件或目录。
docker export             将容器的文件系统打包为归档文件流 (tarball archive stream) 并输出至标准输出 (STDOUT)。
# 执行命令
docker exec               在容器内执行命令。

网络(Networks)

# 生命周期
docker network create
docker network rm
# 其它信息
docker network ls
docker network inspect
# 建立连接
docker network connect
docker network disconnect

 卷标(Volumes)

# 生命周期
docker volume create
docker volume rm
# 信息
docker volume ls
docker volume inspect

其他

清理
最新的 数据管理命令 已在 Docker 1.13 实现:
docker system prune
docker volume prune
docker network prune
docker container prune
docker image prune

df 命令
docker system df 将显示当前 Docker 各部分占用的磁盘空间。
Heredoc 声明 Docker 容器
docker build -t htop - << EOFFROM alpineRUN apk --no-cache add htopEOF

最近一次的容器 ID
alias dl='docker ps -l -q'docker run ubuntu echo hello worlddocker commit $(dl) helloworld

带命令的提交(需要 Dockerfile)
docker commit -run='{"Cmd":["postgres", "-too -many -opts"]}' $(dl) postgres

获取 IP 地址
docker inspect $(dl) | grep -wm1 IPAddress | cut -d '"' -f 4
或使用 jq:
docker inspect $(dl) | jq -r '.[0].NetworkSettings.IPAddress'
或使用 go 模板:
docker inspect -f '{{ .NetworkSettings.IPAddress }}' <container_name>
或在通过 Dockerfile 构建镜像时,通过构建参数 (build argument) 传入:
DOCKER_HOST_IP=`ifconfig | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1`echo DOCKER_HOST_IP = $DOCKER_HOST_IPdocker build \  --build-arg ARTIFACTORY_ADDRESS=$DOCKER_HOST_IP   -t sometag \  some-directory/

获取端口映射
docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' <containername>

通过正则匹配容器
for i in $(docker ps -a | grep "REGEXP_PATTERN" | cut -f1 -d" "); do echo $i; done`

获取环境变量配置
docker run --rm ubuntu env

强行终止运行中的容器
docker kill $(docker ps -q)

删除所有容器(强行删除!无论容器运行或停止)
docker rm -f $(docker ps -qa)

删除旧容器
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm

删除已停止的容器
docker rm -v `docker ps -a -q -f status=exited`

停止并删除容器
docker stop $(docker ps -aq) && docker rm -v $(docker ps -aq)

删除无用 (dangling) 的镜像
docker rmi $(docker images -q -f dangling=true)

删除所有镜像
docker rmi $(docker images -q)

删除无用 (dangling) 的卷标
Docker 1.9 版本起:

docker volume rm $(docker volume ls -q -f dangling=true)
1.9.0 中,参数 dangling=false 居然 没 用 - 它会被忽略然后列出所有的卷标。
查看镜像依赖
docker images -viz | dot -Tpng -o docker.png
Docker 容器瘦身

在某层 (RUN layer) 清理 APT
这应当和其他 apt 命令在同一层中完成。 否则,前面的层将会保持原有信息,而你的镜像则依旧臃肿。

RUN {apt commands} \  && apt-get clean \    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

压缩镜像
ID=$(docker run -d image-name /bin/bash)docker export $ID | docker import – flat-image-name

备份
ID=$(docker run -d image-name /bin/bash)(docker export $ID | gzip -c > image.tgz)gzip -dc image.tgz | docker import - flat-image-name

监视运行中容器的系统资源利用率
检查某个容器的 CPU、内存以及网络 I/O 使用情况,你可以:
docker stats <container>

按 ID 列出所有容器:
docker stats $(docker ps -q)

按名称列出所有容器:
docker stats $(docker ps --format '{{.Names}}')

按指定镜像名称列出所有容器:
docker ps -a -f ancestor=ubuntu

常用功能

查看容器id
docker ps
查看所有容器id
docker ps -a
删除容器
docker rm container_id

查看镜像
docker images
删除镜像
docker rmi image_id

更改onlyoffice配置
docker exec 容器id /bin/bash nano /etc/onlyoffice/documentserver/default.json
docker exec 9019bce34a84 nano /etc/onlyoffice/documentserver/default.json
docker exec f5ea2621d95f cat /etc/onlyoffice/documentserver/local.json

更改配置后重启镜像ID
docker restart 9019bce34a84

将本地容器打包后发布版本到服务器,从服务器下载使用。先登录对应服务器
docker tag image_id 名字:镜像版本号
docker push 名字:镜像版本号
docker pull nginx:1.17.8(名字:镜像版本号)

虚悬镜像(误操作产生,一般有就删掉)
查看(查询后repository和tag为none)
docker image ls -f dangling=true
删除虚悬镜像
docker image prune
 

dockerfile将jar打包部署到docker中
# 基础镜像使用java
from java:8
# 作者
maintainer hgx
# volume指定临时文件目录为/temp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
volume /tmp
# 将jar包添加到容器中并更名
add 远来的jar文件名 新的jar文件名
# 运行jar包
run bash -c 'pwd'
entrypoint ["java", "-jar", "/xx.jar(新的jar文件名)"]
# 暴露端口作为微服务
expose 6666
 
dockerfile和java文件放在同一目录去执行构建,打包成镜像文件
docker build -t xx:版本号 .

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

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

相关文章

M1 安装CentOS 8安装完成后无法联网怎么办?

一、首先看安装是否有问题 安装完成 VMware Fusion Tech Preview 可以打开偏好设置 选择网络,解锁后 添加一个自定义的 vmnet3 然后 按照下面的图进行设置, 注意 子网IP 可以不填 会自动生成,下图是我已经生成后的,你生成应该是不一样的地址 终端进入到 cd Library/Preference…

第四章. Pandas进阶—数据转换

第四章. Pandas进阶 4.5 数据转换 数据转换一般包括一列数据转换成多列数据&#xff0c;行列转换&#xff0c;DataFrame转换为字典&#xff0c;列表和元组等 1.一列数据转换成多列数据(str.split函数) 1).语法&#xff1a; DataFrame.str.split(patNone,n-1,expandFalse)参数…

【数字识别】基于DBN实现minist数据集手写数字识别附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

四十六、Fluent壁面函数的选取依据

1. Fluent壁面函数 前面介绍了壁面函数的由来及相关的理论&#xff0c;这里我们介绍Fluent中壁面函数的选取依据。牢记&#xff1a;使用壁面函数的前提是y>15 Fluent在两种湍流模型中需要选择壁面函数分别是k-e模型和Reynolds Stress雷诺应力模型&#xff0c;其他的湍流模型…

ADRC自抗扰控制从Simulink仿真到PLC控制实现

ADRC自抗扰算法专栏有详细学习笔记和PLC完整源代码,大家可以自行查看,链接如下: ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_RXXW_Dor的博客-CSDN博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-CSDN博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家…

【KBQA-2】 Learning To Retrieve Prompts for In-Context Learning

前言 本文是对文章 Learning To Retrieve Prompts for In-Context Learning (NAACL, 2022) 的阅读笔记&#xff0c;论文代码&#xff1a;链接。 文章目录1. in-context learning2. 本文工作3. 模型训练和推理1&#xff09;如何产生标记数据2&#xff09;如何给候选集合打分3&am…

离散连续系统仿真(汽车自动停车系统和弹跳球运动模型) matlab

文章目录一、汽车自动停车系统1.1 实验描述1.2 实验目的1.3 建模1&#xff09;建立这个自动停车系统的混成自动机模型&#xff1a;2&#xff09;状态图1.4 Simulink仿真1.4.1 仿真图1.4.2 仿真结果1.5 实验体会二、弹跳球运动模型2.1 实验描述2.2 实验目的2.3 建模1)建立这个弹…

【计算机组成原理Note】5.1 CPU的功能和基本结构

5.1 CPU的功能和基本结构 5.1.1 CPU的功能 指令控制。完成取指令、分析指令和执行指令的操作&#xff0c;即程序的顺序控制。操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPu管理并产生由内存取出的每条指令的操作信号&#xff0c;把各种操作信号送往相应的部…

前端JS基础第一篇:执行上下文与执行栈

目录 执行上下文与执行栈 引言 什么是执行上下文? 执行上下文生命周期 变量对象 执行上下文的类型 执行上下文的特点 执行栈 执行栈示例 执行上下文与执行栈 引言 对于我们前端开发者来说理解JS程序内部执行机制是必要的&#xff0c;其中一个关键概念就是Js的执行上…

使用QEMU调试ARM64 Linux内核v6.0.9

环境准备 开发环境&#xff1a;Ubuntu 20.04.5 LTS&#xff0c;推荐修改阿里云的apt源&#xff0c;遇到编译依赖方便安装。 环境准备&#xff1a;在Windows上基于WSL2搭建Linux开发环境 本文用到的软件选用的是截至当前(2022-11-19)官网发布的最新的release版本&#xff0c;详…

JavaEE之HTTPS

文章目录HTTPS加密引入证书总结HTTPS 加密 HTTPS 就是在 HTTP 的基础上进行了 加密 , 进一步的来保证用户的信息安全~ 举个例子: 83 版 <<火烧圆明园>> , 有人要谋反干掉慈禧太后. 恭亲王奕䜣给慈禧递的折子. 折子内容只是扯一扯家常,但套上一张挖了洞的纸就能看…

ESP32的BLE使用学习

UUID生成网站&#xff1a; Online UUID Generator Tool 0.前言 什么是低功耗蓝牙&#xff1f; BLE之所以被称为低功耗蓝牙&#xff0c;就是需要通讯的时候才握手&#xff0c;数据传输完成后&#xff0c;就断开连接。在通讯过程中&#xff0c;主动方是客户端&#xff0c;由客…

中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)

文章目录一、中微单片机烧录与使用编译软件烧录软件下载地址烧录软件二、模拟IIC三、逻辑分析仪下的时序一、中微单片机烧录与使用 编译软件 中微所使用编译软件为SCMCU_IDE&#xff0c;不过个人不推荐使用这个软件写代码&#xff08;十分不好用&#xff0c;不能跳转&#xf…

Linux搜索查找命令【详细整理】

目录Linux下文件搜索、查找、查看命令findfind 【搜索范围】【选项】​ find /home -name ‘hello.txt’​ find /home -user root​ find / -size 100Mlocate特别说明&#xff1a;locate 文件名whichwhich lsgrep​ 基本语法&#xff1a;grep [选项] 查找内容 源文件grep -niL…

第六章 图论 8 AcWing 1624. 地铁地图

第六章 图论 8 AcWing 1624. 地铁地图 原题链接 AcWing 1624. 地铁地图 算法标签 图论 单源最短路 dijkstra spfa 思路 若采用邻接矩阵存储 超出本题空间限制&#xff0c;因此无法采用邻接矩阵存储&#xff0c;可采用邻接表存储 若采用常规建图方式&#xff08;即相邻两…

微信小程序|基于小程序实现人脸融合

文章目录一、文章前言二、具体流程及准备三、开发步骤四、完整代码一、文章前言 此文主要通过小程序实现人脸图像融合&#xff0c;将检测到的两张人脸进行融合&#xff0c;输出一张融合后的人脸。 二、具体流程及准备 2.1、注册百度开放平台及微信公众平台账号。 2.2、下载及安…

概论_第2章随机变量及其概率分布__离散型随机变量之二项分布

二项分布是离散型随机变量的内容 一. 定义&#xff1a; 若随机变量X的可能取值为0, 1, ... ,n, 而X的分布值为 , k0,1,…n 其中&#xff0c;0<p<1, q 1-p, 称X服从参数为n, p的二项分布&#xff0c; 简记为 X ~ B(n, p) 1. 当n1时&#xff0c; X服从0-1分布, …

想进入游戏建模行业,这4点必须了解

“游戏行业不关心你的专业&#xff0c;只关心你的作品”&#xff0c;想要进入游戏行业就记住这句话&#x1f44d; 这一年可是越来越多人想要进入游戏行业啦&#xff5e;造成了汤多肉少的情况&#xff0c;咱们怎样才能在一群竞争者中脱颖而出呢❓有4⃣大点你要注意的&#xff1…

决策树算法在计算机视觉中的应用附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

利用SpringBoot和vue+elementui做一个简单的书本信息管理系统

目录 1.准备工作 1.1.数据库准备 1.2.前端准备工作 1.3.后端准备工作 2.后台代码的编写 2.1.修改配置文件 2.2. 编写service层 2.3.编写Controller层 3.前台代码的编写 3.1.在src里面的api里面的action.js 3.2.搜索栏&#xff0c;表单 3.3.表格 3.4.弹出新增的模态…