【docker】docker的基础命令

news2025/2/23 19:34:31

基础操作

docker info    #查看docker的基本信息

docker version  #查看docker版本信息

一、镜像操作

 1、搜索镜像

docker search nginx

2、下载镜像

docker pull nginx

#从仓库中下载镜像,若没有指定标签,则下载最新的版本,也就是标签为: latest(最新的)

下载好了镜像就可以在目录/var/lib/docker中查到

3、查看镜像

3.1查看下载到本地的所有镜像
docker images
  • PERPOSITORY: 镜像属于的仓库
  • TAG: 镜像的标签信息,标记同一个仓库中不同镜像
  • **IMAGE ID: **镜像创建时间
  • VIRTAL SIZE: 镜像大小

3.2 查看单个镜像的详细信息
docker inspect 【镜像id或名称】

#主要是获取到镜像的唯一标识符,来查看该镜像的详细信息,唯一标识符肯定是ID号,也可以是名称+标签

4、为镜像添加新的标签

docker tag nginx:latest nginx:web
#将nginx镜像标签为latest的再添加一个为web标签
目的:为了见名知意

docker images

5、镜像导出和导入到本地

5.1 镜像导出到本地

将镜像库中的镜像导出到本地

#格式: docker save -o 【存储的文件名】 【存储的镜像】

docker save -o nginx nginx:latest
#将镜像名为nginx标签为latest的镜像导出到本地,并命名为nginx

  • 导出到本地

  • 导出到指定目录

5.2 导入镜像

将本地的镜像文件导入到镜像库中

docker load < nginx
#或
docker load -i nginx

方法一:

方法二:

6、删除镜像

注意!如果该镜像已被容器使用,正确做法是先删除依赖的镜像的所有容器,再去删除镜像。

docker rmi 【镜像库名:标签】   #当一个镜像都多个标签时,只是删除其中指定的标签
#或
docker rmi -f 【镜像id】  #会彻底删除该镜像(如果有多个标签,会报错)

7、批量删除镜像

docker images -q 
#加载所有镜像id

docker rmi 'docker images -q'
#批量删除所有镜像

docker images |awk 'NR>=2{print "docker rmi "$3}'|bash
#批量删除所有镜像

8、上传镜像

默认上传到docker Hub官方的公共仓库,需要注册使用公共仓库的账号,

可以使用docker login 命令来输入用户名、密码和邮箱来完成注册和登录

在上传镜像之前,还需要对本地镜像添加新的标签,然后再使用docker push命令进行上传。

官网地址:https://hub.docker.com/
8.1 官网注册登录账号

8.2 上传镜像到仓库
docker tag nginx:latest ydqhub/nginx:web
#修改标签

docker login
#登录公共仓库

docker push ydqhub/nginx:web
#上传镜像

登录到ydqhub中进行查看上传的仓库

二、容器操作

1、容器创建

新创建的容器默认处于停止状态,不运行任何程序,需要再其中发起一个进程来启动容器。

docker  create  -it nginx:latest /bin/bash

#选项解释
-i  #让容器开启标准输入
-t  #让docker分配一个伪终端tty
-it #合起来实现和容器交互的作用,运行一个交互式会话shell
/bin/bash #shell环境,容器运行的环境

2、查看容器状态
 

docker ps
#查看正在运行的容器

docker ps -a
#查看所有的容器

3、启动容器

docker start 【容器ID】
#根据容器ID启动容器

4、创建并启动容器-docker run

执行docker run 命令,等同于先执行docker create 命令,再执行docker start命令。

注意:容器是一个与其中运行的shell命令共存亡的终端,命令运行容器运行,命令结束容器结束。

docker容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的一句,如果docker容器中pid=1的进程挂了。那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用docker run 来创建容器时,Docker在后台的标准运行过程是:

  • 检查本地是否在指定的镜像,当镜像不存在时,会从公有仓库下载
  • 利用镜像创建并启动一个容器,
  • 分配一个文件系统给容器,在制度的镜像层外面挂在一层可读写层。
  • 从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中
  • 分配一个地址池中的IP地址给容器。
  • 执行用户指定的应用程序,执行完毕后容器被终止运行
docker run -itd nginx:latest /bin/bash
#-d选项,让程序再后台持续运行

docker run centos:7 /usr/bin/bash -c ls -lh /
#没有-d选项,执行完退出,-c选项可以将命令发送到容器中运行

docker run -d centos:7 /bin/bash -c "while true;do echo ydq;done"
#执行循环造成进程运行,但是会持续增加压力

实例一

  • 加于不加-d的区别
  • 如果docker run 运行的时一个centos系统,不加-d,会运行一个前台,然后直接进入容器内部。当你退出容器后,进程就会退出。容器就会关闭

