【linlong】Docker第二篇-常用命令(docker启动关闭、镜像拉取、容器创建启动关闭删除等常用指令)

目录

2. Docker常用命令

2.1 帮助命令

2.2 镜像命令

2.3 搜索镜像

2.4 拉取镜像

2.5 删除镜像 

2.6 容器命令

2.6.1 创建容器并启动 

2.6.2 退出容器

2.6.3 启动容器

2.6.4 停止容器

2.6.5 删除容器

2.6.6 查看所有运行容器

2.7 其他常用命令 

2.7.1 后台启动容器

2.7.2 查看日志

2.7.3 查看容器/镜像的元数据

2.7.4 进入正在运行的容器

2.7.5 从容器内拷贝文件到主机上


2. Docker常用命令

2.1 帮助命令

docker version # 显示Docker版本信息

docker info # 显示Docker系统信息,包括镜像和容器数

docker --help # 帮助

2.2 镜像命令

docker images			# 查看所有本地主机上的镜像

解释:

REPOSITORY # 镜像的仓库源

TAG # 镜像的标签

IMAGE ID # 镜像的ID

CREATED # 镜像创建时间

SIZE # 镜像大小

同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG定义不同的镜像,如果不定义镜像的标签版本,docker将默认使用lastest镜像(最新的)。

可选项:

-a: # 列出本地所有镜像,--all

-q: # 只显示镜像id,--quiet

--digests: # 显示镜像的摘要信息

示例:

docker images	 -a			# 显示所有镜像
docker images	 -q			# 显示所有镜像的id
docker images	 -aq		# 显示所有的镜像

2.3 搜索镜像

docker search 		# 搜索镜像

# 通过 docker search 某个镜像的名称 来搜索对应Docker Hub仓库中的镜像,但有时候我们不知道仓库中的镜像名字,比如Tomcat。

# 可先上docker仓库镜像:Docker Hubhttps://hub.docker.com/ 上进行搜索要下载的资源,再进行拉取操作。

 

点击tomcat项后,进入详细页面: 

点击“Tags”进入标签页,这里有很多版本,我们选择Tomcat 9.0.46,JDK8的版本进行拉取:

# 可选项,通过搜索来过滤
--filter=stars=50		# 列出收藏数不小于50的镜像。

2.4 拉取镜像

docker pull 镜像名:镜像版本号

docker pull tomcat:9.0.46-jdk8-corretto

注1:tomcat是要拉取的镜像名,9.0是镜像的TAG。如不指定TAG默认拉取最新版本。 

 注2:拉取镜像时会进行分层下载,分层的好处是:可以提高镜像的重用率。

# 拉取MySQL
docker pull mysql		# 不写tag,默认是latest最新版本

# 拉取指定版本下载

docker pull mysql:5.7   # 删除mysql标签为5.7的镜像

 查看下载之后的镜像:

docker images

2.5 删除镜像 

docker rmi 
# 示例
docker rmi –f 6654503f1940   # 删除单个镜像
docker rmi –f tomcat:9.0 mysql:5.7	# 删除多个,空格分开
docker rmi -f $(docker images -qa)	# 删除全部

# 先查看镜像

docker images

# 再删除镜像

docker rmi -f 9a8c9549861e

2.6 容器命令

说明: 有镜像才能创建容器,我们这里使用CentOS的镜像来测试,就是虚拟一个CentOS。

docker pull centos		# 下载centos镜像,初次下载有点慢

# 查看当前Linux版本号信息:cat /etc/redhat-release

 # https://hub.docker.com/上搜索centos镜像文件

 

2.6.1 创建容器并启动 

docker run [可选参数] IMAGE [COMMAND][ARG...] 

注:如果没有拉取镜像,创建容器并启动会自动拉取镜像,再创建容器。

常用参数说明:

--name="Name" # 给容器指定一个名字

-d # 后台方式运行容器,并返回容器的id!

-i # 以交互模式运行容器,通过和 -t 一起使用

-t # 给容器重新分配一个终端,通常和 -i 一起使用

-P # 随机端口映射(大写)

-p # 指定端口映射(小结),一般可以有四种写法

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort (常用)

containerPort

(1)创建交互型容器

运行在前台,容器中使用exit命令或者调用docker stop、docker kill命令停止容器。

