summaryrefslogtreecommitdiffstats
path: root/docs/nix/docker.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/nix/docker.txt')
-rw-r--r--docs/nix/docker.txt131
1 files changed, 131 insertions, 0 deletions
diff --git a/docs/nix/docker.txt b/docs/nix/docker.txt
new file mode 100644
index 0000000..6fb77df
--- /dev/null
+++ b/docs/nix/docker.txt
@@ -0,0 +1,131 @@
+Docker intro / quick reference
+==============================
+You might come across docker files supplied with web or even binary exploitation
+challenges. Utilizing them will allow you to recreate a local copy of the
+remote infrastructure to help troubleshoot an attack.
+
+Sections in this doc are for various common situations you might find yourself
+in. It is not necessary to read the whole thing top-to-bottom. Just start in
+the section relevant to you and refer to external docs afterward if needed.
+
+
+
+"Everything in Docker is system-wide - How do I check system status?"
+---------------------------------------------------------------------
+The four main "objects" you might deal with are containers, images, volumes,
+and networks.
+
+ docker ps -a
+ docker images -a
+ docker volume ls
+ docker network ls
+
+With a blank slate, all these lists should be empty - except for networks, which
+shows the default "bridge", "host", and "none" networks.
+
+To clean up:
+
+ docker stop <container-id> # if necessary, for each container
+ docker system prune --all --force # drop unused containers, images, networks
+ docker volume prune --all --force # drop unused volumes
+
+Resources still in-use by a running container are not pruned by the above
+commands.
+
+
+
+"I have a docker-compose.yml file." (or equivalent)
+---------------------------------------------------
+In this case, you can likely skip most manual steps. Everything should happen
+automatically when you attempt to run the services. Probably all you need to
+do is:
+
+ docker compose up --detach --build
+
+To build or pull the image then run a (set of) container(s) in the background.
+If you omit `--detach`, the process will remain in the foreground and logs are
+printed to the terminal. To shutdown:
+
+ docker compose down
+
+Docker compose yaml file reference
+https://docs.docker.com/compose/compose-file/compose-file-v3/
+
+
+
+"I have a Dockerfile only."
+---------------------------
+`cd` to the directory with the Dockerfile and run:
+
+ docker build --tag <name> .
+
+<name> will name the image. Names can be suffixed with `:<version>` if
+desired. Now run a new container from this image in the foreground:
+
+ docker run --rm -it <name> [arguments...]
+
+or the background:
+
+ docker run --rm -d <name> [arguments...]
+
+Useful command-line options (specify before <name>):
+
+ -p hostport:containerport # expose port
+ -v hostpath:containerpath # mount fs volume
+ --rm # delete container on exit
+ -i # be interactive
+ -t # create TTY
+ -d # detach, run in background
+
+
+
+"I have nothing - I want to create a Dockerfile."
+-------------------------------------------------
+The Dockerfile defines the recipe for building images, which themselves are the
+baseline for spawning containers. Here's a stripped down skeleton for a basic
+debian-based image:
+
+ FROM debian:latest
+ ENV DEBIAN_FRONTEND=noninteractive
+ RUN apt install --yes \
+ package-one \
+ package-two \
+ package-three
+
+ COPY . /
+ CMD ["/bin/bash", "-c", "echo", "Hello world"]
+
+When building this sample, files from the current working directory are copied
+to "/" in the image, the listed packages are installed, and when run
+"echo Hello world" is executed in bash.
+
+Dockerfile reference
+https://docs.docker.com/engine/reference/builder/
+
+
+
+"I want to get a shell / run new command in existing container."
+----------------------------------------------------------------
+Get the container name or ID with:
+
+ docker ps -a
+
+then:
+
+ docker exec -it <container-id> /bin/bash
+
+Bash is probably preferred, but some distros don't include it and you'll need to
+start /bin/sh instead.
+
+
+
+"I want to copy a file to/from container and my host."
+------------------------------------------------------
+Get the container ID with:
+
+ docker ps -a
+
+then:
+
+ docker cp <container-id>:<src_path> <dest_path>
+ docker cp <src_path> <container-id>:<dest_path>