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