docker run –it -–name=docker_run centos /bin/bash

i:打开容器的标准输入

t:告诉docker为容器建立一个命令行终端

name:指定容器名称,可以不填(随机),建议根据具体使用功能命名,便于管理

centos:告诉我们使用什么镜像来启动容器

/bin/bash:告诉docker要在容器里面执行此命令

# 创建tomcat01容器

docker run -it --name=tomcat01 tomcat /bin/bash

(2)创建后台型容器

运行在后台,创建后与终端无关,只有调用docker stop、docker kill命令才能使容器停止。

docker run –d –-name=docker_run_b centos /bin/bash

d:使用-d参数,使容器在后台运行

# 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令。

# 创建容器,启动并进入容器。注意:指定TAG,否则又会去下载最新版本

docker run -it centos:centos7.9.2009 /bin/bash 

# 注意地址,已经切换到容器内部了,使用ls查看下容器内部文档结构

ls

注意:这里发现,容器内部和容器外面linux目录一样,这就是我们下的centos镜像,它就是一个小型的服务器。(容器内就是一个小的服务器) 

2.6.2 退出容器

exit  # 容器停止退出回到主机

 注意:这里不能光通过颜色来区分是在镜像内还是镜像外,因为工具不一样,显示的结果也不一样。  ctrl+P +Q # 容器不停止,退出回到主机

注意:按住ctrl和P再按Q

通过查看当前运行的容器:

问:当前正在运行的容器如何进去?

进入容器:docker attach 容器ID  或  docker exec -it 容器ID /bin/bash 

docker attach e3ba7185be17 # 有时会卡住

docker exec -it e3ba7185be17 /bin/bash # 推荐使用

2.6.3 启动容器

docker start 容器id或容器名 		# 启动之前已停止的容器

# 示例

docker start docker_run # 按容器名启动

docker start 43e3fef2266c # 按容器ID启动

docker restart 容器id容器名 # 自动重启容器

默认情况下容器是不重启的,-restart标志会检查容器的退出码来决定容器是否重启。

# 示例

docker restart docker_run # 按容器名自动重启

docker restart 43e3fef2266c # 按容器ID自动重启

docker run –d –restart=always -–name=docker_restart centos /bin/bash

2.6.4 停止容器

docker stop容器id容器名  # 停止当前正在运行的容器

# 示例

docker stop docker_run # 停止容器(按容器名)

docker stop 43e3fef2266c # 停止容器(按容器ID)

 docker kill 容器id容器名  # 强制停止容器

# 示例

docker kill docker_run

docker kill 43e3fef2266c

2.6.5 删除容器

容器终止后,在需要的时候可以重新启动,确定不需要了,可以进行删除操作。

docker rm容器id或容器名
# 示例
docker rm docker_run
docker rm 43e3fef2266c
docker rm -f $(docker ps -a -q) 		# 删除所有容器 
docker ps -a -q|xargs docker rm 		# 删除所有容器

 注意:不能够删除一个正在运行的容器,会报错。需要先停止容器,再删除。

翻译:来自守护进程的错误响应:您不能删除一个正在运行的容器9b5ef816ed04dcbf2e4d336460143343496ee47a8fa979497d121a8b7d165df6。停止集装箱前试图移除或强行移除

一次性删除:docker本身没有提供一次性删除操作,但是可以使用如下命令实现:

 docker rm ‘docker ps –a –q’

-a:标志列出所有容器

-q:标志只列出容器的ID,然后传递给rm命令,依次删除容器。

2.6.6 查看所有运行容器

docker ps [OPTIONS]

# 常用参数说明

-a # 列出当前所有正在运行的容器 + 历史运行过的容器

-l # 显示最近创建的容器

-n=? # 显示最近n个创建的容器,如:docker ps -a -n=1

-q # 静默模式,只显示容器编号。

# 示例:列出当前正在运行的容器

docker ps -a

 

2.7 其他常用命令 

2.7.1 后台启动容器

docker run -d 容器名

# 示例

docker run -d centos:centos7.9.2009 # 启动centos,使用后台方式启动

问题:使用docker ps 查看,发现容器已经退出了!

解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就会自动退出。

