Docker基本使用方法

Docker 的基本使用方法

最近在尝试复现研究CVE,docker太方便了,学了下基本的使用方法,怕忘记,记于此处

1. 容器与镜像

镜像是一堆只读的文件。
容器 = 镜像 + 读写层
运行态的容器 = 镜像 + 读写层 + 隔离的进程空间(包含进程)
我们下载镜像到本地,使用镜像创建容器,然后启动容器,然后在容器中执行命令。
这里可以直接让容器返回shell,直接在shell中操作。
image

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
posted @ 2022-03-16 21:19  AikNr  阅读(105)  评论(0编辑  收藏  举报