超完整Docker学习记录,Docker常用命令详解

前言

关于国内拉取不到docker镜像的问题,可以利用Github Action将需要的镜像转存到阿里云私有仓库,然后再通过阿里云私有仓库去拉取就可以了。

参考项目地址:使用Github Action将国外的Docker镜像转存到阿里云私有仓库

一、Docker简介

Docker 是一个开源的应用容器引擎工具,使用Docker可以在同一个操作系统下,利用同一套操作系统资源,创建相互隔离的运行时环境,即容器,容器完全使用沙箱机制,相互之间不会有任何接口。

Docker的主要作用是将应用程序及其运行环境和依赖,打包成一个可移植包,即镜像;方便应用程序的部署和维护。

二、名词解释:

 Docker引擎:Docker引擎是Docker的核心,负责镜像创建,管理容器运行,停止等工作。

镜像:将应用程序,及其运行环境和依赖整合到一起打成的包,可以理解为类似操作系统的镜像(iso文件)

容器:容器是通过镜像来启动和运行的,容器是镜像的运行实例,Docker容器是一个独立运行的执行单元,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序;各个容器之间是是相互隔离的,互不影响。

仓库(Docker Hub):存放镜像的地方,类似于代码仓库;Docker Hub是一个官方的,用于存储和共享Docker镜像的公共仓库。开发者可以在Docker Hub上找到各种各样的官方和社区创建的镜像,也可以将自己的镜像上传到这个平台。

容器编排(Docker Compose、K8s): Docker Compose是一个工具,允许定义和运行多个Docker容器的配置。通过一个简单的YAML文件,可以定义应用程序的各个组件、服务和它们之间的关系。

三、Docker安装

官方文档:

Install Docker Desktop on Linux

打不开链接请使用魔法 !

笔者使用的debian操作系统,直接使用官方提供的脚本安装:

curl -fsSL https://get.docker.com -o get-docker.sh

四、Dockerfile的使用 

在构建镜像时,可以创建一个Dockerfile文件,在文件中定义构建镜像的指令(如基础镜像、拷贝文件、暴露端口等)。

常用指令:

1.FROM:指定构建镜像时需要使用的基础镜像,可以指定基础镜像的版本,格式:镜像:tag

2.COPY:拷贝文件或文件夹到指定位置

3.ADD:拷贝文件或文件夹到指定位置,若拷贝的文件是压缩文件(如 .tar, .tar.gz, .zip 等)

              将会自动解压;若是从URL下载文件,ADD 还支持从URL来源复制文件,这意味

              着可以直接从互联网上下载文件并将其添加到镜像中

4.RUN:构建镜像时需要运行的shell命令

5.EXPOSE:构建的镜像在运行时对外暴露的端口号,在运行容器时,指定-p参数中的容

                      器端口可以覆盖此参数(-p 宿主机端口:容器端口)

6.WORKDIR:构建的镜像在运行时,终端登录进来默认的工作目录

7.CMD:构建的镜像,在容器启动时要运行的命令,参数为数组形式(CMD ["命令","参数1","参数2",...])

8.MAINTAINER:指定镜像创建者信息

9.ENV:设置环境变量

10.USER:构建的镜像在运行时,设置容器进程的一些用户

eq:

#基于nginx最新版本为基础镜像,必须放在第一句
FROM nginx:latestMAINTAINER "author by Kevin"#在容器中创建一个html目录
RUN mkdir /html#设置登入容器后,shell默认工作目录为html
WORKDIR /html#复制当前目录下的所有内容到容器当前工作目录(html)
COPY . .#复制当前目录(Dockerfile所在目录)下的index.html文件到html目录下
COPY ./index.html /html#复制当前目录下hls目录下的所有文件到html目录下的hls目录(若没有hls目录将自动创建)
COPY ./hls /html/hls#删除nginx的默认配置文件default.conf
RUN rm /etc/nginx/conf.d/default.conf#复制当前目录下的default.conf文件到路径/etc/nginx/conf.d下
ADD default.conf /etc/nginx/conf.d#对外暴露容器端口为8080
EXPOSE 8080#赋予文件install.sh执行权限
RUN  chmod -v +x /install.sh#容器启动时,运行bash程序并执行install.sh脚本
CMD ["/bin/bash","install.sh"]

