当前位置: 首页 > news >正文

超完整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学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题&#xff0c;可以利用Github Action将需要的镜像转存到阿里云私有仓库&#xff0c;然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址&#xff1a;使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…...

C++ 入门第26天:文件与流操作基础

往期回顾&#xff1a; C 入门第23天&#xff1a;Lambda 表达式与标准库算法入门-CSDN博客 C 入门第24天&#xff1a;C11 多线程基础-CSDN博客 C 入门第25天&#xff1a;线程池&#xff08;Thread Pool&#xff09;基础-CSDN博客 C 入门第26天&#xff1a;文件与流操作基础 前言…...

使用python将多个Excel表合并成一个表

import pandas as pd# 定义要合并的Excel文件路径和名称 file_paths [file1.xlsx, file2.xlsx, file3.xlsx, file4.xlsx, file5.xlsx]# 创建一个空的DataFrame来存储合并后的数据 merged_data pd.DataFrame()# 循环遍历每个Excel文件&#xff0c;并读取其中的数据 for file_p…...

halcon三维点云数据处理(七)find_shape_model_3d_recompute_score

目录 一、find_shape_model_3d_recompute_score例程代码二、set_object_model_3d_attrib_mod函数三、prepare_object_model_3d 函数四、create_cube_shape_model_3d函数五、获得CamPose六、project_cube_image函数七、find_shape_model_3d函数八、project_shape_model_3d函数 一…...

vue js实现时钟以及刻度效果

2025.01.08今天我学习如何用js实现时钟样式&#xff0c;效果如下&#xff1a; 一、html代码如下&#xff1a; <template><!--圆圈--><div class"notice_border"><div class"notice_position notice_name_class" v-for"item in …...

unity学习15:预制体prefab

目录 1 创建多个gameobject 2 创建prefab 2.1 创建prefab &#xff08;类&#xff09; 2.2 prefab 是一个文件 2.3 prefab可以导出 3 创建prefab variant &#xff08;子类&#xff09; 3.1 除了创建多个独立的prefab&#xff0c; 还可以创建 prefab variant 3.2 他…...

基于Thinkphp6+uniapp的陪玩陪聊软件开发方案分析

使用uni-app框架进行前端开发。uni-app是一个使用Vue.js开发所有前端应用的框架&#xff0c;支持一次编写&#xff0c;多端发布&#xff0c;包括APP、小程序、H5等。 使用Thinkphp6框架进行后端开发。Thinkphp6是一个轻量级、高性能、面向对象的PHP开发框架&#xff0c;具有易…...

MySQL - 子查询和相关子查询详解

在SQL中&#xff0c;子查询&#xff08;Subquery&#xff09;和相关子查询&#xff08;Correlated Subquery&#xff09;是非常强大且灵活的工具&#xff0c;可以用于执行复杂的数据检索和操作。它们允许我们在一个查询中嵌套另一个查询&#xff0c;从而实现更复杂的逻辑和条件…...

Android 系统签名 keytool-importkeypair

要在 Android 项目中使用系统签名并将 APK 打包时与项目一起打包&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1&#xff1a;准备系统签名文件 从 Android 系统源码中获取系统签名文件&#xff0c;通常位于 build/target/product/security 目录下&#xff0c;包括 pla…...

安卓漏洞学习(十八):Android加固基本原理

APP加固技术发展历程 APK加固整体思路 加固整体思路&#xff1a;先解压apk文件&#xff0c;取出dex文件&#xff0c;对dex文件进行加密&#xff0c;然后组合壳中的dex文件&#xff08;Android类加载机制&#xff09;&#xff0c;结合之前的apk资源&#xff08;解压apk除dex以外…...

Docker 使用Dockerfile创建镜像

创建并且生成镜像 在当前目录下创建一个名为Dockerfile文件 vi Dockerfile填入下面配置 # 使用 CentOS 作为基础镜像 FROM centos:7# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY bin/ /app/bin/ COPY config/ /app/config/ COPY lib/ /app/lib/ COPY plugin/ /a…...

【Python运维】利用Python实现高效的持续集成与部署(CI/CD)流程

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 持续集成与部署(CI/CD)是现代软件开发中不可或缺的实践,通过自动化测试、构建和部署流程,显著提高了开发效率与运维质量。本文详细介绍…...

成功!QT 5.15.2编译mysql驱动

首选要说明&#xff0c;5.15与6.7编译驱动是完全不同的。搞错了永远编译不出来。 参考 主要是参考安装QT&#xff0c;安装mysql等。 编译成功&#xff01;QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)_mingw编译qt6.7-CSDN博客 复制mysql的include和lib到一个方便的目…...

安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装

一、项目创建 创建NDK项目有两种方式&#xff0c;一种从新创建整个项目&#xff0c;一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目&#xff1a; 选择包名、API版本与算法交互的语言&#xff1a; 选择C版本&#xff1a; 创建完之后&#xff0c;可…...

第二届 Sui 游戏峰会将于 3 月 18 日在旧金山举行

3 月中旬&#xff0c;Sui 基金会和 Mysten Labs 将共同举办第二届 Sui 游戏峰会&#xff08;Sui Gaming Summit&#xff09;&#xff0c;这是一个专注于 Sui 游戏平台的 GDC 周边活动。此次峰会将与旧金山的年度游戏开发者大会&#xff08;GDC&#xff0c;Game Developers Conf…...

自动驾驶相关知识学习笔记

一、概要 因为想知道SIL、HIL是什么仿真工具&#xff0c;故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著&#xff1b;出版时间&#xff1a;2023年3月 二、图像的分类、分割与检测任务区别 如图所示&#xff0c;这些更高阶的…...

uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」

本文提供增强版table表格组件体验,打造跨端表格的新标杆. uv3-table&#xff1a;一款基于uniappvue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选&#xff0c;自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5小程序端App端。 提供…...

新时期下k8s 网络插件calico 安装

1、k8s master节点初始化完毕以后一直处于notreadey状态&#xff0c;一直怀疑是安装有问题或者是初始化有问题&#xff08;当然&#xff0c;如果真有问题要先解决这些问题&#xff09;&#xff0c;经过不断探索才发现是网络插件没有安装导致的&#xff0c;根据建议安装calico插…...

【SQL】COUNT()函数 用法详解

COUNT()函数 COUNT函数用法&#xff1a;COUNT ( [ALL | DISTINCT] column | expression | *) ALL关键字指示统计所有值&#xff0c;而DISTINCT关键字强制函数仅对不同的值进行操作。 默认情况下&#xff0c;使用ALL选项。条件表达式 COUNT()函数中条件表达式加 OR null。例如…...

【HTML+CSS+JS+VUE】web前端教程-6-图片路径详解

绝对路径 绝对路径是电脑盘符存储与访问的具体位置 E:\xxx\1.jpg <img src"E:\xxx\1.jpg">相对路径 两者相对关系&#xff0c;两者在同一路径下可以直接访问 子级关系&#xff1a;/ 父级关系&#xff1a;../ 同级关系: ./网络路径 具体的网络地址&#xff1a…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...