【Docker-4】Docker 命令

news2024/9/22 21:20:42

1、镜像管理命令

在这里插入图片描述

docker  images		#查看本机镜像
[root@docker-0001 ~]# docker images

docker  search  镜像名称				#从官方仓库查找镜像
[root@docker-0001 ~]# docker search busybox	 #需要联网,本次不用操作

docker  pull  镜像名称:标签				#下载镜像
[root@docker-0001 ~]# docker pull busybox	 #从华为的镜像加速站下载

docker  save  镜像名称:标签  -o  备份镜像名称.tar	#备份(导出)镜像为tar包
[root@docker-0001 ~]# docker save busybox:latest -o busybox.tar

docker  load -i  备份镜像名称		#恢复(导入)备份的镜像文件
[root@docker-0001 ~]# scp busybox.tar 192.168.1.32:/root
[root@docker-0002 ~]# docker  load -i busybox.tar

docker  rmi  镜像名称:标签		#删除镜像
[root@docker-0002 ~]# docker rmi busybox:latest 

docker  history  镜像名称:标签	#查看镜像的制作历史
[root@docker-0001 ~]# docker history centos:7 

docker  inspect  镜像名称:标签	#查看镜像的详细信息
[root@docker-0001 ~]# docker history centos:7 
[root@docker-0001 ~]# docker inspect myos:httpd 

docker  tag  镜像名称:标签  新的镜像名称:新的标签	#创建新的镜像名称和标签
[root@docker-0001 ~]# docker tag busybox:latest nsd:test
[root@docker-0001 ~]# docker images 

拷贝教学环境镜像到docker-0001主机,并导入
[root@ecs-proxy ~]# scp /root/5/public/myos.tar.xz 192.168.1.31:/root/
[root@docker-0001 ~]# docker load -i myos.tar.xz

容器管理命令

在这里插入图片描述

启动容器
docker  run 命令:docker   run   -参数   镜像名称:镜像标签    启动命令
docker-0001根据myos:v2009镜像启动并进入一个容器
[root@docker-0001 ~]# docker  run  -it  myos:v2009  /bin/bash		#/bin/bash为容器内的命令,容器内存在,才可以使用

[root@89d1ec3a0dc8 /]# exit
[root@docker-0001 ~]# docker  run  -itd myos:httpd  	#启动httpd,是个服务,要加d,放后台才能运行

启动容器时指定名字
[root@docker-0001 ~]# docker run -itd --name apache myos:httpd 

查看容器:docker   ps   [ -a   所有容器id ]   [  -q  只显示容器 id  ]
[root@docker-0001 ~]# docker ps
[root@docker-0001 ~]# docker ps -a	#ps  -a 查看创建的所有的容器(运行的和已经停止的)
[root@docker-0001 ~]# docker ps -q		#ps -q 查看运行中容器的ID值
[root@docker-0001 ~]# docker ps -aq		#ps -aq查看所有容器的id,用于脚本对容器的管理

删除容器:docker   rm   容器id
[root@docker-0001 ~]# docker rm 512567e6f64f

删除正在使用的容器时,会报错,无法删除,需要先停止容器,再执行删除命令
[root@docker-0001 ~]# docker stop 512567e6f64f		#停止容器
[root@docker-0001 ~]# docker rm 512567e6f64f

删除所有的容器:支持命令行重录,前一个命令的结果可以作为后一个命令的参数
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)		#$()用来获取命令的执行结果

临时启动容器 --rm,容器结束后自动删除,在内存中运行,退出后直接没有
第一个终端启动centos:7容器
[root@docker-0001 ~]# docker run -it --name test1 centos:7 
[root@e5f780c059f6 /]# 

第二个终端查看,可以看到结果
[root@docker-0001 ~]# docker ps | grep test1

回到第一个终端,退出容器
[root@e5f780c059f6 /]# exit

在第二个终端查看,可以看到已经停止,但是容器还在,没有删除
[root@docker-0001 ~]# docker ps  -a | grep test1


此时在第一个终端再次创建一个容器test2,加上--rm的选项查看结果
[root@docker-0001 ~]# docker run -it --name test2 --rm centos:7

第二个终端查看,可以看到结果
[root@docker-0001 ~]# docker ps | grep test2

回到第一个终端,退出容器
[root@e5f780c059f6 /]# exit

在第二个终端查看,可以看到已经停止,但是容器已经没有
[root@docker-0001 ~]# docker ps  -a | grep test2

