docker初识

大致概念

​ 我们在终端直接输入指令进行push pull run等操作的叫做Docker客户端,而处理这些指令并进行资源分配(负责管理容器的生命周期、构建镜像、分发镜像等任务)的则是Docker daemon,中文中会将其称为Docker的守护进程使用命令sudo systemctl start docker来启动守护进程,才可以成功操作。

​ 在Docker中有两个比较关键的概念:容器与镜像。若要形象地理解二者,可将镜像理解为一个类,而容器则是一个镜像的实例。镜像是只读的,其中决定了生成容器的操作系统环境与应用程序环境。同一个镜像生成的两个容器间有独立的进程与文件系统。

​ 生成一个容器并进行调试的大致操作流程是:

1.获取镜像

​ 有两种方式我们能得到一个镜像。第一种是:docker build使用dockerfile进行构建,而第二种便是使用docker pull (docker pull [OPTIONS] NAME[:TAG|@DIGEST])比如:docker pull roderickchan/debug_pwn_env:16.04-2.23-0ubuntu11.3-20240412

2.运行容器

​ 使用docker run指令来运行容器。这里需要指出,在命令行中镜像的名字由id与tag|@DIGEST两部分,二者由冒号相连。我举个例子:roderickchan/debug_pwn_env:16.04-2.23-0ubuntu11.3-20240412。特别的,有docker run -it roderickchan/debug_pwn_env:16.04-2.23-0ubuntu11.3-20240412 /bin/zsh即交互式(i)运行一个容器,并分配一个伪终端(t),新终端由容器依赖的镜像支持的终端与命令行参数指定的终端共同决定。

3.挂载共享

docker run -it \
  -v /mnt/d/from_0/shared:/host_d \
  roderickchan/debug_pwn_env:16.04-2.23-0ubuntu11.3-20240412 /bin/bash