实例二

实例三

  • 这种其实不加-d,也可以运行容器,因为容器中一直存在执行命令,它与命令共存亡。

如果在生产环境中,这个容器不能删除,但是磁盘被这个容器执行的爆满,导致其它应用不能用,那怎么处理?

  • 答:可以在/var/lib/docker/containers中可以查看到容器的运行文件,找到死循环的容器,进入到有一个json.log文件,这个文件为日志文件,可以使用echo " " >json.log 这个文件中,可以临时解决磁盘压力的问题。直接删除解决不了。但是过段时间,还是会导致压力大,那怎么处理?
  • 可以写一个脚本,定期crontab -e 执行该脚本,相当于定时清空。
#!/bin/bash
logs=$(find /var/lib/docker/containers/  -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done

===##或者====
#设置docker日志文件数量及每个日志大小
vim /etc/docker/daemon.json
{
    "registry-mirrors":["http://f613ce8f.m.daocloud.io"] //加速器
    "log-driver":"json-file",  //定义日志格式,
    "log-opts":{"max-size":"500M","max-file":"3"}  //设置日志文件最大500M,最多3个,如果3个都满了,它会自动删除一个,然后继续装。
}

systemctl damon-reload && systemctl restart docker
#重新加载一下

5、停止容器

docker stop 【容器ID】

或
docker kill 【容器ID】

#stop和kill的区别
使用kill是直接关闭这个容器的进程,如果有正在运行的文件,那么可能造成数据丢失。
使用stop是给容器发出一个退出的信号,相当于给容器一些缓冲的余地。保存好自己的文件,然后再关闭。

6、查看容器IP以及详细信息

#要查看IP地址的化,需要开启一个容器,才会进行分配IP地址

docker inspect 【容器ID】
#查看指定id的详细信息

7、进入容器

  • docker run -it 会创建前台进程,但是会输入exit后会终止进程

  • dcoker attach 会通过连接stdin,连接到容器内输入输出流,会再输出exit后终止容器操作

  • docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,但不影响容器运行。

需要进入容器进行命令操作时,可以使用docker exec 命令进入运行着的容器

格式:docker exec -it 容器ID/名称 /bin/bash

  • -i :选项表示让容器的输入保持打开
  • -t :选项表示让Docker分配一个伪终端
#进入容器的三种方式

#1、使用run进入,可以使用ctrl+d退出,直接退出终端
docker run -it centos:7 /bin/bash

#2、永久性进入,退出后还是运行状态
docker run -itd centos:7 /bin/bash  或者 dockers start 【容器id】   
#需要先运行容器
docker exec -it 【容器ID】 /bin/bash

3、③docker attach,会通过连接stdin,连接到容器内输入输出流,公在输入exit后终止容器进程(临时性的,不推荐)

 1、一次性进入

2、永久进入

  • 需要先开启一个容器,才能使用exec进入

8、容器导出和导入

用户可以将任何一个Docker容器从一台机器迁移得到另一台机器,再迁移的过程中,可以使用docker export 命令将已经创建号的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。

可以将导出文件传输到其它机器,通过相应的导入命令实现容器的迁移。

1、导出

docker export 【容器id】 > centos_7

使用scp将本地容器备份拷贝到另一台机器上

2、导入

注意!!这个跟导入镜像不能通用,这个是容器的导入,虽然导入进去也是存在镜像中,但是它是有以前容器中的数据的,镜像是存储干净的东西

#方法一
docker import centos_7 centos:v1

#方法二
cat centos_7 |docker import - centos:v2

方法二

方法一

9、将容器内部的文件传出,将本地文件传入

docker 【源文件路径】 【目标文件路径】
docker cp /opt/docker.sh 【容器id】:/opt/hahaha
#将本地文件导入到容器中

docker cp 【容器id】:/opt/ydq ./
#将容器内的ydq文件导出到本地

本地文件导入到容器

容器内文件导出

10、删除容器

docker rm 【容器id】
#不能删除运行状态的容器,如果要删除,需要加-f强制删除,或者停止后删除

docker rm -f 【容器名称】
#基于容器名称删除

docker rm -f `docker ps -q`
#删除所有运行的容器

docker rm -f `docker ps -aq`
#删除所有的容器

docker ps -a | awk 'NR>=2{print "docker rm "$1}'| bash
#删除所有容器,不包括运行的容器

for i in `docker ps -a |grep -i exit | awk '{print $1}'`;do docker rm -f $i;done
#过滤出关闭状态的容器,并删除

docker rm 【容器id】

docker rm -f 【容器名称】

docker rm -f `docker ps -q`

docker rm -f `docker ps -aq`

docker ps -a | awk ‘{print "docker rm "$1}’| bash

for i in `docker ps -a |grep -i exit | awk ‘{print $1}’`;do docker rm -f ​$i;done

11、动态查看运行容器资源消耗

docker stats

12、查看docker的日志信息

docker logs 【容器ID】
#查看指定容器的日志信息

三、总结

镜像操作

docker iamges   #查看docker镜像

docker inspect   【id号】  #查镜像的详细信息

docker tag nginx:lastest  nginx:web     #修改docker的标签(见名知意)

#==========删除镜像
docker rmi nginx:web     #删除标签为web的nginx镜像(删除标签指定的镜像)
或者
docker rmi 【镜像id】   #彻底删除该镜像
#注意:如果该镜像一个呗容器使用,正确做法先删除该镜像的所有容器,再删除镜像

#=====导入导出镜像
存储镜像----》将镜像保存为本地文件
docker save -o 【存储文件名】 【存储的镜像】
docker save -o  nginx nginx:latest  #实例(保存本地目录)

导入镜像----》将本地文件导入到容器
docker load < nginx    #存入到容器中
或
docker load -i nginx   #也可以存储到容器中

#=====上传镜像====演示上传阿里云和docker hub
默认上传到docker Hub官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com可以使用docker login命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用docker push命令进行上传。
docker tag nginx:latest  ydq/nginx:web    #修改docker标签
docker iamges
docker login       #登录到docker的hub
docker push  【上传的镜像】    #上传镜像

#=======下载镜像
docker pull nginx   #下载nginx镜像

容器操作

===#先创建后启动
docker create -it nginx:latest /bin/bash    #创建容器

docker ps -a    #查看所有容器
docker ps      #查看运行的容器

docker start 【镜像id】   #启动一个镜像

========#创建并启动
docker run 【镜像名】 /usr/bin/bash -c ls /  #创建一个容器并启动镜像(本地没有将从仓库下载)(运行结束就退出)

docker run -d 【镜像名】 /usr/bin/bash -c "while true;do echo hello;done"
#后台运行(必须要加-d,不然容器无法启动)(会造成cpu100%)

docker run -itd -name test1(名称) 【镜像名】 /bin/bash
#创建容器并持续运行容器(-name:指定名称 )

======#停止容器
docker stop 【容器id】   #容器id用docker ps -a 查看

=====#容器的进入
docker exec -it 【容器id】 /bin/bash  #进入一个启动的容器
或
docker run -it centos:7 bash #不加-d选项会创建容器后直接进入容器,但是退出容器,容器也会停止

=====#本机文件与容器互传
docker cp  ydq.txt  【容器id】:/opt   #将本地文件传到容器中的/opt目录下

docker cp 【容器id】:/opt/ydq.txt /home/ydq2.txt #将容器中的文件拷贝到本地

======#容器的导出导入
docker export 【容器id】 > nginx.tar   #将容器导出到本地
cat nginx.tar |docker import - nginx:web  #将本地导入到容器

======#容器的删除
docker rm [-f] 【容器id】   #删除容器(加-f删除正在运行的容器)

docker ps -a |awk 'NR>=2{print "docker stop" $1}'|bash 
......

简单面试题

#1、如果镜像优化?
有效减少镜像大小(dockerfile 优化方向-》对于部分企业而言,是一种升阶面试题)

#2、怎么看当下有多大号容器,怎么看当下所有容器占用的I/O有多少,占用内存多少?
使用docker stats命令查看

#3、容器有哪些状态?
Docker容器可以有七种状态:
已创建(create)
运行(up)
已暂停(paused)
重新启动(restarting)
已退出(exited)正常退出为(exited(0)),人工干预停止会有(exited(137))
死亡(dead)
迁移(removing)

#4、overlay2由哪几部分组成 ?
LowerDir
MergedDir
UpperDir
WorkDi

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

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

相关文章

使用 STM32 读取和解析 NTC 热敏电阻的数值

本文介绍了如何利用 STM32 微控制器读取和解析 NTC&#xff08;Negative Temperature Coefficient&#xff09;热敏电阻的数值。首先&#xff0c;我们将简要介绍 NTC 热敏电阻的原理和特性。接下来&#xff0c;我们将详细讨论如何设计电路连接和采用合适的 STM32 外设进行数值读…

【超强笔记软件】Obsidian实现免费无限流量无套路云同步

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 目录 一、简介 软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步 1 安装并设置Synology Drive套件 2 局域网内同步文件测试 三、内网穿透群…

docker介绍、部署与常用命令

一、docker 介绍 1、容器&#xff08;Container&#xff09;&#xff1a; (1) 概念&#xff1a; 容器是一种用于运行和部署应用程序的技术。它将应用程序及其所有依赖项&#xff08;例如代码、运行时、系统工具、系统库等&#xff09;打包在一个独立的、可移植的运行环境中&…

Java多态:多态多态,多么变态

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、重写1、重写的规则2、重写与重载的区别 二、多态1、多态的概念2、多态的实现3、向上转移和向下转型Ⅰ、向上转型Ⅱ、向下转…

Linux加强篇004-Vim编辑器与Shell命令脚本

目录 前言 1. Vim文本编辑器 1.1 编写简单文档 1.2 配置主机名称 1.3 配置网卡信息 1.4 配置软件仓库 2. 编写Shell脚本 2.1 编写简单的脚本 2.2 接收用户的参数 2.3 判断用户的参数 3. 流程控制语句 3.1 if条件测试语句 3.2 for条件循环语句 3.3 while条件循环语…

spring aop核心原理概念

目录 概述aop核心概念解析Target(目标对象)Joinpoint(连接点)Advice(通知/增加)Pointcut(切入点)Aspect(切面)Advisor(通知器)Weaving(织入)Proxy(代理)Introduction(引介) 结束 概述 aop核心概念解析 Target(目标对象) 代理的目标对象 目标对象(Target)的确立&#xff0c;是…

C++ 实现位图

引出 面试题&#xff1a;给出 40 亿个不重复的无符号整数&#xff0c;没有排过序。给定一个无符号整数&#xff0c;如何快速判断这个数是否在这 40 亿个无符号整数中。[ 腾讯面试题 ] 想法一&#xff1a;将 40 亿个数据存放到 set 里面&#xff0c;然后再查找指定的无符号整数。…

深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧,GPU是一种专门用于处理大量并行操作的硬件设备,它的架构设计主要是为了图形渲染。然而,由于其并行处理能力,现在广泛应用于深度学习、科学计算等领域。主要的GPU制造商…

运维高级--centos7源码安装Apache

安装必要的依赖项&#xff1a; sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具&#xff0c;以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

从0到0.01入门 Webpack| 008.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术 一、DNS协议1、产生背景2、域名简介3、域名解析的工作流程4、使用dig工具分析DNS过程 二、ICMP协议1、ICMP介绍2、ICMP协议格式3、ping命令4、traceroute命令 三、NAT技术1、NAT技术背景2、NAT IP转换过程3、地址转换表4、NAPT技术5、重新理解路由器…

JsonRPC协议详解(协议介绍、请求示例、响应示例)

JsonRPC协议详解 什么是RPC&#xff1f; RPC&#xff08;远程过程调用&#xff09;是一种用于实现分布式系统中不同进程或不同计算机之间通信的技术。它允许我们像调用本地函数一样调用远程计算机上的函数&#xff0c;使得分布式系统的开发变得更加简单和高效。 什么是JsonRP…

【数据结构实验】图(三)图的深度优先搜索(DFS)生成树

文章目录 1. 引言2. 深度优先搜索生成树3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现1. 数据结构2. 队列操作函数3. 广度优先搜索遍历4. 创建图5. 深度优先搜索算法6. 主函数及DFS主函数7. 输出生成树信息 3.3 …

第一百八十回 介绍两种阴影效果

文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"自定义SlideImageSwitch组件"相关的内容&#xff0c;本章回中将介绍两种阴影效果.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…

面试:双线程交替打印奇偶数

代码如下&#xff1a; package practice1;/*** 0-100的奇数偶数打印* 1、通过对象的wait和notify进行线程阻塞* 2、通过对num%2的结果进行奇数偶数的判断输出**/ public class JiOuOne {private static volatile int num 0;private static final int max 100;public static …

#define例题

我们已经学了#define的所有知识&#xff0c;让我们来看这道题&#xff0c;可不要又陷入陷阱 题目要求&#xff1a; #define N 4 #define Y(n) ((N2)*n) int main() {int z 2 * (N Y(5 1));printf("z%d\n", z);return 0; } 求这个z的值是多少&#xff1f; 我们直接…

Stable-Diffusion——Windows部署教程

Windows 参考文章&#xff1a;从零开始&#xff0c;手把手教你本地部署Stable Diffusion Webui AI绘画(非最新版) 一键脚本安装 默认环境安装在项目路径的venv下 conda create -n df_env python3.10安装pytorch&#xff1a;&#xff08;正常用国内网就行&#xff09; python -…

Sublime Text 3 安装离线插件 anaconda

1 下载 Sublime Text 3 免安装版 Download - Sublime Text 2 下载 Package Control&#xff0c;放到 Sublime Text Build 3211\Data\Installed Packages 目录下。 Installation - Package Control 3 页面搜索 anaconda anaconda - Search - Package Control Anaconda - Pac…

车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体)

车载通信架构 —— 传统车内通信网络MOST总线(光纤传输、专精多媒体) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都…