在执行复制操作时,若希望Dockerfile忽略某些目录或文件,可在当前目录下创建一个 .dockerignore文件,如:

#忽略node_modules目录
node_modules#忽略package-lock.json文件
package-lock.json

五、Docker常用命令

1.Docker服务启停

# 启动Docker服务
systemctl start docker# 停止Docker服务
systemctl stop docker# 重启服务
systemctl restart docker# 设置开机自启
systemctl enable docker

2.Docker查看命令

#查看docker版本
docker --version
#或
docker -v#查看docker运行状态
systemctl status docker

#查看docker概要信息
docker info#查看容器、镜像、网络、卷等详细信息,返回JSON格式的结果
docker inspect 容器id/容器名称/镜像id/镜像名/卷名#查看容器日志
docker logs <容器id或容器名>#查看正在运行的容器
docker ps#查看最近创建的容器
docker -ps  -l#查看正在运行的容器,只显示id
docker ps -q#查看所有运行的容器,包含历史运行过的容器
docker ps -a#注:容器id不用输完整,在保证不会重复的情况下,输前几位就行

#查看容器端口映射情况
docker port 容器id#查看运行中的容器资源占用情况
docker stats 容器id(可以为多个id,空格分割,或者不传查看所有容器)#查看容器内部运行的进程列表
docker top 容器id#查看本地镜像列表
docker images#查看本地镜像列表,包含历史镜像
docker images -a#查看本地镜像列表,只显示id
docker images -q#在镜像仓库搜索镜像
docker search 镜像名称

#查看容器/镜像/数据卷所占用的空间大小,数量等
docker system df

3.镜像操作 

3.1.镜像创建 

#构建镜像,"."表示使用当前目录下的Dockerfile构建
docker build -t 镜像名:tag .
#eq: docker build -t test-image:v1.0#从镜像仓库拉取镜像到本地环境,若不指定版本将拉取最新版本
docker pull 镜像名:版本
#eq:docker pull nginx#镜像仓库登录
docker login --username=<your-account-name> <your-repo-address>

3.2.镜像删除 

#删除镜像,可删除多个镜像,镜像id用空格分割
docker rmi 镜像id:tag#强制删除镜像
docker rmi 镜像id -f#删除所有镜像,$()的作用可以理解为执行一个子查询
docker rmi -f $(docker images -aq)

3.3.镜像导入导出 

#保存hls-test镜像的v1版本到home目录下,并命名为hls.tar归档文件
docker save hls-test:v1 > /home/hls.tar

#加载hls.tar归档文件镜像
docker load < hls.tar

4.容器操作

4.1.容器运行

语法:docker run [options] image:tag [command]

参数:

         --name=“容器新名字”

        -d:后台运行容器

        -i:以交互模式运行容器  interactive

        -t:为容器重新分配一个为输入终端

        -P:随机终端口映射,大写P

        -p:指定终端口映射,小写p,格式:-p <宿主机端口>:<容器端口>

        -v:容器目录挂载或卷映射,格式:<宿主机目录路径>:<容器目录路径>或

               <卷名>:<容器目录路径>

eq:

#用hls-test:v1镜像,以后台模式运行一个容器,并将容器的80端口映射到宿主机的8080端口
#并指定容器名为test,将宿主机的home/html目录(自动创建)挂载到容器html/hls目录
docker run --name test -p 8080:80 -v /home/html:/html/hls -d hls-test:v1#使用卷映射方式替代目录挂载,卷名nginx_html(宿主机自动创建,默认在/var/lib/docker/volumes目录下)
docker run --name test -p 8080:80 -v nginx_html:/html/hls -d hls-test:v1

#交互式运行容器,可以进入到容器内部,执行一些操作
#在容器中输入exit可退出容器,退出同时容器也会停止运行
#按快捷键ctrl+p+q可退出容器,退出后容器不会停止运行
docker run -p 8080:80 -it hls-test:v1 /bin/bash

#退出容器后可再次进入容器(前提是容器没有停止)
docker exec -it <容器id> bash
docker exec -it <容器id> /bin/bash
#或
docker attach <容器id>#注:exec命令是在容器中打开新的终端,不会启动新进程,用exit退出后,容器不会停止
#attach命令是直接进入容器的终端,用exit退出后,会导致容器停止

4.2.容器启停

