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

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

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

相关文章

AIGC 新浪潮|Story CN meetups 将于 1 月 10-14 日举办!

随着 Web3 行业发展进入全新阶段&#xff0c;与生成式人工智能&#xff08;AIGC&#xff09;技术融合正在创造潜力新星项目。也是目前的互联网生态下&#xff0c;任何普通民众都有权利创作高质量的音乐、艺术、散文和视频内容&#xff0c;带来了用户生成内容&#xff08;UGC&am…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

设计模式学习笔记——结构型模式

文章目录 适配器模式 Adapter适用场景UML 桥接模式 Bridge适用场景UML 组合模式 Composite装饰模式 Decorator外观模式 Facade享元模式 Flyweight代理模式 Proxy 适配器模式 Adapter 适用场景 希望使用某个类&#xff0c; 但是其接口与其他代码不兼容时&#xff0c; 可以使用…

rust如何在类中保存一个闭包,它可以捕获类自己?

首先这个为什么在 Rust 中这么难实现&#xff1f; 我们得承认一个残酷的现实&#xff1a;Rust 不是 C。在 C 中&#xff0c;可以随心所欲地使用引用&#xff0c;编译器不会过多干涉。但在 Rust 中&#xff0c;编译器会像严厉的监管者一样盯着我们的每一个动作&#xff0c;生怕…

黑马跟学.苍穹外卖.Day04

黑马跟学.苍穹外卖.Day04 苍穹外卖-day04课程内容1. Redis入门1.1 Redis简介1.2 Redis下载与安装1.2.1 Redis下载1.2.2 Redis安装 1.3 Redis服务启动与停止1.3.1 服务启动命令1.3.2 客户端连接命令1.3.3 修改Redis配置文件1.3.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常…

SOLID原则学习,开闭原则

文章目录 1. 定义2. 开闭原则的详细解释3. 实现开闭原则的方法4. 总结 1. 定义 开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的五大原则&#xff08;SOLID&#xff09;之一&#xff0c;由Bertrand Meyer提出。开闭原则的核心思想是…

filebeat、kafka

elk的架构 es数据库&#xff1a;非关系型数据库&#xff0c;json格式 logstash&#xff1a;收集日志 kibana&#xff1a;图形化的工具 ↓ 以上三种结合起来即为日志收集系统 filebeat 作用&#xff1a;filebeat是一款轻量级的日志收集工具&#xff0c;不依赖java环境&…

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一&#xff0c;简介二&#xff0c;操作方法三&#xff0c;总结 一&#xff0c;简介 在使用beyoundcompare软件进行对比的时候&#xff0c;常常会出现一些无关紧要的地方&#xff0c;且所在行的内容是变化的&#xff0c;不方便进行比较&…

python无需验证码免登录12306抢票 --selenium(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 [TOC](python无需验证码免登录12306抢票 --selenium(2)) 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 就在刚刚我抢的票&#xff1a;2025年1月8日…

CSS 盒模型

盒模型 CSS盒模型是网页布局的核心概念之一&#xff0c;它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范&#xff0c;每个HTML元素都被视为一个矩形盒子&#xff0c;这个盒子由以下四个部分组成&#xff1a; 内容区&#xff08;Content area&#xff…

Kivy App开发之UX控件Slider滑块

在app中可能会调节如音量,亮度等,可以使用Slider来实现,该控件调用方便,兼容性好,滑动平稳。在一些参数设置中,也可以用来调整数值。 支持水平和垂直方向,可以设置默认值,最小及最大值。 使用方法,需用引入Slider类,通过Slider类生成一个滑块并设置相关的样式后,再…

WPF的自定义控件控件学习

引入自定义控件 <controls:Intellibox Style"{StaticResource ListSearch-SearchIntellibox}" Width"95" Margin"0,3" MaxResults"200" …

MySQL常用命令之汇总(Summary of Commonly Used Commands in MySQL)

MySQL常用命令汇总 简介 ‌MySQL是一个广泛使用的开源关系型数据库管理系统&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;现属于Oracle公司。‌ MySQL支持SQL&#xff08;结构化查询语言&#xff09;&#xff0c;这是数据库操作的标准语言&#xff0c;用户可以使用SQL进…

【含开题报告+文档+PPT+源码】基于springboot的农贸菜市场租位管理系统的设计与实现

开题报告 随着信息技术的快速发展和普及&#xff0c;信息化管理已成为各行业提升运营效率和服质量的重要手段。农贸菜市场作为城市生活的重要组成部分&#xff0c;其管理效率和服务水平直接关系到市民的日常生活体验。传统的农贸菜市场租位管理方式往往存在信息不对称、管理效…

华为路由器、交换机、AC、新版本开局远程登录那些坑(Telnet、SSH/HTTP避坑指南)

关于华为设备远程登录配置开启的通用习惯1、HTTP/HTTPS相关服务 http secure-server enablehttp server enable 2、Telnet服务telnet server enable3、SSH服务stelnet server enablessh user admin authentication-type password 「模拟器、工具合集」复制整段内容 链接&…

Vue 2 深度剖析:从理论到实战的全面指南

Vue 2 深度剖析&#xff1a;从理论到实战的全面指南 一、引言 在当今前端开发领域&#xff0c;Vue.js 2 版本以其简洁优雅、易于上手且高效强大的特性&#xff0c;广泛应用于各类项目之中&#xff0c;成为众多开发者的心头好。无论是小型创业公司的快速迭代项目&#xff0c;还…

【论文阅读-思维链的构造方法02】4.1.2 Automatic Construction-02

提示1&#xff1a;本篇博客中涉及4篇相关论文&#xff0c;预计阅读时间10分钟&#xff0c;望各位友友耐心阅读&#xff5e; 提示2&#xff1a;本篇所有涉及的论文已打包发布&#xff0c;不需要任何积分即可下载&#xff0c;指路 --> 论文集下载地址 大模型技术-思维链CoT …

【GIt原理与使用】Git远程仓库

一、理解分布式版本控制系统 我们目前所说的所有内容&#xff08;工作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统&#xff01;什么意思呢&#xff1f…

【后端面试总结】设计一个分布式锁需要考虑哪些东西

分布式锁是我们在分布式场景中经常用到的一种技术&#xff0c;在后端面试中也是出镜率很高&#xff0c;那么我们设计分布式锁的时候应该从那几方面去考虑呢 实现分布式锁需要考虑的点 设置超时时间 设置超时时间的目的是为了避免这个场景&#xff1a;进程A拿了锁&#xff0c…