超完整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:latest

MAINTAINER "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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL学习笔记(二)

一、SQL-函数 函数-介绍 函数是指一段可以直接被另一段程序调用的程序或代码。 字符串函数 示例 --concat select concat(Hello,MySql); --upper select upper(Hello); --lpad select lpad(01,5,-); --trim select trim( Hello MySQL ); --中间空格还在&#xff0c;头尾…

java mail 535 Login Fail. Please enter your authorization code to login

报错信息提示查看 https://service.mail.qq.com/detail/0/53 帮助页面意思就是说你要使用授权码登录, 但是授权码我已经正确的设置上去了 后面从 QQ邮箱出现错误 Please enter your authorization code to_邮件群发-双翼邮件群发软件官方网 看到 账户 需要是 QQ号 例如…

mysql、postgresql、druid链接池踩坑记录

The last packet successfully received from the server wIs 10,010 milliseconds ago. The last packet sent successfully to the server was 10,010 milliseconds ago.### The error may exist in URL mysql 链接字符串没有 &connectTimeout600000&socketTimeout6…

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

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

Spring Boot教程之五十二:CrudRepository 和 JpaRepository 之间的区别

Spring Boot – CrudRepository 和 JpaRepository 之间的区别 Spring Boot建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员…

【网页自动化】篡改猴入门教程

安装篡改猴 打开浏览器扩展商店&#xff08;Edge、Chrome、Firefox 等&#xff09;。搜索 Tampermonkey 并安装。 如图安装后&#xff0c;浏览器右上角会显示一个带有猴子图标的按钮。 创建用户脚本 已进入篡改猴管理面板点击创建 脚本注释说明 name&#xff1a;脚本名称。…

spark汇总

目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例&#xff08;并行化创建&#xff09;代码示例&#xff08;读取外部数据&#xff09;代码示例&#xff08;读取目录下的所有文件&#xff09; 算子DAGSparkSQLSparkStreaming…

Spring AMQP-保证发送者消息的可靠性

1. 消息发送者的可靠性 保证消息的可靠性可以通过发送者重连和发送者确认来实现 发送者重连 发送者重连机制就是在发送信息的时候如果连接不上mq不会立即结束&#xff0c;而是会在一定的时间间隔之类进行重新连接&#xff0c;连接的次数和时间都是由我们在配置文件中指定的&…

vs2022编译webrtc步骤

1、主要步骤说明 概述&#xff1a;基础环境必须有&#xff0c;比如git&#xff0c;Powershell这些&#xff0c;就不写到下面了。 1.1 安装vs2022 1、选择使用C的桌面开发 2、 Windows 10 SDK安装10.0.20348.0 3、勾选MFC及ATL这两项 4、 安装完VS2022后&#xff0c;必须安…

UnityWebGl:打包成webgl后UGUI不显示文字(中文)问题

是由于unity默认使用的是Arial,导致打包成webgl时中文不显示 解决方案&#xff1a; 可在电脑C盘下&#xff0c;路径为C:\Windows\Fonts 找个中文简体的字体文件放到unity里面&#xff0c;格式必须为. ttf

ffmpeg-avio实战:打开本地文件或者网络直播流dome

使用ffmpeg打开打开本地文件或者网络直播流的一个小dome。流程产靠ffmpeg4.x系列的解码流程-CSDN博客 #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavformat/avio.h> #include <libavutil/file.h> #include &l…

英伟达打造个人 AI 超级计算机:Project DIGITS 震撼登场

手掌大小的超级计算机 Nvidia 在 CES 2025 上为桌面用户推出了 一款大小和手掌差不多的超级计算机——Project DIGITS AI 超级计算机。虽然它的大小和一个手掌差不多&#xff0c;但性能方面可以说是强到惊人。 Project DIGITS Project DIGITS Project DIGITS 搭载全新的 GB10 G…

SAP SD学习笔记26 - 贩卖契约(框架协议)的概要,基本契约 - 数量契约

上一章讲了品目阶层&#xff08;产品层次结构&#xff09;&#xff0c;品揃Module(分类模块) 。 SAP SD学习笔记25 - 品目阶层&#xff08;产品层次结构&#xff09;、品揃Module&#xff08;分类模块&#xff09;-CSDN博客 本章继续讲SAP的知识&#xff1a;贩卖契约&#xff…

ESP32 IDF VScode出现头文件“无法打开 源 文件 ”,并有红色下划线警告

问题背景&#xff1a; ESP32 IDF VScode出现头文件“无法打开 源 文件 ”&#xff0c;并有红色下划线警告&#xff1a; 解决办法&#xff1a; 在工程里面的.vscode文件夹下&#xff0c;检查是否存在c_cpp_properties.json文件&#xff0c;如果没有可以手动创建添加。如图…

GaussDB事务和并发控制机制

目录 一、并发控制机制 二、MVCC实现方式 三、快照实现方式 四、GaussDB的并发控制机制 五、GaussDB基于事务提交时间戳的MVCC和快照机制 六、GaussDB分布式事务 七、总结与展望 事务是数据库的核心功能之一&#xff0c;其主要目的是保障数据库系统在并发处理、系统故障…

【YOLOv8老鼠检测】

YOLOv8老鼠检测 yolo老鼠检测数据集和模型YOLOv8老鼠检测步骤YOLOv8算法说明 yolo老鼠检测数据集和模型 数据集类别信息 train: E:\python_code\dataset_1\yolo_mouse_data_5000\train/images val: E:\python_code\dataset_1\yolo_mouse_data_5000\valid/images test: E:\pyt…

2025最新解决方案:新买的mac鼠标和这个触控板反向

solution1 &#xff1a;1.打开设置&#xff0c;搜索 触控 点击 自然滚动 ----->解决的是 触控板 但是还是解决不了鼠标反向的问题 solution1 ultra&#xff1a; 下载一个免费 且纯净的 软件 Scroll Reverser for macOS 这是给出的链接&#xff0c;非常简单&#xff0c;…

【C++习题】20. 两个数组的交集

题目&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 链接&#x1f517;&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 代码&#xff1a; class Solution { public:// 函数功能&#xff1a;求两个数组…

从零开始:使用VSCode搭建Python数据科学开发环境

引言 在数据科学领域&#xff0c;一个高效、稳定的开发环境是成功的关键。本文将详细介绍如何使用Visual Studio Code搭建一个完整的Python数据科学开发环境。通过本指南&#xff0c;您将学会&#xff1a; 安装和配置VSCode&#xff0c;包括基本设置和快捷键配置设置Python开…

JVM vs JDK vs JRE

JVM是Java虚拟机的缩写&#xff0c; 用于实现Java的一次编译&#xff0c;处处运行。 Java代码写成.class后&#xff0c;由本地的虚拟机运行。 JDK&#xff08;Java Development Kit&#xff09;是一个功能齐全的 Java 开发工具包&#xff0c;供开发者使用。 JDK包含了JRE。…