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基本使用方法的更多相关文章

  1. 【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  2. 使用Docker Toolbox 创建Docker虚拟机的方法-注意正确使用本地文件 file:参数的路径名

    使用Docker Toolbox 创建v1.12.6版的Docker虚拟机的方法, 一定要注意正确使用本地文件 file:// 参数的路径名, 之前尝试创建过多次,一直都没有成功过, 无法使用 fil ...

  3. docker网络配置方法总结

    docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...

  4. docker创建image方法以及常用指令介绍

    docker -help    # 显示帮助 docker COMMAND -help    # 帮助信息更详细 docker start “容器名称”    # 启动一个或多个容器 docker s ...

  5. Docker修改hosts方法

    方法一: 直接进入容器中修改/etc/hosts 缺点:重启容器后,增加的内容会丢失 方法二: 制作镜像的时候,直接修改. 限制: 需要是root用户,需要在容器中安装sudo 增大了镜像大小 方法三 ...

  6. Docker3-Dockerfile创建镜像的方法(推荐docker file这种方法)

    一.镜像制作的方法 1.本地导入导出镜像 请参考:Docker 架构原理及简单使用 导出:docker save nginx >/tmp/nginx.tar.gz 导入:docker load ...

  7. Windows7 安装docker工具的方法

    1.参考官方文档 https://docs.docker.com/toolbox/toolbox_install_windows/ 注意:因为我的电脑是windows10 家庭版,所以,无法使用 Do ...

  8. docker进入容器方法

    更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中. $ wget -P ~ https://github.com/yeasy/docker_practice/ra ...

  9. docker 通过commit方法创建镜像(Tomcat+Java+Scala)

    前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像: 想了想干脆创建一个Java+Scala+To ...

  10. docke镜像上传到dockerhub仓库和阿里云docker仓库的方法

    操作指南   1.  登录阿里云docker registry: $ sudo docker login --username=linjiaxin897591495 registry.cn-hangz ...

随机推荐

  1. Kafka - [02] Kafka单机版部署

    Kafka是一个分布式的流处理平台. kafka主要是作为一个分布式的.可分区的.具有副本数的日志服务系性.高容错性.访问速度快.分布式等特性:具有高水平扩展 主要应用场景是:日志收集系统和分布式发布 ...

  2. AGC002E题解

    简要题意 桌上有 \(n\) 堆糖果,第 \(i\) 堆糖果有 \(a_i\) 个糖.两人在玩游戏,轮流进行,每次进行下列两个操作中的一个: 将当前最大的那堆糖果全部吃完: 将每堆糖果吃掉一个: 吃完 ...

  3. 【面试题】实现 queryParse 函数,完成解析 URL 参数的功能

    问题:实现 queryParse 函数,完成解析 URL 参数的功能 /** * 问题:实现 queryParse 函数,完成解析 URL 参数的功能 * * 用法: * ```js * const ...

  4. 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 ...

  5. elmentui input number 数字验证

    问题 需求是文本框只能输入数字.解决方案:使用正则 ,如下使用了 element-ui el-input 组件 整数 文本框只能输入整数 <el-input v-model='count' on ...

  6. Django实战项目-学习任务系统-用户管理

    接着上期代码框架,开发第6个功能,用户管理,查看用户信息和学生用户属性值,尤其是总积分值,还可以查看积分流水明细,完成任务奖励积分,兑换物品消耗积分. 第一步:编写第6个功能-用户管理 1,编辑模型文 ...

  7. 响应式编程之Project Reactor

    Project Reactor作为响应式编程范式的核心实现框架,严格遵循Reactive Streams规范体系,其架构设计完整包含了规范定义的四个核心组件:Publisher(数据源).Subscr ...

  8. Lambda表达式的省略规则、Lambda和匿名内部类的区别--java进阶day03

    1.省略规则 2.流程讲解 主方法中调用useStringhandler,该方法的形参是接口,所以我们要给实现类对象,这里我们使用匿名内部类 use...方法进栈,形参也是变量,接收到匿名内部类(如下 ...

  9. 请运行命令来卸载Oracle主目录

    卸载Oracle数据库碰见的一个不一样的操作,留爪. 正常点的软件卸载直接点卸载即可, Oracle 卸载非要来点不一样警告, 如图: 注意:不要被图里的斜杠符号忽略了,准确的应该是: # 注意斜杠 ...

  10. SpringMvc怎么样把数据带给页面

    例子. /** * SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面 * * 1).可以在方法处传入Map.或者Model或者ModelMap. * 给 ...