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. 读论文-基于Python的协同过滤算法的研究与应用实现

    前言 今天读的论文为一篇名为<基于Python的协同过滤算法的研究与应用实现>的论文,文章是在2019年9月发表于<电脑知识与技术>的一篇期刊论文. 摘要 随着科学技术的快速发 ...

  2. [tldr]windows使用scoop安装make工具辅助程序编译

    make是一个好用的GNU工具,用来辅助我们进行自动化的程序编译,只需要一个Makefile文件,即可实现一行指令自动编译 scoop是windows的一个包管理工具 安装 scoop bucket ...

  3. 池化层 Pooling Layer

    写在前面:人生就是努力.搞不懂.躺平,循环. 文章结构 池化层的相对位置 在多通道任务中,池化层和卷积层的不同 重要的参数stride 与 kernel_size 大小的相对关系决定3种池化层 参数 ...

  4. MySQL错误码大全

    B.1. 服务器错误代码和消息服务器错误信息来自下述源文件:· 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串, ...

  5. PVE虚拟平台常用简明操作,三分钟搞定虚拟机更换安装配置

    Proxmox Virtual Environment是一个基于QEMU/KVM和LXC的开源服务器虚拟化管理解决方案,本文简称PVE,与之相类似的虚拟化平台是VMWARE的ESXi虚拟平台,相较于商 ...

  6. DFS 2025/1/15

    DFS & DFS 剪枝优化 Basic 01 先搜节点少的分支 如果搜进来一个大分支而答案不在此分支就会浪费大量时间 02 可行性剪枝 已经白扯了就 return 判断当前是否合法 03 最 ...

  7. Supergateway:MCP服务器的远程调试与集成工具

    Supergateway 是一款专为 MCP(Model Context Protocol)服务器设计的远程调试与集成工具,通过 SSE(Server-Sent Events)或 WebSocket( ...

  8. 【SpringMVC】概述

    SpringMVC 概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 MV ...

  9. 线性探测法的查找函数 作者 DS课程组 单位 浙江大学

    虽然但是,我真的讨厌c语言这样一大坨typedef命名来命名去的,很多时候其实我们会写,但是看不懂这个存储结构 函数的接口定义 Position Find( HashTable H, ElementT ...

  10. @Transactional的属性

    @Transactional的属性: isolation-Isolation:事务的隔离级别(与并发相关) noRollbackFor-Class[]:那些异常,事务可以不回滚 noRollbackF ...