#停止正在运行的容器
docker stop <容器id或容器名>#停止所有正在运行的容器
docker stop $(docker ps -q)#重启容器
docker restart <容器id或容器名>#启动已停止的容器
docker start <容器id或容器名>#强制停止容器
docker kill <容器id或容器名>#强制停止所有容器
docker kill $(docker ps -a -q)#注:容器id不用输完整,在保证不会重复的情况下,输前几位就行

4.3.容器删除

#删除已停止的容器
docker rm <容器id或容器名>#正在运行的容器需要强制删除
docker rm -f <容器id或容器名>#清理所有没有在运行状态的容器
docker continer prune#删除正在运行的所有容器
docker rm -f $(docker ps -a -q)
#或
docker ps -q -a | xargs docker rm -f

4.4.文件拷贝

#拷贝容器中的index.html文件到宿主机的home目录
docker cp <容器id>:容器内index.html的路径 /home

4.5.容器导入导出

#导出正在运行的容器为一个tar归档文件
docker export <容器id> -o 文件名.tar

#将hls-test.tar归档文件中的内容导入为一个新的镜像,-m参数表示注释
#短横线“-”后的hls-test:v1分别表示镜像名称和版本(tag)
cat hls-test.tar | docker import -m 导入测试 - hls-test:v1

六、Docker网络

1.基本网络的使用

每台机器在安装了docker后,都会创建一个虚拟的docker0网卡,用于容器之间的通信

有了这个网卡,后续每创建一个容器都会分配一个ip地址,docker0网卡的ip(172.17.0.1)将作为容器的网关地址;使用以下命令可查看容器ip

docker inspect <容器id或容器名称>

进入到另一个运行的容器中,可以通过ip地址(172.17.0.3)加端口(容器端口)访问这个容器的内容

eq:

2.自定义网络 

docker支持创建自定义网络

#创建一个名为docker_net的网络,网段参数可以省略
docker network create <网段> docker_net#查看docker网络列表
docker network ls#删除创建的自定义网络
docker network rm <网卡id或者名称>

创建自定义网络后,在启动容器时可以指定容器使用这个网络,并且指定容器的名称,那么这样启动的容器可以通过以下方式访问

http://容器名称:端口

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-排序课后题

今天我们来简单的说说关于排序的一些课后练习题. 对应的知识点博客: LINK. 目录 1. 每一单趟都能确定一个数字的最终位置的排序2. 根据序列变化确定排序方式3. 排序顺序对哪些排序效率影响不大?4. 对有序序列排序最费力的排序方式是什么?5. 对接近有序序列排序最快的排序方式…

MySQL 架构

MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器的连接器。整体架构图如下所⽰&#xff1a; MySQL Connectors&#xff1a;为使⽤…

【数据结构】二叉搜索树

目录 1. 二叉搜索树的概念 2. 二叉搜索树的性能分析 3.二叉搜索树的实现 3. 1.二叉搜索树的插入 3.2. 二叉搜索树的查找 3.3. 二叉搜索树的删除 3.4. 二叉搜索树的实现代码 4. 二叉搜索树key和key/value两种使用场景 4.1 key搜索场景&#xff1a; 4.2 key/value搜索场…

【C++】string的关系运算与比较分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;基础知识&#xff1a;C 中的 string 关系运算器1. 关系运算器概述2. 字符串比较的本质 &#x1f4af;代码解析与扩展代码例一&#xff1a;相等比较代码解析输出 代码例二&a…

高性能网络模式:Reactor 和 Proactor

Reactor Reactor 采用I/O多路复用监听事件&#xff0c;收到事件后&#xff0c;根据事件类型分配给某个进程/线程。 实际应用中用到的模型&#xff1a; 单 Reactor 单进程 单 Reactor 多线程 优点&#xff1a;能充分利用多核CPU性能。 缺点&#xff1a;存在多线程竞争共享资源…

有限元分析学习——Anasys Workbanch第一阶段笔记(10)桌子载荷案例分析_实际载荷与均布载荷的对比

目录 0 序言 1 桌子案例 2 模型简化 3 方案A 前处理 1&#xff09;分析类型选择 2&#xff09;材料加载 3&#xff09;约束、载荷及接触 4&#xff09;控制网格(网格大小需要根据结果不断调整) 初始计算结果 加密后计算结果 4 方案B、C 前处理 1&#xff09;分析…

用HTML + CSS实现太极图

