web-dev-qa-db-fra.com

Comment créer une nouvelle image Docker à partir d'un conteneur en cours d'exécution sur Amazon?

Voici mon problème:

J'ai une tâche exécutant une image de docker sur Amazon ECS mais je voudrais créer une nouvelle image de docker à partir de l'instance en cours d'exécution du conteneur.

Je vois l'identifiant de l'instance sur Amazon Ecs, j'ai fait une AMI mais je voudrais faire une nouvelle image docker que je peux extraire d'Amazon.

Des idées ?

Cordialement et merci

11
user462794

Outre la réponse fournie par @Ben Whaley, je vous suggère personnellement d'utiliser les API Docker. Pour utiliser les API Docker, vous devez configurez le port du démon docker et la procédure est expliquée ici configuration du port du démon docker

Permet d'exécuter un conteneur en utilisant une image Ubuntu de base et de créer un dossier à l'intérieur du conteneur :

#docker run -it ubuntu:14.04 /bin/bash
root@58246867493d:/# 
root@58246867493d:/# cd /root
root@58246867493d:~# ls
root@58246867493d:~# mkdir TEST_DIR
root@58246867493d:~# exit

Statut du conteneur sorti:

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
58246867493d        ubuntu:14.04        "/bin/bash"         2 minutes ago       Exited (127) 57 seconds ago                       hungry_turing

Fichier JSON qui est une entrée pour valider un conteneur:

#cat container_create.json 
{
  "AttachStdin": true,
  "AttachStdout": true,
  "AttachStderr": true,
  "ExposedPorts": {
    "property1": {},
    "property2": {}
  },
  "Tty": true,
  "OpenStdin": true,
  "StdinOnce": true,
  "Cmd": null,
  "Image": "ubuntu:14.04",
  "Volumes": {
    "additionalProperties": {}
  },
  "Labels": {
    "property1": "string",
    "property2": "string"
  }
}

API pour valider un conteneur

# curl -X POST http://127.0.0.1:6000/commit?container=58246867493d\&repo=ubuntu\&tag=15.0 -d @container_create.json --header "Content-Type: application/json" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   593  100    81  100   512    175   1106 --:--:-- --:--:-- --:--:--  1108
{
  "Id": "sha256:acac1f3733b2240b01e335642d2867585e5933b18de2264315f9b07814de113a"
}

L'ID généré est le nouvel ID d'image généré à partir de la validation d'un conteneur.

Obtenir des images de docker

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
**ubuntu              15.0                acac1f3733b2        10 seconds ago      188MB**
ubuntu              14.04               132b7427a3b4        10 hours ago        188MB

Exécutez l'image nouvellement créée pour voir les modifications validées dans le conteneur précédent.

# docker run -it ubuntu:15.0 /bin/bash
root@3a48af5eaec9:/# cd /root/
root@3a48af5eaec9:~# ls
TEST_DIR
root@3a48af5eaec9:~# exit

Pour construire une image à partir d'un fichier Docker, comment construire une image à l'aide de l'API Docker

Pour plus d'informations sur les API Docker , reportez-vous ici.

3
Here_2_learn

Pour créer une image à partir d'un conteneur, exécutez la commande ci-dessous:

docker commit hw_container hw_image

16
Renato Coutinho

Tu peux courir docker commit ( docs ) pour enregistrer le conteneur dans une image, puis envoyez cette image avec une nouvelle balise dans le registre.

4
Ben Whaley

Cela peut être facilement fait en utilisant "docker commit".

Disons que vous avez besoin d'une image, basée sur la dernière version de NGINX, avec PHP, build-essential et nano installés. Je vais vous guider à travers le processus d'extraction de l'image, d'exécution du conteneur, d'accès au conteneur, d'ajout du logiciel et de validation des modifications dans une nouvelle image qui peut ensuite être facilement utilisée comme base pour vos conteneurs de développement.

Tirer l'image et exécuter le conteneur:

Sudo docker pull nginx
Sudo docker run  -it --name nginx-template-base -p 8080:80 nginx

Modification du conteneur:

apt-get install nano
​apt-get install php5

Validez les modifications:

Sudo docker commit CONTAINER_ID nginx-template

Le modèle nouvellement créé est prêt et vous pouvez l'exécuter en utilisant:

Sudo docker run -it --name nginx-dev -p 8080:80 nginx-template
0