容器管理命令启动、停止、重启
  - [x] docker   start   	容器id
  - [x] docker   stop   	容器id
  - [x] docker   restart   	容器id

[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
[root@docker-0001 ~]# docker run -itd myos:nginx 
查看容器信息:docker   inspect    容器id
[root@docker-0001 ~]# docker inspect 38b8ee2a8754
......
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
......
[root@docker-0001 ~]# curl http://172.17.0.2
Nginx is running !

[root@docker-0001 ~]# docker stop 38b8ee2a8754
[root@docker-0001 ~]# docker start 38b8ee2a8754
[root@docker-0001 ~]# docker restart 38b8ee2a8754

拷贝文件
docker cp 本机文件路径      容器id:容器内路径(上传)
docker cp 容器id:容器内路径  本机文件路径(下载)

拷贝宿主机文件到容器
#在刚刚启动的第一个容器终端中执行
[root@docker-0001 ~]# docker run -it --name test myos:v2009 

#另外开一个docker-0001的终端操作
[root@docker-0001 ~]# docker cp  /root/busybox.tar test:/root/	

在刚刚启动的第一个容器终端中查看结果
[root@b6a1ab762bd5 /]# ls /root/
busybox.tar


拷贝容器内文件到宿主机
[root@docker-0001 ~]# docker cp test:/etc/hosts ./
[root@docker-0001 ~]# ls		#有hosts文件
busybox.tar  hosts  myos.tar.xz

# 查看容器日志  docker logs 容器ID
[root@docker-0001 ~]# docker run  -itd myos:nginx 
[root@docker-0001 ~]# docker logs  99d		#99d为nginx容器的id,logs查看没有信息

[root@docker-0001 ~]# docker inspect 99d
[root@docker-0001 ~]# curl 172.17.0.3/wfr		#访问一个不存在的页面
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>
[root@docker-0001 ~]# docker logs  99d		#再次查看有,有信息
2023/06/11 12:45:32 [error] 7#0: *1 open() "/usr/local/nginx/html/wfr" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /wfr HTTP/1.1", host: "172.17.0.3"

但是如果apache的服务也是同样测试,可能结果就不显示,是因为软件原因


连接容器,启动新进程:docker   exec   -it    容器id    命令
[root@docker-0001 ~]# docker run  -it myos:v2009
[root@164a7b1a6c57 /]# exit		#此时容器时关闭的

[root@docker-0001 ~]# docker start  164a7b1a6c57	#启动myos:v2009的容器
[root@docker-0001 ~]# docker exec -it 164a7b1a6c57 /bin/bash		#根据容器ID,进入容器
[root@164a7b1a6c57 /]# ps -ef			#两个bash进程
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 12:49 pts/0    00:00:00 /bin/bash
root        42     0  0 12:50 pts/1    00:00:00 /bin/bash
root        63    42  0 12:50 pts/1    00:00:00 ps -ef		
[root@164a7b1a6c57 /]# exit		     #退出

连接容器启动进程:docker    attach   容器id
attach 以上帝进程的身份,进入容器内部,当执行exit退出容器时,会结束整个容器,通常用于在测试时,查看报错信息;
[root@docker-0001 ~]# docker attach 164a7b1a6c57
[root@164a7b1a6c57 /]# ps -ef				#一个bash进程(上帝进程)
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 12:49 pts/0    00:00:00 /bin/bash
root        64     1  0 12:52 pts/0    00:00:00 ps -ef
[root@164a7b1a6c57 /]# exit			#退出,容器关闭


[root@docker-0001 ~]# docker start 164a7b1a6c57		#启动被关闭容器
[root@docker-0001 ~]# docker attach 164a7b1a6c57	#Ctrl + p + q  退出容器,但不会停止容器的运行
		
#在对容器的使用过程中,都是使用exec,新开一个进程的方式进入容器,进行操作;
#而attach 往往应用于容器内部进行交互、排查问题、调试等操作;

简单镜像制作

获取基础镜像
方法一:docker-0001主机备份centos:7镜像,拷贝到docker-0002导入
[root@docker-0001 ~]# docker save centos:7 -o centos.tar
[root@docker-0001 ~]# scp centos.tar 192.168.1.32:/root/
[root@docker-0002 ~]# docker load -i centos.tar 

方法二:docker-0002主机直接下载
[root@docker-0002 ~]# docker pull centos:7

commit 自定义镜像
使用镜像启动容器,在该容器基础上修改,另存为一个新镜像
  - [x] docker  run  -it    centos:latest   /bin/bash
  - [x] 配置 yum,安装软件,系统配置
  - [x] docker  commit  容器id   新镜像名称: 新镜像标签
  
在docker-0001创建一个centos的容器
[root@docker-0002 ~]# docker run -it --name mycentos centos:7
[root@cb458c4e9ede /]# cd /etc/yum.repos.d/       
[root@cb458c4e9ede yum.repos.d]# rm -rf *
[root@cb458c4e9ede yum.repos.d]# curl http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo -so /etc/yum.repos.d/CentOS-Base.repo	#下载华为云的yun仓库
[root@cb458c4e9ede yum.repos.d]# yum -y install net-tools psmisc iproute vim-enhanced bash-completion tree
[root@cb458c4e9ede yum.repos.d]# yum clean all		#清除yum缓存,减小容器大小,用于镜像制作
[root@cb458c4e9ede yum.repos.d]# exit 

commit 提交容器,生成新的镜像;mycentos为容器的名字
[root@docker-0002 ~]# docker commit mycentos mycentos:latest
[root@docker-0002 ~]# docker images		#mycentos就是新生成的镜像
[root@docker-0002 ~]# docker rm mycentos	#删除容器

使用 docker  run 验证新的镜像
[root@docker-0002 ~]# docker history mycentos:latest		#查看历史镜像,多出一个镜像层
[root@docker-0002 ~]# docker run -it mycentos:latest 
[root@aa14feea7b4e /]# yum repolist		
[root@aa14feea7b4e /]# ifconfig
[root@aa14feea7b4e /]# exit

容器内部署应用

删除之前所有的容器
[root@docker-0002 ~]# docker rm -f $(docker ps -aq)
[root@docker-0002 ~]# docker run -it --name myapache mycentos:latest

此时就可以在容器里面安装相关的软件包
[root@e0e8f8596277 /]# yum -y install httpd php
[root@e0e8f8596277 /]# echo 'hello world' > /var/www/html/index.html
[root@e0e8f8596277 /]# pstree -p		#只有bash的进程

#因为容器内并没有systemd的服务,无法使用systemctl来启动httpd的服务
#查看httpd的服务文件,获取环境变量文件和服务启动命令
[root@e0e8f8596277 /]# cat /lib/systemd/system/httpd.service 
........
[Service]
EnvironmentFile=/etc/sysconfig/httpd		#环境变量文件
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND		#启动命令,$OPTIONS 此环境变量为空,可以不用写
[root@e0e8f8596277 /]# cat /etc/sysconfig/httpd		#从环境变量文件中,获取环境变量
......
LANG=C
[root@e0e8f8596277 /]# export LANG=C		#设置语言,避免出现不必要的字符集问题,不然容易出现乱码
[root@e0e8f8596277 /]# /usr/sbin/httpd -DFOREGROUND		#启动httpd服务,在前台运行
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

另外开一个docker-0002终端,通过提示的地址172.17.0.2
[root@docker-0002 ~]# curl 172.17.0.2
hello world

此时容器内容的终端是被占用的,是在前台运行的,如果关闭,不能够再次访问httpd,若想要退出,使用ctrl + pq
[root@docker-0001 ~]# docker exec -it myapache /bin/bash
[root@e0e8f8596277 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:17 pts/0    00:00:00 /bin/bash
root        27     1  0 13:20 pts/0    00:00:00 /usr/sbin/httpd -D
apache      28    27  0 13:20 pts/0    00:00:00 /usr/sbin/httpd -D
apache      29    27  0 13:20 pts/0    00:00:00 /usr/sbin/httpd -D
apache      30    27  0 13:20 pts/0    00:00:00 /usr/sbin/httpd -D
apache      31    27  0 13:20 pts/0    00:00:00 /usr/sbin/httpd -D
apache      32    27  0 13:20 pts/0    00:00:00 /usr/sbin/httpd -D
root        54     0  0 13:27 pts/1    00:00:00 /bin/bash
root        76    54  0 13:27 pts/1    00:00:00 ps -ef
[root@e0e8f8596277 /]# exit

补充

名称空间:  
	是指可以对系统资源空间进行分割隔离的技术,例如:创建一个虚拟机,在虚拟机里的所有操作,都不会对真实机造成影响。

名称空间分为六大类,可以从各个方面来对系统资源空间进行隔离;
	UTS、NETWORK、MOUNT、USER、PID、IPC

UTS:   
   #主机名命名空间,作用:分割主机名,即在容器内修改主机名,不会对宿主机的系统造成影响,实现主机名的隔离;

NETWORK:网络命名空间,作用:分割网络,即容器内的网络配置和宿主机之间相互不受干扰;
   例如:
       #在真实机器上的网卡名为ens33,IP地址为192.168.1.10/24;
       #而在容器内的网卡名可以为eth0,ip地址为10.10.10.10/24;     

MOUNT:
   #挂载命名空间,作用:隔离文件系统,在容器内挂载的光盘,宿主机是无法看到里面的内容的;
   例如:
       #在linux系统上,创建一个虚拟机,在真机的/var/lib/ftp中挂载了一个光盘文件,但是在虚拟机的/var/lib/ftp中是没有光盘内容的,这就是MOUNT隔离;

USER:
   #用户命名空间,作用:隔离用户,即容器内创建的用户不能用于登录宿主机,真机机里创建的用户也不能作用于容器;

PID:
   #进程命名空间,作用:为了防止容器和宿主机中的进程冲突;
   例如:
       #在真实机中,有一个服务: nfs,PID为2250;
       #在容器内,也有一个服务: chrony,PID为2250;
       #真实机中用户,杀死(kill) PID号为2250的进程时,并不会对容器内的进程2250产生影响;
       #而容器内的用户,杀死(kill) PID号为2250的进程时,也并不会对真实机内的进程2250产生影响;

IPC:
   #信号向量命名空间,作用:通常和PID一起使用;
   #用户杀死一个进程时,实际上是向进程发送一个信号(IPC),进程接收到这个信号后会执行对应的操作;

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

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

相关文章

MySQL基本操作 DDL DML DQL三大操作介绍

DDL 数据(结构)定义 创建表DML 数据操作 增删改DQL 查询语句 DDL 数据(结构)定义 创建表 创建 删除数据 注释 --空格内容 创建数据库 CREATE DATABASE [if not exists] 数据库名 [ CHARSET utf8]eg:CREATE DATABASE IF NOT EXISTS school CHARSET utf8如果对应school不存在,…

【GitHub精选项目】IP 地址转地理位置:ip2region 完全指南

前言 本文为大家带来的是 lionsoul2014 开发的 ip2region 项目&#xff0c;一种高效的离线 IP 地址定位库。ip2region 提供了10微秒级别的查询效率&#xff0c;支持多种主流编程语言&#xff0c;是一种理想的 IP 定位解决方案。 这个开源项目可以实现 IP 地址到地理位置的精确映…

2017年第六届数学建模国际赛小美赛A题飓风与全球变暖解题全过程文档及程序

2017年第六届数学建模国际赛小美赛 A题 飓风与全球变暖 原题再现&#xff1a; 飓风&#xff08;也包括在西北太平洋被称为“台风”的风暴以及在印度洋和西南太平洋被称为“严重热带气旋”&#xff09;具有极大的破坏性&#xff0c;往往造成数百人甚至数千人死亡。   许多气…

SVN搭建指导

环境 centos 7.9 SVN安装方式一&#xff1a;yum 1.1 http服务 至今还没有搞定网页版&#xff0c;网页版需要搭建apache http服务。遇到如下问题&#xff1a; centos - svn: Could not open the requested SVN filesystem - Stack Overflow 在试了加777权限&#xff0c;加a…

校园圈子交友系统,APP小程序H5,三端源码交付,支持二开!实名认证,大V认证,地图找伴,二手平台!

校园圈子交友系统&#xff0c;是属于自主定义开发的系统&#xff0c;内容有很多&#xff0c;先截取一些给大家看看&#xff0c;让大家更多的了解本系统&#xff0c;然后再做评价&#xff01; 校园后端下载地址&#xff1a;校园圈子系统小程序&#xff0c;校园拼车&#xff0c;校…

Pycharm 关闭控制台多余窗口详解(console)

文章目录 1 问题描述2 解决办法2.1 步骤1&#xff1a;编辑配置2.2 步骤2&#xff1a;使用 Python 控制台运行&#xff08;取消勾选&#xff09;2.3 验证&#xff1a;再次运行&#xff0c;多余窗口消失 1 问题描述 2 解决办法 2.1 步骤1&#xff1a;编辑配置 菜单路径&#xf…

【bug日记】如何切换jdk版本,如何解决java和javac版本不一致

背景 今天在安装jenkins后&#xff0c;使用java运行war包的时候&#xff0c;提示jdk1.8版本太低&#xff0c;需要提高版本&#xff0c;所以就需要切换jdk版本 解决 在用户变量中&#xff0c;首先更改了JAVA_HOME的地址为17的目录&#xff0c;发现javac的版本改为17了&#x…

云原生扫盲篇

What 云原生加速了应用系统与基础设施资源之间的解耦,向下封装资源以便将复杂性下沉到基础设施层;向上支撑应用,让开发者更关注业务价值 云原生是一种构建和运行应用程序的方法,也是一套技术体系和方法论. Cloud 表示应用程序位于云中而不是传统的数据中心Native表示应用程序从…

函数帧栈的创建和销毁(一)

目录 什么是函数栈帧 理解函数栈帧能解决什么问题 函数栈帧的创建和销毁 什么是栈 认识相关寄存器和汇编指令 相关寄存器 相关汇编命令 esp和ebp 解析函数栈帧的创建和销毁 学前补充 函数的调用堆栈 什么是函数栈帧 我们在写C 语言代码的时候&#xff0c;经常会把…

ThinkPad E550c

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

java8实战 lambda表达式、函数式接口、方法引用双冒号(中)

前言 书接上文&#xff0c;上一篇博客讲到了lambda表达式的应用场景&#xff0c;本篇接着将java8实战第三章的总结。建议读者先看第一篇博客 其他函数式接口例子 上一篇有讲到Java API也有其他的函数式接口&#xff0c;书里也举了2个例子&#xff0c;一个是java.util.functi…

2-高可用-负载均衡、反向代理

负载均衡、反向代理 upstream server即上游服务器&#xff0c;指Nginx负载均衡到的处理业务的服务器&#xff0c;也可以称之为real server,即真实处理业务的服务器。 对于负载均衡我们要关心的几个方面如下&#xff1a; 上游服务器配置&#xff1a;使用upstream server配置上…

mysql 23day DDL常用约束,数据类型

目录 数据库的四种语言常用约束&#xff08;DDL&#xff09;创建格式PRIMARY KEY&#xff1a;主键约束FOREIGN KEY&#xff1a;外键约束主键外键 联合测试开始测试 NOT NULL&#xff1a;非空约束UNIQUE&#xff1a;唯一约束DEFAULT&#xff1a;默认值约束zerofill 零填充auto_i…

vcomp140.dll丢失怎么办,vcomp140.dll丢失解决方法详解

在我多年的电脑使用经历中&#xff0c;我曾经遇到过一个非常棘手的问题&#xff0c;那就是vcomp140.dll丢失。这个问题让我苦恼了很久&#xff0c;但最终我还是找到了解决方法。今天&#xff0c;我想和大家分享一下我的经历&#xff0c;以及vcomp140.dll是什么&#xff0c;它丢…

AI创作系统ChatGPT商业运营网站系统源码,支持AI绘画,GPT语音对话+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

用全志R128复刻自平衡赛车机器人,还实现了三种不同的操控方式

经常翻车的朋友们都知道&#xff0c;能在翻车后快速摆正车身的车才是好车。 就像动画《四驱兄弟》中展现的那样&#xff0c;在比赛中需要跟着赛车一起跑圈&#xff0c;而且赛车如果被撞翻还需要重新用手扶正&#xff0c;所浪费的时间非常影响比赛结果。 如果小豪和小烈可以拥有…

[电子榨菜] js中的闭包closure

0.写在前面: 下学期就打算去实习了,这段时间要密集接收考试和面试的捶打,计网和软工就没有办法为大家继续贡献开源内容了,明年九月份之前的更新内容将会以前端,人工智能,和工程设计为基础, 很抱歉啦,不过我还是希望我这一年来的努力可以帮到一些人.虽然自己这一年过的浑浑噩噩…

Docker容器的优化和性能调优技巧

Docker已经成为了现代应用程序开发和部署的核心工具之一。然而&#xff0c;要确保Docker容器在生产环境中运行稳定、高效&#xff0c;需要一些优化和性能调优的技巧。本文将介绍一些关键的Docker容器优化和性能调优策略&#xff0c;并提供丰富的示例代码&#xff0c;以帮助大家…

【精简】mysql创建自定义函数 sql写法举例

一&#xff0c;举例的sql是查询 某个时间点某个币种的汇率 create function get_rate(idate date,CURRENCY varchar(32)) returns decimal(21,6) begin declare res decimal(21,6) default 1;selec rate into resfromt_exchangerate tewhere ratedate idateand CURRENCYID C…

Apache Pulsar 技术系列 - PulsarClient 实现解析

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。同时为了达到高性能&#xff0c;低延时、高可用&#xff0c;Pulsar 在客户端也…