目录 一、效果图 二、实现思路 三、完整代码 四、总结 一、效果图 如图所示&#xff0c;太极图一半为黑色&#xff08;代表阴&#xff09;&#xff0c;另一半为白色&#xff08;代表阳&#xff09;。这两部分相互环绕&#xff0c;形成一种流动的、旋转的感觉。 二、实现思…

【Rust自学】11.7. 按测试的名称运行测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.7.1. 按名称运行测试的子集 如果想要选择运行的测试&#xff0c;就将测试的名称&#xff08;一个或多个&#xff09;作为cargo test的…

标准应用 | 2025年网络安全服务成本度量实施参考

01 网络安全服务成本度量依据相关新变化 为了解决我国网络安全服务产业发展中面临的服务供需两方对于服务成本组成认知偏差较大、网络安全服务成本度量缺乏依据的问题&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;组织北京赛西科技发展有限责任公司、北京安…

HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控

最近长沙跑了半个多月&#xff0c;跟甲方客户对了下项目指标&#xff0c;许久没更新 回来后继续研究如何实现 grafana实现HAMi vgpu虚拟化监控&#xff0c;毕竟合同里写了需要体现gpu资源限制和算力共享以及体现算力卡资源共享监控 先说下为啥要用HAMi吧&#xff0c; 一个重要原…

某地武警海警总队建筑物自动化监测

1. 项目概述 该项目分布于三个不同的地级市&#xff0c;都是位于临海港口的码头&#xff0c;由中国武警海警总队驻扎&#xff0c;守卫人民安全。 1号建筑物自动化监测系统项目由一道伸缩缝划分为两个监测单元&#xff0c;建筑物为三层混合结构&#xff0c;采用350mm厚石墙、2…

负载均衡原理及算法

什么是负载均衡&#xff1f; 负载均衡 指的是将用户请求分摊到不同的服务器上处理&#xff0c;以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成&#xff0c;一般情况下&#xff0c;硬件的性能更好&#xff0c;软件的价格更便宜&#x…

Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;初版&#xff09;Linux 下Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;重置版&#xff09;Windows …

LLMs之VDB:LanceDB的简介、安装和使用方法、案例应用之详细攻略

LLMs之VDB&#xff1a;LanceDB的简介、安装和使用方法、案例应用之详细攻略 目录 LanceDB的简介 1、LanceDB的主要特性 2、为何选择 LanceDB&#xff1f; LanceDB的安装和使用方法 1、安装方法 Javascript/Typescript Python 2、使用方法 Javascript Python LanceDB…

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…

Java面试核心知识4

公平锁与非公平锁 公平锁&#xff08;Fair&#xff09; 加锁前检查是否有排队等待的线程&#xff0c;优先排队等待的线程&#xff0c;先来先得 非公平锁&#xff08;Nonfair&#xff09; 加锁时不考虑排队等待问题&#xff0c;直接尝试获取锁&#xff0c;获取不到自动到队尾…

探索AGI:智能助手与自我赋能的新时代

目录 1 AGI1.1 DeepMind Levels&#xff08;2023年11月)1.2 OpenAI Levels&#xff08;2024年7月&#xff09;1.3 对比与总结1.4 AGI可能诞生哪里 2 基于AI的智能自动化助手2.1 通用型大模型2.2 专业的Agent和模型工具开发框架2.3 编程与代码生成助手2.4 视频和多模态生成2.5 商…

python迷宫寻宝 第4关 自动寻路(找宝箱、宝石、终点、获取企鹅信息)

目录 地图 ​编辑 1、成功获取粉宝石或黄宝石。 2、获取企鹅的信息 3、获取红宝石 (1)api.get.item获取红宝石 (2)context.items获取红宝石 4、获取宝箱 &#xff08;1&#xff09;api.get.item获取宝箱 &#xff08;2&#xff09;context.items获取宝箱 5、达到终点 …

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)

3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称&#xff1b;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置&#xff1…

PyCharm 引用其他路径下的文件报错 ModuleNotFound 或报红

PyCharm 中引用其他路径下的文件提示 ModuleNotFound&#xff0c;将被引用目录添加到系统路径&#xff1a; # # 获取当前目录 dir_path os.path.dirname(os.path.realpath(__file__)) # # 获取上级目录 parent_dir_path os.path.abspath(os.path.join(dir_path, os.pardir))…