Docker基本使用方法
Docker 的基本使用方法
最近在尝试复现研究CVE,docker太方便了,学了下基本的使用方法,怕忘记,记于此处
1. 容器与镜像
镜像是一堆只读的文件。
容器 = 镜像 + 读写层
运行态的容器 = 镜像 + 读写层 + 隔离的进程空间(包含进程)
我们下载镜像到本地,使用镜像创建容器,然后启动容器,然后在容器中执行命令。
这里可以直接让容器返回shell,直接在shell中操作。

2. 容器的使用流程
2.0 Tips
- 对容器的指定可以使用开头几位不和别的容器重合的字母
container1: 01234abcd
container2: 0jklasdzx
# 这个时候,指定container1可以直接用 01, container2可以直接用 0j
# 如 docker exec -ti 01 /bin/bash
- 如果只有一个容器,只需要指定开头第一个字符即可,省了好多鼠标复制的麻烦hhh
- 如
docker exec -ti 0 /bin/bash
2.1 查看情况
- 使用容器前自然要先看看有哪些容器啦
docker images # 查看拥有哪些镜像
docker ps # 列出正在运行的容器
docker ps -a # 列出所有容器
2.2 创建容器
- 使用镜像生成容器。
- 一开始我们拥有的是镜像文件,镜像文件可以理解为静态的模板,我们用模板创造出可以用的环境,用完环境以后把环境删掉,过程中模板并没有运行。有点像我们会收藏很多个神奇宝贝球(镜像),每个神奇宝贝球都可以放出无限多个特定神奇宝贝(容器)的感觉。
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create MyImage # 使用MyImage镜像创建容器
2.3 开始、关闭、删除容器
- start将一个容器的状态从 CREATED 变成 UP
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start 12389zxcn1ha # 使用CONTAINER ID启动
docker start MyContainer # 使用容器名字启动
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker rm CONTAINER
docker rm $(docker ps -a -q) # 删除所有停止的容器
docker image rm MyImageID # 删除ImageID为 MyImageID 的镜像
2.4 在容器中执行命令
- 容器需要是UP状态,即正在运行。
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -ti my_container sh -c "echo a && echo b"
docker exec -ti my_container sh -c "/bin/bash" # 执行sh命令,sh的参数需要引号
docker exec -ti my_container /bin/bash # 直接运行bash程序
-i, --interactive Keep STDIN open even if not attached # 可交互性的
-t, --tty Allocate a pseudo-TTY # 分配一个终端
2.5 创建容器 + 执行命令
- run的目标是镜像,直接从镜像创建并运行容器。
- run = create + start + exec
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 镜像附带了我们所需的环境,但是一开机并不会运行,我们希望开启镜像以后直接就可以享受服务。因此,有一些镜像制作时会加入开机执行命令,会在[COMMAND]参数缺省的时候调用,比如
java sample.jar,用于开启sample的java服务,开机就会先跑这个命令。我们可以使用docker ps看到CMD参数。 - 这里有个很坑的地方,你开启镜像的时候带了一个命令,他就会把原来的顶掉。比如你想返回一个bash,使用了/bin/bash命令,那它就不会开启原先预定开启的Java服务,需要你手动开启。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a115c1a4a69 vulhub/spring-cloud-function:3.2.2 "java -Djava.secur..." 2 minutes ago Up 4 seconds 0.0.0.0:5005->5005/tcp, 0.0.0.0:8080->8080/tcp cve-2022-22963-spring-1
Docker基本使用方法的更多相关文章
- 【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )
系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...
- 使用Docker Toolbox 创建Docker虚拟机的方法-注意正确使用本地文件 file:参数的路径名
使用Docker Toolbox 创建v1.12.6版的Docker虚拟机的方法, 一定要注意正确使用本地文件 file:// 参数的路径名, 之前尝试创建过多次,一直都没有成功过, 无法使用 fil ...
- docker网络配置方法总结
docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...
- docker创建image方法以及常用指令介绍
docker -help # 显示帮助 docker COMMAND -help # 帮助信息更详细 docker start “容器名称” # 启动一个或多个容器 docker s ...
- Docker修改hosts方法
方法一: 直接进入容器中修改/etc/hosts 缺点:重启容器后,增加的内容会丢失 方法二: 制作镜像的时候,直接修改. 限制: 需要是root用户,需要在容器中安装sudo 增大了镜像大小 方法三 ...
- Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)
一.镜像制作的方法 1.本地导入导出镜像 请参考:Docker 架构原理及简单使用 导出:docker save nginx >/tmp/nginx.tar.gz 导入:docker load ...
- Windows7 安装docker工具的方法
1.参考官方文档 https://docs.docker.com/toolbox/toolbox_install_windows/ 注意:因为我的电脑是windows10 家庭版,所以,无法使用 Do ...
- docker进入容器方法
更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中. $ wget -P ~ https://github.com/yeasy/docker_practice/ra ...
- docker 通过commit方法创建镜像(Tomcat+Java+Scala)
前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像: 想了想干脆创建一个Java+Scala+To ...
- docke镜像上传到dockerhub仓库和阿里云docker仓库的方法
操作指南 1. 登录阿里云docker registry: $ sudo docker login --username=linjiaxin897591495 registry.cn-hangz ...
随机推荐
- Kafka - [02] Kafka单机版部署
Kafka是一个分布式的流处理平台. kafka主要是作为一个分布式的.可分区的.具有副本数的日志服务系性.高容错性.访问速度快.分布式等特性:具有高水平扩展 主要应用场景是:日志收集系统和分布式发布 ...
- AGC002E题解
简要题意 桌上有 \(n\) 堆糖果,第 \(i\) 堆糖果有 \(a_i\) 个糖.两人在玩游戏,轮流进行,每次进行下列两个操作中的一个: 将当前最大的那堆糖果全部吃完: 将每堆糖果吃掉一个: 吃完 ...
- 【面试题】实现 queryParse 函数,完成解析 URL 参数的功能
问题:实现 queryParse 函数,完成解析 URL 参数的功能 /** * 问题:实现 queryParse 函数,完成解析 URL 参数的功能 * * 用法: * ```js * const ...
- git push解决 error src refspec master does not match anyerror
前言 git push origin master git push 时报错: error: src refspec master does not match anyerror: failed to ...
- elmentui input number 数字验证
问题 需求是文本框只能输入数字.解决方案:使用正则 ,如下使用了 element-ui el-input 组件 整数 文本框只能输入整数 <el-input v-model='count' on ...
- Django实战项目-学习任务系统-用户管理
接着上期代码框架,开发第6个功能,用户管理,查看用户信息和学生用户属性值,尤其是总积分值,还可以查看积分流水明细,完成任务奖励积分,兑换物品消耗积分. 第一步:编写第6个功能-用户管理 1,编辑模型文 ...
- 响应式编程之Project Reactor
Project Reactor作为响应式编程范式的核心实现框架,严格遵循Reactive Streams规范体系,其架构设计完整包含了规范定义的四个核心组件:Publisher(数据源).Subscr ...
- Lambda表达式的省略规则、Lambda和匿名内部类的区别--java进阶day03
1.省略规则 2.流程讲解 主方法中调用useStringhandler,该方法的形参是接口,所以我们要给实现类对象,这里我们使用匿名内部类 use...方法进栈,形参也是变量,接收到匿名内部类(如下 ...
- 请运行命令来卸载Oracle主目录
卸载Oracle数据库碰见的一个不一样的操作,留爪. 正常点的软件卸载直接点卸载即可, Oracle 卸载非要来点不一样警告, 如图: 注意:不要被图里的斜杠符号忽略了,准确的应该是: # 注意斜杠 ...
- SpringMvc怎么样把数据带给页面
例子. /** * SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面 * * 1).可以在方法处传入Map.或者Model或者ModelMap. * 给 ...