比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下,容器启动后,会立即自杀,因为他觉得没有程序了,所以最好的情况是,将你的应用使用前台进程的方式运行启动。

2.7.2 查看日志

docker logs -f -t --tail 容器id

# 例子:我们启动 centos,并编写一段脚本来测试玩玩!最后查看日志

# 自己编写一段shell脚本

docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"

docker ps

# 显示日志

# -t 显示时间戳

# -f 打印最新的日志

# --tail 数字 显示多少条!

docker logs -tf --tail 10 c8530dbbe3b4

2.7.3 查看容器/镜像的元数据

docker inspect 容器id

# 测试

docker inspect c8530dbbe3b4 

2.7.4 进入正在运行的容器

docker exec -it 容器id bashShell 

# -it表示交互方式

docker exec -it mymongo /bin/bash

docker attach 容器id

# 示例

docker attach mymong

区别:

  1. exec 进入容器后开启一个新的终端,可以在里面操作,并且可以启动新的进程
  2. attach 进入容器下在执行的终端,不会启动新的进程

2.7.5 从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 目的主机路径

# 测试

docker cp c8530dbbe3b4:/home/f1 /home 

小结:

         接到上期docker说到,这期发送的是docker的常用指令,包括查看docker状态、启动、关闭docker、镜像拉取、容器启动等等,希望小编的这编文章能帮助到大家更好的掌握docker常用指令。谢谢大家的观看!

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
/* * @Author: LinLong * @LastEditors: LinLong * @Description: 上课进度上传 */ import { ref, onMounted, onUnmounted } from 'vue' import { getItem, setItem } from '@/hooks' import { uselearningProgress } from '@/stores' import { updatedLearningProgress } from '@/apiList/learningProgress' const learningProgressStore = uselearningProgress() //学习进度仓库 const currentProgressFile = ref(null) //当前学习进度文件 const heartbeatTime = 30 * 1000 //30秒 let timer = null //时间函数 export function useClassProgress(onBeforeRouteLeave) { //从仓库获取用户点击的课程->项目->任务->文件 learningProgressStore.$subscribe((mutation, state) => { const { currentProgress } = state // console.log('%c--currentProgress-->', 'background:#18C36E;color:#3F4040;', currentProgress) currentProgressFile.value = { classId: currentProgress.classId, courseId: currentProgress.courseId, courseId_text: currentProgress.courseId_text, projectId: currentProgress.pid == 0 ? currentProgress.id : currentProgress.pid, // projectId: currentProgress.id, taskId: currentProgress.pid == 0 ? null : currentProgress.id, pid_text: currentProgress.pid_text, name: currentProgress.name, file: currentProgress.url, userId: getItem('userInfo').id, } // console.log('%c-----state 学习进度------->', 'background:#18C36E;color:#3F4040;', currentProgress) }) //生命周期页面挂载完毕 onMounted(() => { //接收iframe 异步框架消息 window.addEventListener('message', (e) => { if (e.origin.includes('8013')) { const data = e.data setItem('postMessage', data) // console.log('%c-----监听postMessage子级------->', 'background:#18C36E;color:#3F4040;', JSON.parse(data)) } }) //浏览器tab标签切换或最小化事件设置暂停提交 上课记录 document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') { timer ? clearTimeout(timer) : (timer = null) //清除定时器 } else if (document.visibilityState === 'visible') { timer ? clearTimeout(timer) : (timer = null) //先清除一次定时器 sendMessage() //继续发送学习进度 } }) //发送统计信息至后端 sendMessage() function sendMessage() { console.log('%c---对方水电费水电费水电费->', 'background:#18C36E;color:#3F4040;') timer ? clearTimeout(timer) : (timer = false) //先清除一次定时器 timer = setTimeout(() => { const sendData = { ...getItem('postMessage'), ...currentProgressFile.value, } // console.log('%c------准备发送的信息sendData------>', 'background:#18C36E;color:#3F4040;', sendData) updatedLearningProgress(sendData).then((res) => { if (res.success) sendMessage() }) }, heartbeatTime) //heartbeatTime } }) //生命周期页面销毁之前 onUnmounted(() => { clearTimeout(timer) // //路由离开 // onBeforeRouteLeave(() => { // clearTimeout(timer) // }) }) }
04-20

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序猿张某人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值