# THM : Intro to Docker

<figure><img src="https://3821730555-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCJMPuCQbMwIYqUJNCa28%2Fuploads%2FnMhdQiYARCKsPPtslaHp%2Fdocker_image.png?alt=media&#x26;token=46382dbe-b9ea-4cdc-ac2a-01cf42e43ca2" alt=""><figcaption></figcaption></figure>

This guide walks you through the "Intro to Docker" room on TryHackMe, covering Docker basics, useful commands, and practical tasks for container management and orchestration. Whether you're new to Docker or refreshing your skills, this overview will help you gain a solid foundation in containerization.

***

#### Task 1: Introduction

No specific answers are needed for this task. If you've completed the Linux Fundamentals module on TryHackMe, you're well-prepared for this room.

***

#### Task 2: Basic Docker Syntax

1. **Pull an Image**: To pull a Docker image from Docker Hub, use:

   ```bash
   docker pull <image_name>
   ```
2. **List All Images**: To list all Docker images on your system, use:

   ```bash
   docker image ls
   ```
3. **Example Command**: To pull a specific image:

   ```bash
   docker pull tryhackme
   ```

   To pull a specific tag of an image:

   ```bash
   docker pull tryhackme:1337
   ```

***

#### Task 3: Running Your First Container

1. **Run a Container Interactively**:

   ```bash
   docker run -it <image_name>
   ```
2. **Run in Detached Mode**:

   ```bash
   docker run -d <image_name>
   ```
3. **Bind a Web Server to Port 80**:

   ```bash
   docker run -p 80:80 <image_name>
   ```
4. **List Running Containers**:

   ```bash
   docker ps
   ```
5. **List All Containers (Including Stopped)**:

   ```bash
   docker ps -a
   ```

***

#### Task 4: Intro to Dockerfiles

1. **Specify Base Image**:

   ```dockerfile
   FROM <base_image>
   ```
2. **Run a Command**:

   ```dockerfile
   RUN <command>
   ```
3. **Build an Image from a Dockerfile**:

   ```bash
   docker build -t <image_name> .
   ```

***

#### Task 5: Intro to Docker Compose

1. **Start Services with Docker Compose**:

   ```bash
   docker-compose up
   ```
2. **Stop and Remove Services**:

   ```bash
   docker-compose down
   ```
3. **Docker Compose File**: The configuration file for Docker Compose is named `docker-compose.yml`.

***

#### Task 6: Docker Socket and IPC

1. **IPC (Interprocess Communication)**: Docker enables communication between processes in containers.
2. **Docker Server Comparison**: The Docker Server’s functionality can be compared to an API for managing and interacting with containers.

***

#### Task 7: Practical

1. **Identify Running Container**: Connect to the machine to find the container name, which is typically listed as "CloudIsland."
2. **Run a Web Server**:

   ```bash
   docker run -d -p 80:80 webserver
   ```

   After launching the web server, visit the provided URL to retrieve the flag.
