# Concepts de Base

## 1. **Exercice A** <a href="#exercice-a" id="exercice-a"></a>

{% hint style="info" %}

* Utilisez une image Ubuntu pour créer un conteneur Docker.
* Exécutez une commande dans le conteneur pour afficher le message "Hello, Docker".
  {% endhint %}

{% stepper %}
{% step %}

```bash
docker run ubuntu echo "Hello, Docker"
```

```
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
ff65ddf9395b: Pull complete
Digest: sha256:99c35190e22d294cdace2783ac55effc69d32896daaa265f0bbedbcde4fbe3e5
Status: Downloaded newer image for ubuntu:latest
Hello, Docker
```

{% endstep %}
{% endstepper %}

***

## **2. Exercice B** <a href="#exercice-b" id="exercice-b"></a>

{% hint style="info" %}

* Créez un fichier `Dockerfile` contenant les instructions nécessaires pour construire une image Docker personnalisée.
* L'image doit être basée sur Ubuntu et inclure un script `Python` qui affiche la date et l'heure actuelles au démarrage.

```typescript
from datetime import datetime
now = datetime.now()
print("Date et heure actuelles :", now)
```

* Construisez l'image à l'aide de la commande `docker build` et exécutez un conteneur basé sur cette image.
  {% endhint %}

{% stepper %}
{% step %}

```bash
nano main.py
```

```javascript
from datetime import datetime
now = datetime.now()
print("Date et heure actuelles :", now)
```

{% endstep %}

{% step %}

```bash
nano Dockerfile
```

```docker
FROM alpine
RUN apk update && apk add python3
COPY . /app
WORKDIR /app
CMD ["python3","main.py"]
```

{% endstep %}

{% step %}

```bash
docker image build -t exercice-b:v0.1 .
```

```
[+] Building 0.1s (9/9) FINISHED                                                                                                                                                                  docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 134B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                                                                            0.0s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => [1/4] FROM docker.io/library/alpine:latest                                                                                                                                                              0.0s
 => [internal] load build context                                                                                                                                                                           0.0s
 => => transferring context: 160B                                                                                                                                                                           0.0s
 => CACHED [2/4] RUN apk update && apk add python3                                                                                                                                                          0.0s
 => [3/4] COPY . /app                                                                                                                                                                                       0.0s
 => [4/4] WORKDIR /app                                                                                                                                                                                      0.0s
 => exporting to image                                                                                                                                                                                      0.0s
 => => exporting layers                                                                                                                                                                                     0.0s
 => => writing image sha256:e4642afea15d72f269a711c273b531903dfb0f48e2591f4520e506bd4ff32f3d                                                                                                                0.0s
 => => naming to docker.io/library/exercice-b:v0.2  
```

{% endstep %}

{% step %}

```bash
docker container run exercice-b:v0.1
```

```
Date et heure actuelles : 2024-11-08 15:30:47.415451
```

{% endstep %}
{% endstepper %}

***

## 3. Exercice C <a href="#exercice-c" id="exercice-c"></a>

{% hint style="info" %}

* Créez un fichier `docker-compose.yml` contenant les instructions pour exécuter deux conteneurs : un conteneur `phpmyadmin` et un conteneur `MySQL`.
* Configurez le conteneur `phpmyadmin` pour qu'il soit accessible sur le port 80 de votre machine hôte.
* Configurez le conteneur `phpmyadmin` avec un nom d'utilisateur et un mot de passe personnalisés.
* Créez un base de données nommée `db_exercice` avec comme utilisateur pour l'administrer `cpnv` (mot de passe : `secret`)
* Le mot de passe de l’utilisateur `root` du SGBD est `password`
* Utilisez un volume pour stocker les bases de données de `MySQL`.
* Exécutez les conteneurs à l'aide de la commande `docker-compose up` et vérifiez qu'ils fonctionnent correctement.
  {% endhint %}

```bash
nano docker-compose.yml
```

```docker
services:
  db:
    image: mysql:5.7
    container_name: mysql_db
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: db_exercice
      MYSQL_USER: cpnv
      MYSQL_PASSWORD: secret

  phpmyadmin:
    image: phpmyadmin
    container_name: phpmyadmin
    depends_on:
      - db
    ports:
      - "80:80"
    restart: always
    environment:
      PMA_HOST: db
      PMA_PORT: 3306

volumes:
  db_data:
```

```bash
docker-compose up -d
```

<figure><img src="https://3132389590-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTgr1ZiAmgAVmZcVjYedk%2Fuploads%2F4IJSZJ0qX0rXMWZnEKDh%2Fimage.png?alt=media&#x26;token=8f544dae-545d-458b-8dd9-30481e309c89" alt=""><figcaption></figcaption></figure>
