Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:docker1:drf02 [2020/06/26 11:52] adminelearning:workbooks:docker1:drf02 [2021/12/29 10:32] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
  
-Version : **2020.02** - Consulter le ChangeLog en fin de module+Version : **2022.01**
  
 Dernière mise-à-jour : ~~LASTMOD~~ Dernière mise-à-jour : ~~LASTMOD~~
  
-======DOF103 - Gestion des Volumes, du Réseau et des Ressources======+======DOF103 - Gérer les Images Docker======
  
 =====Contenu du Module===== =====Contenu du Module=====
  
-  * **DOF103 - Gestion des Volumes, du Réseau et des Ressources** +  * **DOF103 - Gérer les Images Docker** 
-    * LAB #Gestion des Volumes +    * Contenu du Module 
-      * Gestion Automatique par Docker +    * LAB #Re-créer une image officielle docker 
-      * Gestion Manuelle d'un Volume +      * 1.1 - Utilisation d'un Dockerfile 
-    LAB #7 Gestion du Réseau +      1.2 FROM 
-      * L'Approche Réseau Docker +      * 1.3 - RUN 
-        Bridge +      1.4 - ENV 
-        None +      1.5 - VOLUME 
-        Liens +      1.6 - COPY 
-    LAB #8 Superviser les Conteneurs +      1.7 ENTRYPOINT 
-      * Les Journaux +      * 1.8 - EXPOSE 
-      * Les Processus +      * 1.9 - CMD 
-      * L'Activité en Continu +      * 1.10 - Autres Commandes 
-    * LAB #Gestion des Ressources+    * LAB #2 - Créer un Dockerfile 
 +      * 2.1 - Création et test du script 
 +      * 2.2 Bonnes Pratiques liées au Cache
  
-=====LAB #Gestion des Volumes=====+=====LAB #Re-créer une image officielle docker=====
  
-Lancez un conteneur à partir de la dernière image :+====1.1 - Utilisation d'un Dockerfile==== 
 + 
 +Bien que la compilation des images soient assuré par Docker Hub, il est tout à fait possible de compiler une image "officielle" à partir d'un Dockerfile :
  
 <code> <code>
-root@debian9:~/mongodb# docker run -d --name mongo2 i2tch/mongodb2 +root@debian9:~# mkdir mongodb 
-e91a055283f4d67cbd91d11bb3faa6f67925893cb18f9cc25023e72e0f7ed85a+root@debian9:~# cd mongodb/ 
 +root@debian9:~/mongodb# touch Dockerfile docker-entrypoint.sh
 </code> </code>
  
-====Gestion Automatique de Volumes par Docker====+Le Docker file contient les instructions nécessaires pour la contruction de l'image :
  
-Vérifiez que le processus est bien démarré dans le conteneur :+<file txt Dockerfile> 
 +FROM ubuntu:bionic
  
-<code> +add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added 
-root@debian9:~docker ps +RUN groupadd -r mongodb && useradd -r -g mongodb mongodb
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES +
-b9773e4aa06d        i2tch/mongodb2      "docker-entrypoint..."   7 hours ago         Up About a minute   27017/tcp           mongo2 +
-</code>+
  
-Identifiez ensuite le point de montage du répertoire **/data/db*du conteneur :+RUN set -eux; \ 
 + apt-get update; \ 
 + apt-get install -y --no-install-recommends \ 
 + ca-certificates \ 
 + jq \ 
 + numactl \ 
 + ; \ 
 + if ! command -v ps > /dev/null; then \ 
 + apt-get install -y --no-install-recommends procps; \ 
 + fi; \ 
 + rm -rf /var/lib/apt/lists/*
  
-<code> +# grab gosu for easy step-down from root (https://github.com/tianon/gosu/releases) 
-root@debian9:~# docker inspect mongo2+ENV GOSU_VERSION 1.11 
 +# grab "js-yaml" for parsing mongod's YAML config files (https://github.com/nodeca/js-yaml/releases) 
 +ENV JSYAML_VERSION 3.13.0 
 + 
 +RUN set -ex; \ 
 +
 + apt-get update; \ 
 + apt-get install -y --no-install-recommends \ 
 + wget \ 
 + ; \ 
 + if ! command -v gpg > /dev/null; then \ 
 + apt-get install -y --no-install-recommends gnupg dirmngr; \ 
 + fi; \ 
 + rm -rf /var/lib/apt/lists/*;
 +
 + dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')";
 + wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch";
 + wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc";
 + export GNUPGHOME="$(mktemp -d)"; \ 
 + gpg --batch --keyserver pgp.mit.edu --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4;
 + # gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu;
 + command -v gpgconf && gpgconf --kill all || :; \ 
 + rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc;
 + chmod +x /usr/local/bin/gosu;
 + gosu --version; \ 
 + gosu nobody true; \ 
 +
 + wget -O /js-yaml.js "https://github.com/nodeca/js-yaml/raw/${JSYAML_VERSION}/dist/js-yaml.js";
 +# TODO some sort of download verification here 
 +
 + apt-get purge -y --auto-remove wget 
 + 
 +RUN mkdir /docker-entrypoint-initdb.d 
 + 
 +ENV GPG_KEYS E162F504A20CDF15827F718D4B7C549A058F8B6B 
 +RUN set -ex; \ 
 + export GNUPGHOME="$(mktemp -d)"; \ 
 + for key in $GPG_KEYS; do \ 
 + gpg --batch --keyserver pgp.mit.edu --recv-keys "$key";
 + done; \ 
 + gpg --batch --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg;
 + command -v gpgconf && gpgconf --kill all || :; \ 
 + rm -r "$GNUPGHOME";
 + apt-key list 
 + 
 +# Allow build-time overrides (eg. to build image with MongoDB Enterprise version) 
 +# Options for MONGO_PACKAGE: mongodb-org OR mongodb-enterprise 
 +# Options for MONGO_REPO: repo.mongodb.org OR repo.mongodb.com 
 +# Example: docker build --build-arg MONGO_PACKAGE=mongodb-enterprise --build-arg MONGO_REPO=repo.mongodb.com . 
 +ARG MONGO_PACKAGE=mongodb-org-unstable 
 +ARG MONGO_REPO=repo.mongodb.org 
 +ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO} 
 + 
 +ENV MONGO_MAJOR 4.1 
 +ENV MONGO_VERSION 4.1.9 
 +# bashbrew-architectures:amd64 arm64v8 s390x 
 +RUN echo "deb http://$MONGO_REPO/apt/ubuntu bionic/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR multiverse" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list" 
 + 
 +RUN set -x \ 
 + && apt-get update \ 
 + && apt-get install -y \ 
 + ${MONGO_PACKAGE}=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-server=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-shell=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-mongos=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-tools=$MONGO_VERSION \ 
 + && rm -rf /var/lib/apt/lists/* \ 
 + && rm -rf /var/lib/mongodb \ 
 + && mv /etc/mongod.conf /etc/mongod.conf.orig 
 + 
 +RUN mkdir -p /data/db /data/configdb \ 
 + && chown -R mongodb:mongodb /data/db /data/configdb 
 +VOLUME /data/db /data/configdb 
 + 
 +COPY docker-entrypoint.sh /usr/local/bin/ 
 +ENTRYPOINT ["docker-entrypoint.sh"
 + 
 +EXPOSE 27017 
 +CMD ["mongod"
 +</file> 
 + 
 +Le fichier docker-entrypoint.sh sert à lancer le serveur mongodb dans le conteneur : 
 + 
 +<file txt docker-entrypoint.sh> 
 +#!/bin/bash 
 +set -Eeuo pipefail 
 + 
 +if [ "${1:0:1}" = '-' ]; then 
 + set -- mongod "$@" 
 +fi 
 + 
 +originalArgOne="$1" 
 + 
 +# allow the container to be started with `--user` 
 +# all mongo* commands should be dropped to the correct user 
 +if [[ "$originalArgOne" == mongo* ]] && [ "$(id -u)" = '0' ]; then 
 + if [ "$originalArgOne" = 'mongod' ]; then 
 + find /data/configdb /data/db \! -user mongodb -exec chown mongodb '{}'
 + fi 
 + 
 + # make sure we can write to stdout and stderr as "mongodb" 
 + # (for our "initdb" code later; see "--logpath" below) 
 + chown --dereference mongodb "/proc/$$/fd/1" "/proc/$$/fd/2" || : 
 + # ignore errors thanks to https://github.com/docker-library/mongo/issues/149 
 + 
 + exec gosu mongodb "$BASH_SOURCE" "$@" 
 +fi 
 + 
 +# you should use numactl to start your mongod instances, including the config servers, mongos instances, and any clients. 
 +# https://docs.mongodb.com/manual/administration/production-notes/#configuring-numa-on-linux 
 +if [[ "$originalArgOne" == mongo* ]]; then 
 + numa='numactl --interleave=all' 
 + if $numa true &/dev/null; then 
 + set -- $numa "$@
 + fi 
 +fi 
 + 
 +# usagefile_env VAR [DEFAULT] 
 +   ie: file_env 'XYZ_DB_PASSWORD' 'example' 
 +# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of 
 +#  "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) 
 +file_env() { 
 + local var="$1" 
 + local fileVar="${var}_FILE" 
 + local def="${2:-}" 
 + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then 
 + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" 
 + exit 1 
 + fi 
 + local val="$def" 
 + if [ "${!var:-}" ]; then 
 + val="${!var}" 
 + elif [ "${!fileVar:-}" ]; then 
 + val="$(< "${!fileVar}")" 
 + fi 
 + export "$var"="$val" 
 + unset "$fileVar" 
 +
 + 
 +# see https://github.com/docker-library/mongo/issues/147 (mongod is picky about duplicated arguments) 
 +_mongod_hack_have_arg() { 
 + local checkArg="$1"; shift 
 + local arg 
 + for arg; do 
 + case "$arg" in 
 + "$checkArg"|"$checkArg"=*) 
 + return 0 
 + ;; 
 + esac 
 + done 
 + return 1 
 +
 +# _mongod_hack_get_arg_val '--some-arg' "$@" 
 +_mongod_hack_get_arg_val() { 
 + local checkArg="$1"; shift 
 + while [ "$#" -gt 0 ]; do 
 + local arg="$1"; shift 
 + case "$arg" in 
 + "$checkArg"
 + echo "$1" 
 + return 0 
 + ;; 
 + "$checkArg"=*) 
 + echo "${arg#$checkArg=}" 
 + return 0 
 + ;; 
 + esac 
 + done 
 + return 1 
 +
 +declare -a mongodHackedArgs 
 +# _mongod_hack_ensure_arg '--some-arg' "$@" 
 +# set -- "${mongodHackedArgs[@]}" 
 +_mongod_hack_ensure_arg() { 
 + local ensureArg="$1"; shift 
 + mongodHackedArgs=( "$@"
 + if ! _mongod_hack_have_arg "$ensureArg" "$@"; then 
 + mongodHackedArgs+=( "$ensureArg"
 + fi 
 +
 +# _mongod_hack_ensure_no_arg '--some-unwanted-arg' "$@" 
 +# set -- "${mongodHackedArgs[@]}" 
 +_mongod_hack_ensure_no_arg() { 
 + local ensureNoArg="$1"; shift 
 + mongodHackedArgs=() 
 + while [ "$#" -gt 0 ]; do 
 + local arg="$1"; shift 
 + if [ "$arg" = "$ensureNoArg" ]; then 
 + continue 
 + fi 
 + mongodHackedArgs+=( "$arg"
 + done 
 +
 +# _mongod_hack_ensure_no_arg '--some-unwanted-arg' "$@" 
 +# set -- "${mongodHackedArgs[@]}" 
 +_mongod_hack_ensure_no_arg_val() { 
 + local ensureNoArg="$1"; shift 
 + mongodHackedArgs=() 
 + while [ "$#" -gt 0 ]; do 
 + local arg="$1"; shift 
 + case "$arg" in 
 + "$ensureNoArg"
 + shift # also skip the value 
 + continue 
 + ;; 
 + "$ensureNoArg"=*) 
 + # value is already included 
 + continue 
 + ;; 
 + esac 
 + mongodHackedArgs+=( "$arg"
 + done 
 +
 +# _mongod_hack_ensure_arg_val '--some-arg' 'some-val' "$@" 
 +# set -- "${mongodHackedArgs[@]}" 
 +_mongod_hack_ensure_arg_val() { 
 + local ensureArg="$1"; shift 
 + local ensureVal="$1"; shift 
 + _mongod_hack_ensure_no_arg_val "$ensureArg" "$@" 
 + mongodHackedArgs+=( "$ensureArg" "$ensureVal"
 +
 + 
 +# _js_escape 'some "string" value' 
 +_js_escape() { 
 + jq --null-input --arg 'str' "$1" '$str' 
 +
 + 
 +jsonConfigFile="${TMPDIR:-/tmp}/docker-entrypoint-config.json" 
 +tempConfigFile="${TMPDIR:-/tmp}/docker-entrypoint-temp-config.json" 
 +_parse_config() { 
 + if [ -s "$tempConfigFile" ]; then 
 + return 0 
 + fi 
 + 
 + local configPath 
 + if configPath="$(_mongod_hack_get_arg_val --config "$@")"; then 
 + # if --config is specified, parse it into a JSON file so we can remove a few problematic keys (especially SSL-related keys) 
 + # see https://docs.mongodb.com/manual/reference/configuration-options/ 
 + mongo --norc --nodb --quiet --eval "load('/js-yaml.js'); printjson(jsyaml.load(cat($(_js_escape "$configPath"))))" > "$jsonConfigFile" 
 + jq 'del(.systemLog, .processManagement, .net, .security)' "$jsonConfigFile" > "$tempConfigFile" 
 + return 0 
 + fi 
 + 
 + return 1 
 +
 +dbPath= 
 +_dbPath() { 
 + if [ -n "$dbPath" ]; then 
 + echo "$dbPath" 
 + return 
 + fi 
 + 
 + if ! dbPath="$(_mongod_hack_get_arg_val --dbpath "$@")"; then 
 + if _parse_config "$@"; then 
 + dbPath="$(jq -r '.storage.dbPath // empty' "$jsonConfigFile")" 
 + fi 
 + fi 
 + 
 + if [ -z "$dbPath" ]; then 
 + if _mongod_hack_have_arg --configsvr "$@" || { 
 + _parse_config "$@"
 + && clusterRole="$(jq -r '.sharding.clusterRole // empty' "$jsonConfigFile")"
 + && [ "$clusterRole" = 'configsvr'
 + }; then 
 + # if running as config server, then the default dbpath is /data/configdb 
 + # https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-mongod-configsvr 
 + dbPath=/data/configdb 
 + fi 
 + fi 
 + 
 + : "${dbPath:=/data/db}" 
 + 
 + echo "$dbPath" 
 +
 + 
 +if [ "$originalArgOne" = 'mongod' ]; then 
 + file_env 'MONGO_INITDB_ROOT_USERNAME' 
 + file_env 'MONGO_INITDB_ROOT_PASSWORD' 
 + # pre-check a few factors to see if it's even worth bothering with initdb 
 + shouldPerformInitdb= 
 + if [ "$MONGO_INITDB_ROOT_USERNAME" ] && [ "$MONGO_INITDB_ROOT_PASSWORD" ]; then 
 + # if we have a username/password, let's set "--auth" 
 + _mongod_hack_ensure_arg '--auth' "$@" 
 + set -- "${mongodHackedArgs[@]}" 
 + shouldPerformInitdb='true' 
 + elif [ "$MONGO_INITDB_ROOT_USERNAME" ] || [ "$MONGO_INITDB_ROOT_PASSWORD" ]; then 
 + cat >&2 <<-'EOF' 
 + error: missing 'MONGO_INITDB_ROOT_USERNAME' or 'MONGO_INITDB_ROOT_PASSWORD' 
 +        both must be specified for a user to be created 
 + EOF 
 + exit 1 
 + fi 
 + 
 + if [ -z "$shouldPerformInitdb" ]; then 
 + # if we've got any /docker-entrypoint-initdb.d/* files to parse later, we should initdb 
 + for f in /docker-entrypoint-initdb.d/*; do 
 + case "$f" in 
 + *.sh|*.js) # this should match the set of files we check for below 
 + shouldPerformInitdb="$f" 
 + break 
 + ;; 
 + esac 
 + done 
 + fi 
 + 
 + # check for a few known paths (to determine whether we've already initialized and should thus skip our initdb scripts) 
 + if [ -n "$shouldPerformInitdb" ]; then 
 + dbPath="$(_dbPath "$@")" 
 + for path in \ 
 + "$dbPath/WiredTiger"
 + "$dbPath/journal"
 + "$dbPath/local.0"
 + "$dbPath/storage.bson"
 + ; do 
 + if [ -e "$path" ]; then 
 + shouldPerformInitdb= 
 + break 
 + fi 
 + done 
 + fi 
 + 
 + if [ -n "$shouldPerformInitdb" ]; then 
 + mongodHackedArgs=( "$@"
 + if _parse_config "$@"; then 
 + _mongod_hack_ensure_arg_val --config "$tempConfigFile" "${mongodHackedArgs[@]}" 
 + fi 
 + _mongod_hack_ensure_arg_val --bind_ip 127.0.0.1 "${mongodHackedArgs[@]}" 
 + _mongod_hack_ensure_arg_val --port 27017 "${mongodHackedArgs[@]}" 
 + _mongod_hack_ensure_no_arg --bind_ip_all "${mongodHackedArgs[@]}" 
 + 
 + # remove "--auth" and "--replSet" for our initial startup (see https://docs.mongodb.com/manual/tutorial/enable-authentication/#start-mongodb-without-access-control) 
 + # https://github.com/docker-library/mongo/issues/211 
 + _mongod_hack_ensure_no_arg --auth "${mongodHackedArgs[@]}" 
 + if [ "$MONGO_INITDB_ROOT_USERNAME" ] && [ "$MONGO_INITDB_ROOT_PASSWORD" ]; then 
 + _mongod_hack_ensure_no_arg_val --replSet "${mongodHackedArgs[@]}" 
 + fi 
 + 
 + sslMode="$(_mongod_hack_have_arg '--sslPEMKeyFile' "$@" && echo 'allowSSL' || echo 'disabled')" # "BadValue: need sslPEMKeyFile when SSL is enabled" vs "BadValue: need to enable SSL via the sslMode flag when using SSL configuration parameters" 
 + _mongod_hack_ensure_arg_val --sslMode "$sslMode" "${mongodHackedArgs[@]}" 
 + 
 + if stat "/proc/$$/fd/1" > /dev/null && [ -w "/proc/$$/fd/1" ]; then 
 + # https://github.com/mongodb/mongo/blob/38c0eb538d0fd390c6cb9ce9ae9894153f6e8ef5/src/mongo/db/initialize_server_global_state.cpp#L237-L251 
 + # https://github.com/docker-library/mongo/issues/164#issuecomment-293965668 
 + _mongod_hack_ensure_arg_val --logpath "/proc/$$/fd/1" "${mongodHackedArgs[@]}" 
 + else 
 + initdbLogPath="$(_dbPath "$@")/docker-initdb.log" 
 + echo >&2 "warning: initdb logs cannot write to '/proc/$$/fd/1', so they are in '$initdbLogPath' instead" 
 + _mongod_hack_ensure_arg_val --logpath "$initdbLogPath" "${mongodHackedArgs[@]}" 
 + fi 
 + _mongod_hack_ensure_arg --logappend "${mongodHackedArgs[@]}" 
 + 
 + pidfile="${TMPDIR:-/tmp}/docker-entrypoint-temp-mongod.pid" 
 + rm -f "$pidfile" 
 + _mongod_hack_ensure_arg_val --pidfilepath "$pidfile" "${mongodHackedArgs[@]}" 
 + 
 + "${mongodHackedArgs[@]}" --fork 
 + 
 + mongo=( mongo --host 127.0.0.1 --port 27017 --quiet ) 
 + 
 + # check to see that our "mongod" actually did start up (catches "--help", "--version", MongoDB 3.2 being silly, slow prealloc, etc) 
 + # https://jira.mongodb.org/browse/SERVER-16292 
 + tries=30 
 + while true; do 
 + if ! { [ -s "$pidfile" ] && ps "$(< "$pidfile")" &> /dev/null; }; then 
 + # bail ASAP if "mongod" isn't even running 
 + echo >&
 + echo >&2 "error: $originalArgOne does not appear to have stayed running -- perhaps it had an error?" 
 + echo >&
 + exit 1 
 + fi 
 + if "${mongo[@]}" 'admin' --eval 'quit(0)' &> /dev/null; then 
 + # success! 
 + break 
 + fi 
 + (( tries-- )) 
 + if [ "$tries" -le 0 ]; then 
 + echo >&
 + echo >&2 "error: $originalArgOne does not appear to have accepted connections quickly enough -- perhaps it had an error?" 
 + echo >&
 + exit 1 
 + fi 
 + sleep 1 
 + done 
 + 
 + if [ "$MONGO_INITDB_ROOT_USERNAME" ] && [ "$MONGO_INITDB_ROOT_PASSWORD" ]; then 
 + rootAuthDatabase='admin' 
 + 
 + "${mongo[@]}" "$rootAuthDatabase" <<-EOJS 
 + db.createUser({ 
 + user: $(_js_escape "$MONGO_INITDB_ROOT_USERNAME"), 
 + pwd: $(_js_escape "$MONGO_INITDB_ROOT_PASSWORD"), 
 + roles: [ { role: 'root', db: $(_js_escape "$rootAuthDatabase") } ] 
 + }) 
 + EOJS 
 + fi 
 + 
 + export MONGO_INITDB_DATABASE="${MONGO_INITDB_DATABASE:-test}" 
 + 
 + echo 
 + for f in /docker-entrypoint-initdb.d/*; do 
 + case "$f" in 
 + *.sh) echo "$0: running $f"; . "$f" ;; 
 + *.js) echo "$0: running $f"; "${mongo[@]}" "$MONGO_INITDB_DATABASE" "$f"; echo ;; 
 + *)    echo "$0: ignoring $f" ;; 
 + esac 
 + echo 
 + done 
 + 
 + "${mongodHackedArgs[@]}" --shutdown 
 + rm -f "$pidfile" 
 + 
 + echo 
 + echo 'MongoDB init process complete; ready for start up.' 
 + echo 
 + fi 
 + 
 + # MongoDB 3.6+ defaults to localhost-only binding 
 + if mongod --help 2>&1 | grep -q -- --bind_ip_all; then # TODO remove this conditional when 3.4 is no longer supported 
 + haveBindIp= 
 + if _mongod_hack_have_arg --bind_ip "$@" || _mongod_hack_have_arg --bind_ip_all "$@"; then 
 + haveBindIp=1 
 + elif _parse_config "$@" && jq --exit-status '.net.bindIp // .net.bindIpAll' "$jsonConfigFile" > /dev/null; then 
 + haveBindIp=1 
 + fi 
 + if [ -z "$haveBindIp" ]; then 
 + # so if no "--bind_ip" is specified, let's add "--bind_ip_all" 
 + set -- "$@" --bind_ip_all 
 + fi 
 + fi 
 + 
 + unset "${!MONGO_INITDB_@}" 
 +fi 
 + 
 +rm -f "$jsonConfigFile" "$tempConfigFile" 
 + 
 +exec "$@" 
 +</file> 
 + 
 +Examinons chaque commande dans le Dockerfile : 
 + 
 +====1.2 - FROM==== 
 + 
 +<file> 
 +FROM ubuntu:bionic 
 +</file> 
 + 
 +Cette ligne définit l'image à partir de laquelle sera construite notre image. Quand l'image n'est construite à partir d'une autre image, la valeur de **FROM** est **scratch**. 
 + 
 +====1.3 - RUN==== 
 + 
 +<file>
 ... ...
-        "Mounts": [ + 
-            { +RUN groupadd -r mongodb && useradd -r -g mongodb mongodb 
-                "Type": "volume", + 
-                "Name": "9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a", +RUN set -eux; \ 
-                "Source": "/var/lib/docker/volumes/9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a/_data", + apt-get update; \ 
-                "Destination": "/data/configdb", + apt-get install -y --no-install-recommends \ 
-                "Driver": "local", + ca-certificates \ 
-                "Mode": "", + jq \ 
-                "RW": true, + numactl \ 
-                "Propagation": "" + ; \ 
-            }, + if ! command -v ps > /dev/null; then \ 
-            { + apt-get install -y --no-install-recommends procps; \ 
-                "Type": "volume", + fi; \ 
-                "Name": "a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050", + rm -rf /var/lib/apt/lists/*
-                "Source": "/var/lib/docker/volumes/a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050/_data", +
-                "Destination": "/data/db", +
-                "Driver": "local", +
-                "Mode": "", +
-                "RW": true, +
-                "Propagation": "" +
-            }+
 ... ...
-            "Volumes": { +RUN set -ex; \ 
-                "/data/configdb": {}, +
-                "/data/db": {} + apt-get update; \ 
-            },+ apt-get install -y --no-install-recommends \ 
 + wget \ 
 + ; \ 
 + if ! command -v gpg > /dev/null; then \ 
 + apt-get install -y --no-install-recommends gnupg dirmngr; \ 
 + fi; \ 
 + rm -rf /var/lib/apt/lists/*;
 +
 + dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')";
 + wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \ 
 + wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \ 
 + export GNUPGHOME="$(mktemp -d)"; \ 
 + gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4;
 + gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu;
 + command -v gpgconf && gpgconf --kill all || :; \ 
 + rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc;
 + chmod +x /usr/local/bin/gosu;
 + gosu --version; \ 
 + gosu nobody true; \ 
 +
 + wget -O /js-yaml.js "https://github.com/nodeca/js-yaml/raw/${JSYAML_VERSION}/dist/js-yaml.js"; \ 
 +# TODO some sort of download verification here 
 +
 + apt-get purge -y --auto-remove wget 
 + 
 +RUN mkdir /docker-entrypoint-initdb.d
 ... ...
-</code> 
  
-En regardant le contenu du répertoire **/data/db**, on constate une arborescence classique de stockage de données de mongodb :+RUN set -ex; \ 
 + export GNUPGHOME="$(mktemp -d)"; \ 
 + for key in $GPG_KEYS; do \ 
 + gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key";
 + done; \ 
 + gpg --batch --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg; \ 
 + command -v gpgconf && gpgconf --kill all || :; \ 
 + rm -r "$GNUPGHOME";
 + apt-key list 
 +... 
 +RUN set -x \ 
 + && apt-get update \ 
 + && apt-get install -y \ 
 + ${MONGO_PACKAGE}=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-server=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-shell=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-mongos=$MONGO_VERSION \ 
 + ${MONGO_PACKAGE}-tools=$MONGO_VERSION \ 
 + && rm -rf /var/lib/apt/lists/* \ 
 + && rm -rf /var/lib/mongodb \ 
 + && mv /etc/mongod.conf /etc/mongod.conf.orig
  
-<code> +RUN mkdir -p /data/db /data/configdb \ 
-root@debian9:~# ls /var/lib/docker/volumes/a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050/_data + && chown -R mongodb:mongodb /data/db /data/configdb 
-journal  local.0  local.ns  mongod.lock  storage.bson +... 
-</code>+</file>
  
-Arrêtez et supprimez le conteneur **mongo2** :+Cette commande lance un processus dans la construction de l'image. Dans les cas ci-dessus, chaque chaîne correspond à la commande passée au shell **/bin/sh**.
  
-<code> +Il existe un autre syntaxe de la commande RUN appelé le format exec, à savoir :
-root@debian9:~# docker stop mongo2 +
-mongo2 +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES +
-ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                          test1 +
-21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                        myDocker +
-b9773e4aa06d        i2tch/mongodb2      "docker-entrypoint..."   7 hours ago         Exited (0) 10 seconds ago                       mongo2 +
-bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                     27017/tcp           mongo1 +
-f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                        mongo +
-9731a48f126a        nginx               "nginx -g 'daemon ..."   18 hours ago        Exited (0) 6 hours ago                          cocky_gates +
-eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                         adoring_yonath +
-cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                         i2tch +
-root@debian9:~# docker rm mongo2 +
-mongo2 +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES +
-ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                         test1 +
-21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                       myDocker +
-bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                    27017/tcp           mongo1 +
-f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                       mongo +
-9731a48f126a        nginx               "nginx -g 'daemon ..."   18 hours ago        Exited (0) 6 hours ago                         cocky_gates +
-eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                        adoring_yonath +
-cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                        i2tch +
-</code>+
  
-Re-créez maintenant un conteneur à partir de l'image **i2tch/mongodb2** :+  RUN ["/bin/bash", "-c", "commande"]
  
-<code+<WRAP center round important
-root@debian9:~# docker run -d --name mongo2 i2tch/mongodb2 +**Important** La commande RUN est utilisée pour exécuter une commande passée en argument lors de la compilation de l'image seulementCette commande ne doit pas donc être utilisée pour exécuter une commande lors du lancement du conteneurLa commande utilisée pour accomplir ce dernier est ENTRYPOINT
-a8382642c4e849337e12a60419b10f63ea21251dfcc2c6050284ca3eed7fa13d +</WRAP>
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES +
-a8382642c4e8        i2tch/mongodb2      "docker-entrypoint..."   12 seconds ago      Exited (100) 11 seconds ago                       mongo2 +
-ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                            test1 +
-21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                          myDocker +
-bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                       27017/tcp           mongo1 +
-f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                          mongo +
-9731a48f126a        nginx               "nginx -g 'daemon ...  18 hours ago        Exited (0) 6 hours ago                            cocky_gates +
-eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                           adoring_yonath +
-cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                           i2tch +
-</code>+
  
-Utilisez de nouveau la commande **docker inspect** pour identifier le point de montage du répertoire **/data/db** :+====1.4 - ENV====
  
-<code> +Cette commande permet de fixer la valeur d'une variable d'environnement disponible dans la suite du Dockerfile :  
-root@debian9:~# docker inspect mongo2+ 
 +<file>
 ... ...
-        "Mounts":+ENV GOSU_VERSION 1.11 
-            { +# grab "js-yamlfor parsing mongod's YAML config files (https://github.com/nodeca/js-yaml/releases) 
-                "Type": "volume", +ENV JSYAML_VERSION 3.13.0
-                "Name": "76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43", +
-                "Source": "/var/lib/docker/volumes/76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43/_data", +
-                "Destination": "/data/db", +
-                "Driver": "local", +
-                "Mode": "", +
-                "RW": true, +
-                "Propagation": "" +
-            }, +
-            { +
-                "Type": "volume", +
-                "Name": "3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c", +
-                "Source": "/var/lib/docker/volumes/3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c/_data", +
-                "Destination": "/data/configdb", +
-                "Driver": "local", +
-                "Mode": "", +
-                "RW": true, +
-                "Propagation": "" +
-            }+
 ... ...
-</code> 
  
-<WRAP center round important> +ENV GPG_KEYS E162F504A20CDF15827F718D4B7C549A058F8B6B 
-**Important** : Notez que le répertoire des données du précédent conteneur, **/var/lib/docker/volumes/a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050/_data** n'est pas le même que le conteneur courant **/var/lib/docker/volumes/76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43/_data**. +...
-</WRAP>+
  
-Les conteneurs n'ayant pas été arrêtés avec l'option **-v**, on peut constater que les répertoires persistent dans **/var/lib/docker** :+ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
  
-<code+ENV MONGO_MAJOR 4.1 
-root@debian9:~# ls -l /var/lib/docker/volumes+ENV MONGO_VERSION 4.1.95 
-total 52 +... 
-drwxr-xr-x 3 root root  4096 Sep  7 09:43 3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c +</file
-drwxr-xr-x 3 root root  4096 Sep  6 16:07 46d11d005d05757609ff76159ce0992d210089c5247fa54b024706a20b0de501 + 
-drwxr-xr-x 3 root root  4096 Sep  7 09:43 76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43 +**et** dans les conteneurs générés à partir de l'image construite. 
-drwxr-xr-x 3 root root  4096 Sep  7 02:33 9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a + 
-drwxr-xr-x 3 root root  4096 Sep  7 02:33 a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050 +====1.5 - VOLUME==== 
-drwxr-xr-x 3 root root  4096 Sep  6 16:07 cc38fa97138adc55976aa16993d8920c5f7da922ad1b2a07936d30cc82d59f38 + 
--rw------- 1 root root 32768 Sep  7 09:43 metadata.db +<file> 
-</code>+... 
 +VOLUME /data/db /data/configdb 
 +... 
 +</file> 
 + 
 +Cette commande expose les répertoires passés en argument afin qu'ils puissent être mappés vers des répertoires sur la machine hôte ou ailleurs, tel que nous avons vu avec l'exemple nginx. 
 + 
 +====1.6 COPY==== 
 + 
 +<file> 
 +... 
 +COPY docker-entrypoint.sh /usr/local/bin/ 
 +..
 +</file> 
 + 
 +Cette commande permet de récupérer les fichiers dans le contexte et de les copier dans l'image. 
 + 
 +**Attention** : tous les fichiers dans le contexte sont inclus dans l'image finale, même ceux qui sont inutiles. 
 + 
 +Il est possible d'exclure des fichiers présents dans le contexte en les mettant dans un fichier appelé **.dockerignore** placé dans le contexte.
  
 <WRAP center round important> <WRAP center round important>
-**Important** : Notez que non-seulement ceci représente une source de perte d'espace disque mais prouve aussi que les données ne sont pas persistantes entre deux instances d'un conteneur d'**i2tch/mongodb2**. Ceci crée bien évidement un problème important en production.+**Important** - Il existe une autre commande similaire à COPY ADD. ADD est une commande qui n'est plus recommendé sauf dans le cas de cas spécifiques. Notez que dans le cas de l'utilisation de la commande ADD, si le fichier source est une archive de type TAR, son contenu sera désarchivé et copier vers la destination tandis que si le fichier source est référencé par un URL, le contenu sera téléchargé puis déposé dans la destination.
 </WRAP> </WRAP>
  
-====Gestion Manuelle d'un Volume====+====1.7 - ENTRYPOINT====
  
-Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur avec un volume spécifique pour contenir les données placées dans **/data/db** du conteneur par mongodb :+<file> 
 +... 
 +ENTRYPOINT ["docker-entrypoint.sh"
 +... 
 +</file>
  
-<code> +Cette commande stipule la commande qui sera exécutée lors du démarrage du conteneur.
-root@debian9:~# docker stop mongo2 +
-mongo2 +
-root@debian9:~# docker rm mongo2 +
-mongo2 +
-root@debian9:~# docker run -d --name mongo2 -v persistent_data:/data/db i2tch/mongodb2 +
-3cf093d72b9e3739f2cb288e571244e494b7518292c31994ee012e3620bb0e98 +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES +
-3cf093d72b9e        i2tch/mongodb2      "docker-entrypoint..."   21 seconds ago      Up 20 seconds              27017/tcp           mongo2 +
-ea239635e141        testcache           "more /tmp/moment"       6 hours ago         Exited (0) 6 hours ago                         test1 +
-21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                       myDocker +
-bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                    27017/tcp           mongo1 +
-f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                       mongo +
-9731a48f126a        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 6 hours ago                         cocky_gates +
-eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                        adoring_yonath +
-cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                        i2tch +
-root@debian9:~# docker logs mongo2 +
-2017-09-07T08:53:12.523+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=3cf093d72b9e +
-2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] db version v3.0.15 +
-2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] git version: b8ff507269c382bc100fc52f75f48d54cd42ec3b +
-2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] build info: Linux ip-10-166-66-3 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 BOOST_LIB_VERSION=1_49 +
-2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] allocator: tcmalloc +
-2017-09-07T08:53:12.524+0000 I CONTROL  [initandlisten] options: { storage: { mmapv1: { smallFiles: true } } } +
-2017-09-07T08:53:12.535+0000 I JOURNAL  [initandlisten] journal dir=/data/db/journal +
-2017-09-07T08:53:12.535+0000 I JOURNAL  [initandlisten] recover : no journal files present, no recovery needed +
-2017-09-07T08:53:13.368+0000 I JOURNAL  [initandlisten] preallocateIsFaster=true 15.4 +
-2017-09-07T08:53:14.410+0000 I JOURNAL  [initandlisten] preallocateIsFaster=true 19.36 +
-2017-09-07T08:53:16.277+0000 I JOURNAL  [initandlisten] preallocateIsFaster=true 15.86 +
-2017-09-07T08:53:16.277+0000 I JOURNAL  [initandlisten] preallocateIsFaster check took 3.742 secs +
-2017-09-07T08:53:16.277+0000 I JOURNAL  [initandlisten] preallocating a journal file /data/db/journal/prealloc.0 +
-2017-09-07T08:53:19.930+0000 I JOURNAL  [initandlisten] preallocating a journal file /data/db/journal/prealloc.1 +
-2017-09-07T08:53:23.035+0000 I JOURNAL  [initandlisten] preallocating a journal file /data/db/journal/prealloc.2 +
-2017-09-07T08:53:25.889+0000 I JOURNAL  [durability] Durability thread started +
-2017-09-07T08:53:25.889+0000 I JOURNAL  [journal writer] Journal writer thread started +
-2017-09-07T08:53:26.016+0000 I INDEX    [initandlisten] allocating new ns file /data/db/local.ns, filling with zeroes... +
-2017-09-07T08:53:26.246+0000 I STORAGE  [FileAllocator] allocating new datafile /data/db/local.0, filling with zeroes... +
-2017-09-07T08:53:26.246+0000 I STORAGE  [FileAllocator] creating directory /data/db/_tmp +
-2017-09-07T08:53:26.256+0000 I STORAGE  [FileAllocator] done allocating datafile /data/db/local.0, size: 16MB,  took 0.002 secs +
-2017-09-07T08:53:26.299+0000 I NETWORK  [initandlisten] waiting for connections on port 27017 +
-</code>+
  
-Notez que cette fois-ci, docker a créé un répertoire **persistent_data** dans le répertoire **/var/lib/docker/volumes/** :+Deux cas de figure se présentent :
  
-<code> +  * ENTRYPOINT suivi d'une chaîne un shell est démarré pour exécuter la chaîne, 
-root@debian9:~# ls -l /var/lib/docker/volumes/ +  * ENTRYPOINT suivi d'une table JSON ( comme ci-dessus ) au format ENTRYPOINT ["commande à exécuter", "paramètres de la commande"].
-total 68 +
-drwxr-xr-x 3 root root  4096 Sep  7 09:43 3bf724ceb38ce0792469d7e403f05b6794f27e0aa72bda51a8ab75b2df5ae87c +
-drwxr-xr-x 3 root root  4096 Sep  6 16:07 46d11d005d05757609ff76159ce0992d210089c5247fa54b024706a20b0de501 +
-drwxr-xr-x 3 root root  4096 Sep  7 09:46 511e23f818d5cf60f4333a3fe8fd2e4333c900dec6eee97f70448bfb0091184d +
-drwxr-xr-x 3 root root  4096 Sep  7 09:53 5ca72be4140ecf1271efe7342cf7cd58ce66fc3673d12c04b8503603b8cee66c +
-drwxr-xr-x 3 root root  4096 Sep  7 09:43 76dcc0ccbe6604278cf8e8da0398a807f5d0719087f17c227c8504be24456d43 +
-drwxr-xr-x 3 root root  4096 Sep  7 02:33 9c84c2d1a0db811a3c13dce354ba21169f3073513c8d025dd96c5f902364d44a +
-drwxr-xr-x 3 root root  4096 Sep  7 02:33 a6177cf4b46089356280f084dd2e272f673aa4a81accb53f031267fafcee6050 +
-drwxr-xr-x 3 root root  4096 Sep  6 16:07 cc38fa97138adc55976aa16993d8920c5f7da922ad1b2a07936d30cc82d59f38 +
--rw------- 1 root root 65536 Sep  7 09:53 metadata.db +
-drwxr-xr-x 3 root root  4096 Sep  7 09:46 persistent_data +
-</code>+
  
-Arrêtez et supprimez le conteneur **mongo2** puis re-créez un conteneur en utilisant le même volume spécifique pour contenir les données placées dans **/data/db** du conteneur par mongodb :+Dans le fichier **docker-entrypoint.sh** :
  
-<code+<file
-root@debian9:~# docker stop mongo2 +... 
-mongo2 +originalArgOne="$1"
-root@debian9:~# docker rm mongo2 +
-mongo2 +
-root@debian9:~# docker run -d --name mongo2 -v persistent_data:/data/db i2tch/mongodb2 +
-ad672c3038245c25a36162d05820c21f7250557ac342582d0908d3ca33799e37 +
-root@debian9:~# docker ps -a +
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES +
-ad672c303824        i2tch/mongodb2      "docker-entrypoint...  24 seconds ago      Up 22 seconds              27017/tcp           mongo2 +
-ea239635e141        testcache           "more /tmp/moment      6 hours ago         Exited (0) 6 hours ago                         test1 +
-21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   6 hours ago         Exited (137) 6 hours ago                       myDocker +
-bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint..."   18 hours ago        Created                    27017/tcp           mongo1 +
-f5b45072b831        i2tch/mongodb       "bash"                   18 hours ago        Exited (137) 6 hours ago                       mongo +
-9731a48f126a        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 6 hours ago                         cocky_gates +
-eacd70596e23        nginx               "nginx -g 'daemon ..."   19 hours ago        Exited (0) 19 hours ago                        adoring_yonath +
-cffb4456e9c4        ubuntu              "/bin/bash"              19 hours ago        Exited (0) 19 hours ago                        i2tch +
-</code>+
  
-Encore une fois, cherchez le point de montage de **/data/db** grâce à l'utilisation de la commande **docker inspect** :+# allow the container to be started with `--user` 
 +# all mongocommands should be dropped to the correct user 
 +if [[ "$originalArgOne" == mongo]] && [ "$(id -u)" = '0' ]; then 
 + if [ "$originalArgOne" = 'mongod' ]; then 
 + find /data/configdb /data/db \! -user mongodb -exec chown mongodb '{}' + 
 + fi
  
-<code> + # make sure we can write to stdout and stderr as "mongodb" 
-root@debian9:~# docker inspect mongo2+ # (for our "initdb" code later; see "--logpath" below) 
 + chown --dereference mongodb "/proc/$$/fd/1" "/proc/$$/fd/2" || : 
 + ignore errors thanks to https://github.com/docker-library/mongo/issues/149 
 + 
 + exec gosu mongodb "$BASH_SOURCE" "$@" 
 +fi 
 + 
 +# you should use numactl to start your mongod instances, including the config servers, mongos instances, and any clients. 
 +# https://docs.mongodb.com/manual/administration/production-notes/#configuring-numa-on-linux 
 +if [[ "$originalArgOne" == mongo* ]]; then 
 + numa='numactl --interleave=all' 
 + if $numa true &> /dev/null; then 
 + set -- $numa "$@" 
 + fi 
 +fi
 ... ...
-        "Mounts": [ +exec "$@
-            { +</file> 
-                "Type": "volume", + 
-                "Name": "6cefc73cef475279dfe20e25421fa358e6aa995b5c175b9f2c7a9b86163661e5", +si la valeur du paramètre passé à entrypoint.sh est **mongod**le script affecte l'utilisateur mongodb aux répertoires /data/configdb et /data/db puis lance mongo sous l'utilisateur mongodb avec des droits réduits ( gosu ). 
-                "Source": "/var/lib/docker/volumes/6cefc73cef475279dfe20e25421fa358e6aa995b5c175b9f2c7a9b86163661e5/_data", + 
-                "Destination": "/data/configdb", +Ce fichier finit par "$@qui indique que si aucune condition n'ait été rempliela commande est exécutée avec la valeur passée en argument.
-                "Driver": "local", +
-                "Mode": "", +
-                "RW": true, +
-                "Propagation": "" +
-            }, +
-            { +
-                "Type": "volume", +
-                "Name": "persistent_data", +
-                "Source": "/var/lib/docker/volumes/persistent_data/_data", +
-                "Destination": "/data/db", +
-                "Driver": "local", +
-                "Mode": "z", +
-                "RW": true, +
-                "Propagation": "" +
-            } +
-... +
-</code>+
  
 <WRAP center round important> <WRAP center round important>
-**Important** Notez ici que l'utilisation du même répertoire entre les deux conteneurs rend les données persistantes et évite la création de volumes orphelins. Pour plus d'information sur les volumes, consultez la page : **[[https://docs.docker.com/storage/volumes/]]**.+**Important** Notez que la compilation d'une image se fait à l'intérieur d'un **contexte**. Le **contexte** est le répertoire de build. Dernièrement, notez qu'il peut y avoir plusieurs ENTRYPOINT dans le fichier Dockerfile mais uniquement le dernier est pris en compte.
 </WRAP> </WRAP>
  
-https://docs.docker.com/storage/volumes/+====1.8 - EXPOSE====
  
-=====LAB #6 - Gestion du Réseau=====+<file> 
 +... 
 +EXPOSE 27017 
 +... 
 +</file>
  
-Docker fournit trois réseaux par défaut :+Cette commande permet d'exposer un port à l'extérieur du conteneur. 
 + 
 +====1.9 - CMD==== 
 + 
 +<file> 
 +... 
 +CMD ["mongod"
 +... 
 +</file> 
 + 
 +Ceci représente la valeur du paramètre par défaut si aucun paramètre n'est spécifié à la fin de la commande docker run. 
 + 
 +====1.10 - Autres Commandes==== 
 + 
 +Le Dockerfile peut aussi contenir les commandes suivantes : 
 + 
 +  * **WORKDIR**, 
 +    * Cette commande fixe le répertoire de travil lors de la compilation d'une image. Elle peut apparaître plusieurs fois dans le Dockerfile permettant ainsi l'évolution du répertoire de travail, 
 +  * **LABEL**, 
 +    * Cette commande permet de définir des couples clef/valeur à inclure dans les méta-données décrivant l'image lors de sa distribution, par exemple, la **version**, la **description** ou un **readme**. 
 + 
 + 
 +Lancez maintenant la compilation de l'image :
  
 <code> <code>
-root@debian9:~# docker network ls +root@debian9:~/mongodb# docker build .
-NETWORK ID          NAME                DRIVER              SCOPE +
-495b3db75b0d        bridge              bridge              local +
-e1ed4de2f947        host                host                local +
-6bda460c97c6        none                null                local+
 </code> </code>
  
-====Bridge====+Consultez la liste de images :
  
-Ce type de réseau est limité aux conteneurs d'un hôte unique exécutant DockerLes conteneurs ne peuvent communiquer qu'entre eux et ils ne sont pas accessibles depuis l'extérieurPour que les conteneurs sur le réseau puissent communiquer ou être accessibles du monde extérieur, il faut configurer le mappage de port.+<code> 
 +root@debian9:~/mongodb# docker images 
 +REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE 
 +<none>              <none>              3bf216d921d6        About a minute ago   96.2MB 
 +i2tch/mongodb       latest              eca7835d4fe6        11 minutes ago       1.03GB 
 +nginx               latest              2bcb04bdb83f        13 days ago          109MB 
 +centos              latest              9f38484d220f        3 weeks ago          202MB 
 +ubuntu              bionic              94e814e2efa8        4 weeks ago          88.9MB 
 +ubuntu              latest              94e814e2efa8        4 weeks ago          88.9MB 
 +hello-world         latest              fce289e99eb9        3 months ago         1.84kB 
 +</code>
  
-Par défaut Docker fonctionne en mode **Pont** ou (//Bridge//) et crée une interface intermédiaire à cet effet appelé **docker0** :+Notez que l'image n'a ni REPOSITORY, ni TAG. Créez donc un TAG :
  
 <code> <code>
-root@debian9:~# ip addr show docker0 +root@debian9:~/mongodbdocker tag 3bf2 i2tch/mongodb1 
-3docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default  +root@debian9:~/mongodb# docker images 
-    link/ether 02:42:38:f1:e7:ee brd ff:ff:ff:ff:ff:ff +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
-    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 +i2tch/mongodb1      latest              3bf216d921d6        2 minutes ago       96.2MB 
-       valid_lft forever preferred_lft forever+i2tch/mongodb       latest              eca7835d4fe6        11 minutes ago      1.03GB 
 +nginx               latest              2bcb04bdb83f        13 days ago         109MB 
 +centos              latest              9f38484d220f        3 weeks ago         202MB 
 +ubuntu              bionic              94e814e2efa8        4 weeks ago         88.9MB 
 +ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB 
 +hello-world         latest              fce289e99eb9        3 months ago        1.84kB
 </code> </code>
  
-Démarrez un conteneur dénommé **resotest** à partir d'une image de CentOS +Démarrez un conteneur à partir de l'image i2tch/mongodb1 :
  
 <code> <code>
-root@debian9:~# docker run -itd --name=resotest centos +root@debian9:~/mongodb# docker run ---name mongo1 i2tch/mongodb1 
-2169360fcbfdbd6e68ea969a95edeb6fc42603c23ee42f03ceec286276519855+bdb4bc0f81de8b5821f20d8609b9640abaaae7b4a7577c42b78d4bd34617d211 
 +docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "exec: \"docker-entrypoint.sh\": executable file not found in $PATH"
 +root@debian9:~/mongodb# ls -l 
 +total 16 
 +-rw-r--r-- 1 root root 10971 avril  9 13:56 docker-entrypoint.sh 
 +-rw-r--r-- 1 root root  3542 avril  9 13:55 Dockerfile
 </code> </code>
  
-Lancez ensuite la commande **docker network inspect bridge** à partir de la machine virtuelle hôte de Debian_9 :+<WRAP center round important> 
 +**Important** - Notez que le fichier docker-entrypoint.sh n'était pas exécutable ! 
 +</WRAP> 
 + 
 +Recompilez donc l'image :
  
 <code> <code>
-root@debian9:~# docker network inspect bridge +root@debian9:~/mongodb# docker rm mongo1 
-[ +mongo1 
-    { +root@debian9:~/mongodb# chmod +x docker-entrypoint.sh 
-        "Name""bridge", +root@debian9:~/mongodb# docker build . 
-        "Id""495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12", +Sending build context to Docker daemon   16.9kB 
-        "Created": "2017-09-07T07:44:49.942615596+01:00", +Step 1/22 FROM ubuntu:bionic 
-        "Scope""local", + ---> 94e814e2efa8 
-        "Driver""bridge", +Step 2/22 RUN groupadd -r mongodb && useradd -r -g mongodb mongodb 
-        "EnableIPv6": false, + ---> Using cache 
-        "IPAM"{ + ---> f40ac453fa97 
-            "Driver": "default", +Step 3/22 RUN set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates jq numactl ; if ! command -v ps > /dev/null; then apt-get install -y --no-install-recommends procps; fi; rm -rf /var/lib/apt/lists/* 
-            "Options": null, + ---> Using cache 
-            "Config": [ + ---> adc57da1b19f 
-                { +Step 4/22 ENV GOSU_VERSION 1.11 
-                    "Subnet""172.17.0.0/16", + ---> Using cache 
-                    "Gateway""172.17.0.1" + ---> 038e7de870b7 
-                } +Step 5/22 ENV JSYAML_VERSION 3.13.0 
-            ] + ---> Using cache 
-        }, + ---> 3bf216d921d6 
-        "Internal": false, +... 
-        "Attachable": false, +Removing intermediate container a98ae692fe1f 
-        "Ingress"false, + ---> 04c2e98927c3 
-        "ConfigFrom"{ +Step 17/22 RUN mkdir -p /data/db /data/configdb && chown -R mongodb:mongodb /data/db /data/configdb 
-            "Network": "" + ---> Running in d0f5bee34571 
-        }, +Removing intermediate container d0f5bee34571 
-        "ConfigOnly": false, + ---> d5b95e9e63e1 
-        "Containers"{ +Step 18/22 VOLUME /data/db /data/configdb 
-            "2169360fcbfdbd6e68ea969a95edeb6fc42603c23ee42f03ceec286276519855": { + ---> Running in c7626528a9b9 
-                "Name": "resotest", +Removing intermediate container c7626528a9b9 
-                "EndpointID": "fc74e519d69b9a2112be959c92cda22b67671b52efbbd36fadf66097ccbb1271", + ---> 4250613adf6a 
-                "MacAddress""02:42:ac:11:00:03", +Step 19/22 COPY docker-entrypoint.sh /usr/local/bin
-                "IPv4Address": "172.17.0.3/16", + ---> eedfd53da0f8 
-                "IPv6Address": "" +Step 20/22 ENTRYPOINT ["docker-entrypoint.sh"] 
-            }, + ---> Running in eff53d0213d1 
-            "ad672c3038245c25a36162d05820c21f7250557ac342582d0908d3ca33799e37": { +Removing intermediate container eff53d0213d1 
-                "Name": "mongo2", + ---> 716abf2faa87 
-                "EndpointID": "adc15132fb73b57ab14e960feeff1b965321ada411be8535b715b103b941d8cc", +Step 21/22 EXPOSE 27017 
-                "MacAddress": "02:42:ac:11:00:02", + ---> Running in 5139fcf19d7f 
-                "IPv4Address": "172.17.0.2/16", +Removing intermediate container 5139fcf19d7f 
-                "IPv6Address""" + ---> fc5896e08fd6 
-            } +Step 22/22 CMD ["mongod"] 
-        }, + ---> Running in 458d6f15cdf2 
-        "Options": { +Removing intermediate container 458d6f15cdf2 
-            "com.docker.network.bridge.default_bridge": "true", + ---> 12e00099ca8d 
-            "com.docker.network.bridge.enable_icc": "true", +Successfully built 12e00099ca8d 
-            "com.docker.network.bridge.enable_ip_masquerade": "true", +root@debian9:~/mongodb# 
-            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", +
-            "com.docker.network.bridge.name": "docker0", +
-            "com.docker.network.driver.mtu""1500" +
-        }, +
-        "Labels": {} +
-    } +
-]+
 </code> </code>
  
 <WRAP center round important> <WRAP center round important>
-**Important** Notez ici que les conteneurs **mongo2** et **resotest** ne disposent pas de la même adresse que l'interface **docker0** de la machine hôteCependant les adresses se trouvent dans le même segment - **172.17.0.0/16** indiqué par la sortie **"Subnet": "172.17.0.0/16"**.+**Important** Notez ici les lignes **Using cache**. Il est cependant possible de ne pas utiliser le cache en stipulant **--no-cache**. Notez aussi l'utilisation de conteneurs temporaires par étape nouvelle avec un commit vers une image et une suppression dudit conteneur. Dernièrement, notez que la compilation d'une image se fait à l'intérieur d'un **contexte**. Le **contexte** est le répertoire de build. **Attention** : tous les fichiers dans le contexte sont inclus dans l'image finale, même ceux qui sont inutiles.
 </WRAP> </WRAP>
  
-Vous pouvez déconnecter un conteneur du réseau en utilisant la commande suivante :+Consultez la liste des images de nouveau et renommez votre dernière image :
  
 <code> <code>
-root@debian9:~# docker network disconnect bridge resotest +root@debian9:~/mongodb# docker images 
-root@debian9:~# docker network inspect bridge +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
-+<none>              <none>              12e00099ca8d        42 seconds ago      377MB 
-    { +i2tch/mongodb1      latest              3bf216d921d6        10 minutes ago      96.2MB 
-        "Name": "bridge", +i2tch/mongodb       latest              eca7835d4fe6        19 minutes ago      1.03GB 
-        "Id": "495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12", +nginx               latest              2bcb04bdb83f        13 days ago         109MB 
-        "Created": "2017-09-07T07:44:49.942615596+01:00", +centos              latest              9f38484d220f        3 weeks ago         202MB 
-        "Scope": "local", +ubuntu              bionic              94e814e2efa8        4 weeks ago         88.9MB 
-        "Driver": "bridge", +ubuntu              latest              94e814e2efa8        4 weeks ago         88.9MB 
-        "EnableIPv6": false, +hello-world         latest              fce289e99eb9        3 months ago        1.84kB 
-        "IPAM":+root@debian9:~/mongodb# docker tag 12e0 i2tch/mongodb2 
-            "Driver": "default", +root@debian9:~/mongodb# docker images 
-            "Options": null, +REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE 
-            "Config":+i2tch/mongodb2      latest              12e00099ca8d        About a minute ago   377MB 
-                { +i2tch/mongodb1      latest              3bf216d921d6        11 minutes ago       96.2MB 
-                    "Subnet": "172.17.0.0/16", +i2tch/mongodb       latest              eca7835d4fe6        20 minutes ago       1.03GB 
-                    "Gateway": "172.17.0.1" +nginx               latest              2bcb04bdb83f        13 days ago          109MB 
-                } +centos              latest              9f38484d220f        3 weeks ago          202MB 
-            ] +ubuntu              bionic              94e814e2efa8        4 weeks ago          88.9MB 
-        }, +ubuntu              latest              94e814e2efa8        4 weeks ago          88.9MB 
-        "Internal": false, +hello-world         latest              fce289e99eb9        3 months ago         1.84kB
-        "Attachable"false, +
-        "Ingress"false, +
-        "ConfigFrom": { +
-            "Network": "" +
-        }, +
-        "ConfigOnly": false, +
-        "Containers":+
-            "ad672c3038245c25a36162d05820c21f7250557ac342582d0908d3ca33799e37":+
-                "Name": "mongo2", +
-                "EndpointID": "adc15132fb73b57ab14e960feeff1b965321ada411be8535b715b103b941d8cc", +
-                "MacAddress": "02:42:ac:11:00:02", +
-                "IPv4Address": "172.17.0.2/16", +
-                "IPv6Address": "" +
-            } +
-        }, +
-        "Options":+
-            "com.docker.network.bridge.default_bridge": "true", +
-            "com.docker.network.bridge.enable_icc": "true", +
-            "com.docker.network.bridge.enable_ip_masquerade": "true", +
-            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", +
-            "com.docker.network.bridge.name": "docker0", +
-            "com.docker.network.driver.mtu": "1500" +
-        }, +
-        "Labels": {} +
-    } +
-]+
 </code> </code>
  
-Créez maintenant votre propre réseau ponté appelé **my-bridged-network** :+Lancez un conteneur à partir de la dernière image :
  
 <code> <code>
-root@debian9:~# docker network create -d bridge --subnet 172.25.0.0/16 --gateway 172.25.0.1 my-bridged-network +root@debian9:~/mongodb# docker run -d --name mongo2 i2tch/mongodb2 
-ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3 +e91a055283f4d67cbd91d11bb3faa6f67925893cb18f9cc25023e72e0f7ed85a
-root@debian9:~# docker network ls +
-NETWORK ID          NAME                 DRIVER              SCOPE +
-495b3db75b0d        bridge               bridge              local +
-e1ed4de2f947        host                 host                local +
-ceb7ba749393        my-bridged-network   bridge              local +
-6bda460c97c6        none                 null                local             +
 </code> </code>
  
-Bien évidement, ce réseau est actuellement vide :+Utilisez la commande **docker ps** pour visualiser si le processus mongodb est bien démarré :
  
 <code> <code>
-root@debian9:~# docker network inspect my-bridged-network +root@debian9:~/mongodb# docker ps 
-+CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES 
-    { +e91a055283f4        i2tch/mongodb2      "docker-entrypoint.s…  28 seconds ago      Up 27 seconds       27017/tcp            mongo2 
-        "Name": "my-bridged-network", +d2ddb4f8ca8a        i2tch/mongodb       "bash                  21 minutes ago      Up 19 minutes                            mongo 
-        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", +c080793965de        nginx               "nginx -g 'daemon of…  About an hour ago   Up About an hour    0.0.0.0:81->80/tcp   suspicious_sanderson
-        "Created": "2017-09-07T10:03:17.063730665+01:00", +
-        "Scope": "local", +
-        "Driver": "bridge", +
-        "EnableIPv6": false, +
-        "IPAM":+
-            "Driver": "default", +
-            "Options": {}, +
-            "Config":+
-                { +
-                    "Subnet": "172.25.0.0/16", +
-                    "Gateway": "172.25.0.1" +
-                } +
-            ] +
-        }, +
-        "Internal"false, +
-        "Attachable": false, +
-        "Ingress": false, +
-        "ConfigFrom":+
-            "Network": "" +
-        }, +
-        "ConfigOnly": false, +
-        "Containers": {}, +
-        "Options": {}, +
-        "Labels": {} +
-    } +
-]+
 </code> </code>
  
-Lancez maintenant deux conteneurs et consultez les informations concernant le réseau +Connectez-vous à mongodb à partir de votre machine hôte :
  
 <code> <code>
-root@debian9:~# docker run -itd --name=centos1 centos +root@debian9:~/mongodb# docker inspect mongo2 | grep IP 
-9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e+            "LinkLocalIPv6Address": "", 
 +            "LinkLocalIPv6PrefixLen": 0, 
 +            "SecondaryIPAddresses": null, 
 +            "SecondaryIPv6Addresses": null, 
 +            "GlobalIPv6Address": "", 
 +            "GlobalIPv6PrefixLen": 0, 
 +            "IPAddress": "172.17.0.4", 
 +            "IPPrefixLen": 16, 
 +            "IPv6Gateway": "", 
 +                    "IPAMConfig": null, 
 +                    "IPAddress": "172.17.0.4", 
 +                    "IPPrefixLen": 16, 
 +                    "IPv6Gateway": "", 
 +                    "GlobalIPv6Address": "", 
 +                    "GlobalIPv6PrefixLen": 0, 
 +root@debian9:~/mongodb# 
 +root@debian9:~/mongodb# mongo --host 172.17.0.4 
 +MongoDB shell version v4.0.8 
 +connecting to: mongodb://172.17.0.4:27017/?gssapiServiceName=mongodb 
 +Implicit session: session { "id" : UUID("3feff8c0-5460-473b-b036-4aee64a314f7") } 
 +MongoDB server version: 4.1.9 
 +WARNING: shell and server versions do not match 
 +Server has startup warnings:  
 +2019-04-09T17:50:12.635+0000 I STORAGE  [initandlisten]  
 +2019-04-09T17:50:12.636+0000 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 
 +2019-04-09T17:50:12.636+0000 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem 
 +2019-04-09T17:50:13.458+0000 I CONTROL  [initandlisten]  
 +2019-04-09T17:50:13.459+0000 I CONTROL  [initandlisten] ** NOTE: This is a development version (4.1.9) of MongoDB. 
 +2019-04-09T17:50:13.459+0000 I CONTROL  [initandlisten] **       Not recommended for production. 
 +2019-04-09T17:50:13.459+0000 I CONTROL  [initandlisten]  
 +2019-04-09T17:50:13.459+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database. 
 +2019-04-09T17:50:13.459+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted. 
 +2019-04-09T17:50:13.460+0000 I CONTROL  [initandlisten]  
 +--- 
 +Enable MongoDB's free cloud-based monitoring service, which will then receive and display 
 +metrics about your deployment (disk utilization, CPU, operation statistics, etc).
  
-root@debian9:~# docker run -itd --name=centos2 centos +The monitoring data will be available on a MongoDB website with a unique URL accessible to you 
-aaed3bc8e404ee1bccd6c87b39de32332940b5391514691fc70188edb17c1d7c+and anyone you share the URL with. MongoDB may use this information to make product 
 +improvements and to suggest MongoDB products and deployment options to you.
  
-root@debian9:~# docker inspect --format='{{json .NetworkSettings.Networks}}'  centos1 +To enable free monitoring, run the following commanddb.enableFreeMonitoring() 
-{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12","EndpointID":"d7b87875688b45258fc867b6bb8b0a0592f5c5fa16857fe136e55b87b6698219","Gateway":"172.17.0.1","IPAddress":"172.17.0.3","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:03","DriverOpts":null}}+To permanently disable this reminderrun the following commanddb.disableFreeMonitoring() 
 +---
  
-root@debian9:~# docker inspect --format='{{json .NetworkSettings.Networks}}'  centos2 +> exit 
-{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"495b3db75b0d4bfcfc6da7c3e2af5f6addcdc227aa8b69b1e59a998be1819d12","EndpointID":"2bfe090dccef89495d437d8deba5765996a917544ab7fde28ef5199f4e907eb1","Gateway":"172.17.0.1","IPAddress":"172.17.0.4","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:04","DriverOpts":null}}+bye 
 +root@debian9:~/mongodb
 +</code>
  
-root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}centos1 +Notez que lors de la compilation de l'image finale, une image a été créée lors de chaque instruction dans le fichier Dockerfile sauf en cas d'utilisation d'une image en cache :
-172.17.0.3+
  
-root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 +<code> 
-172.17.0.4+root@debian9:~/mongodb# docker images -
 +REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
 +i2tch/mongodb2      latest              12e00099ca8d        5 minutes ago       377MB 
 +<none>              <none>              d5b95e9e63e1        5 minutes ago       377MB 
 +<none>              <none>              4250613adf6a        5 minutes ago       377MB 
 +<none>              <none>              eedfd53da0f8        5 minutes ago       377MB 
 +<none>              <none>              04c2e98927c3        5 minutes ago       377MB 
 +<none>              <none>              c6eae79e3d22        7 minutes ago       110MB 
 +<none>              <none>              c205179d538c        7 minutes ago       110MB 
 +<none>              <none>              b70835bebe35        7 minutes ago       110MB 
 +<none>              <none>              5b2827910929        7 minutes ago       110MB 
 +<none>              <none>              5b1f6df94d98        7 minutes ago       110MB 
 +<none>              <none>              a950a5d04b68        7 minutes ago       110MB 
 +<none>              <none>              c183cfecc5f0        7 minutes ago       110MB 
 +<none>              <none>              aadb5806f1b8        8 minutes ago       110MB 
 +<none>              <none>              8d538d38407e        8 minutes ago       110MB 
 +<none>              <none>              32d59bf23987        8 minutes ago       110MB 
 +i2tch/mongodb1      latest              3bf216d921d6        15 minutes ago      96.2MB 
 +<none>              <none>              038e7de870b7        15 minutes ago      96.2MB 
 +<none>              <none>              adc57da1b19f        15 minutes ago      96.2MB 
 +<none>              <none>              f40ac453fa97        15 minutes ago      89.3MB 
 +i2tch/mongodb       latest              eca7835d4fe6        24 minutes ago      1.03GB 
 +<none>              <none>              620057baa411        27 minutes ago      816MB 
 +<none>              <none>              67afc80e1424        33 minutes ago      816MB 
 +nginx               latest              2bcb04bdb83f        13 days ago         109MB 
 +centos              latest              9f38484d220f        3 weeks ago         202MB 
 +ubuntu              bionic              94e814e2efa8        4 weeks ago         88.9MB 
 +ubuntu              latest              94e814e2efa8        weeks ago         88.9MB 
 +hello-world         latest              fce289e99eb9        3 months ago        1.84kB
 </code> </code>
  
-Mettez le conteneur **centos1** dans le réseau **my-bridged-network** :+=====LAB #2 Créer un Dockerfile=====
  
-<code> +====2.1 Création et test du script====
-root@debian9:~# docker network connect my-bridged-network centos1+
  
-root@debian9:~# docker network inspect my-bridged-network +Créez un répertoire nommé myDocker :
-+
-    { +
-        "Name": "my-bridged-network", +
-        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", +
-        "Created": "2017-09-07T10:03:17.063730665+01:00", +
-        "Scope": "local", +
-        "Driver": "bridge", +
-        "EnableIPv6": false, +
-        "IPAM":+
-            "Driver": "default", +
-            "Options": {}, +
-            "Config":+
-                { +
-                    "Subnet": "172.25.0.0/16", +
-                    "Gateway": "172.25.0.1" +
-                } +
-            ] +
-        }, +
-        "Internal": false, +
-        "Attachable": false, +
-        "Ingress": false, +
-        "ConfigFrom":+
-            "Network": "" +
-        }, +
-        "ConfigOnly": false, +
-        "Containers":+
-            "9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e":+
-                "Name": "centos1", +
-                "EndpointID": "71e10e4e34ce8c42ef029e302f6ed372357f6fde8fd87fc2cbc1b14c2bdf6bb5", +
-                "MacAddress": "02:42:ac:19:00:02", +
-                "IPv4Address": "172.25.0.2/16", +
-                "IPv6Address": "" +
-            } +
-        }, +
-        "Options": {}, +
-        "Labels": {} +
-    } +
-]+
  
-root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos1 +<code> 
-172.17.0.3172.25.0.2+root@debian9:~/mongodbmkdir ~/myDocker 
 +root@debian9:~/mongodb# cd ~/myDocker 
 +root@debian9:~/myDocker# 
 </code> </code>
  
-<WRAP center round important> +Créez le fichier myEntrypoint.sh :
-**Important** : Notez  que le conteneur **centos1** se trouve dans deux réseaux. +
-</WRAP> +
- +
-Faites la même chose pour le conteneur **centos2** :+
  
 <code> <code>
-root@debian9:~# docker network connect my-bridged-network centos2+root@debian9:~/myDockervi myEntrypoint.sh 
 +root@debian9:~/myDocker# cat myEntrypoint.sh  
 +#!/bin/bash 
 +if [ -z "$myVariable" ]; then 
 + echo "La variable myVariable doit être renseignée" 
 + return 1 
 +fi
  
-root@debian9:~# docker network inspect my-bridged-network +while true; 
-[ +do 
-    { + echo $1 \($(date +%H:%M:%S)\); 
-        "Name": "my-bridged-network", + sleep "$myVariable"; 
-        "Id": "ceb7ba7493933c55d181bc92b1f799ca07bfe84b168d52a6ac648c1a906093f3", +done
-        "Created": "2017-09-07T10:03:17.063730665+01:00", +
-        "Scope""local", +
-        "Driver": "bridge", +
-        "EnableIPv6": false, +
-        "IPAM":+
-            "Driver": "default", +
-            "Options": {}, +
-            "Config":+
-                { +
-                    "Subnet": "172.25.0.0/16", +
-                    "Gateway": "172.25.0.1" +
-                } +
-            ] +
-        }, +
-        "Internal": false, +
-        "Attachable": false, +
-        "Ingress": false, +
-        "ConfigFrom":+
-            "Network": "" +
-        }, +
-        "ConfigOnly": false, +
-        "Containers":+
-            "9f36a628c72b383edfd4dc13ee4e4b2eaf5be0078d780f0334fcb8be0d977d0e":+
-                "Name": "centos1", +
-                "EndpointID": "71e10e4e34ce8c42ef029e302f6ed372357f6fde8fd87fc2cbc1b14c2bdf6bb5", +
-                "MacAddress": "02:42:ac:19:00:02", +
-                "IPv4Address": "172.25.0.2/16", +
-                "IPv6Address": "" +
-            }, +
-            "aaed3bc8e404ee1bccd6c87b39de32332940b5391514691fc70188edb17c1d7c":+
-                "Name": "centos2", +
-                "EndpointID": "34f533622f134b995097f1d3e6ce935158c1e5644201f896b42336738a81819c", +
-                "MacAddress": "02:42:ac:19:00:03", +
-                "IPv4Address": "172.25.0.3/16", +
-                "IPv6Address": "" +
-            } +
-        }, +
-        "Options": {}, +
-        "Labels": {} +
-    } +
-+
- +
-root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 +
-172.17.0.4172.25.0.3+
 </code> </code>
  
-Connectez-vous au conteneur **centos1** en lançant bash :+Testez ce script :
  
 <code> <code>
-root@debian9:~# docker exec -it centos1 bash+root@debian9:~/myDocker# myVariable=3 . ./myEntrypoint.sh salut 
 +salut (20:04:39) 
 +salut (20:04:42) 
 +salut (20:04:45) 
 +salut (20:04:48) 
 +salut (20:04:51) 
 +^C 
 +root@debian9:~/myDocker
 </code> </code>
  
-Vérifiez que la connectivité fonctionne :+Rendez ce script exécutable :
  
 <code> <code>
-[root@9f36a628c72b /]ping 172.25.0.3 +root@debian9:~/myDockerchmod u+x myEntrypoint.sh 
-PING 172.25.0.3 (172.25.0.3) 56(84) bytes of data. +
-64 bytes from 172.25.0.3: icmp_seq=1 ttl=64 time=0.100 ms +
-64 bytes from 172.25.0.3: icmp_seq=2 ttl=64 time=0.050 ms +
-64 bytes from 172.25.0.3: icmp_seq=3 ttl=64 time=0.050 ms +
-^C +
---- 172.25.0.3 ping statistics --- +
-3 packets transmitted, 3 received, 0% packet loss, time 1998ms +
-rtt min/avg/max/mdev = 0.050/0.066/0.100/0.025 ms+
 </code> </code>
  
-Les options possibles au niveau de la gestion du réseau sont vaste. Voici deux exemples supplémentaires. +Créez maintenant le fichier **Dockerfile** dans le répertoire **~/myDocker** :
- +
-Il est possible d'ajouter une adresse d'un serveur DNS au lancement d'un conteneur :+
  
 <code> <code>
-[root@9f36a628c72b /]# exit +root@debian9:~/myDockervi Dockerfile 
-exit +root@debian9:~/myDockercat Dockerfile 
-root@debian9:~# docker stop mongo2 +FROM centos:latest 
-mongo2 +MAINTAINER i2tch "infos@i2tch.eu" 
-root@debian9:~# docker rm mongo2 +COPY myEntrypoint.sh /entrypoint.sh 
-mongo2 +ENV myVariable 3 
-root@debian9:~# docker run -it --name mongo2 --dns 8.8.8.8 i2tch/mongodb2 bash +ENTRYPOINT ["/entrypoint.sh"] 
-root@735599480b45:/# cat /etc/resolv.conf  +CMD ["mycommand"]
-search home +
-nameserver 8.8.8.8 +
-root@735599480b45:/# +
 </code> </code>
  
-ou de passer une entrée pour le fichier **/etc/hosts** :+Générez maintenant l'image :
  
 <code> <code>
-root@735599480b45:/# exit +root@debian9:~/myDocker# docker build -t i2tch/mydocker . 
-exit +Sending build context to Docker daemon  3.072kB 
-root@debian9:~# docker stop mongo2 +Step 1/6 FROM centos:latest 
-mongo2 + ---> 9f38484d220f 
-root@debian9:~# docker rm mongo2 +Step 2/6 MAINTAINER i2tch "infos@i2tch.eu" 
-mongo2 + ---> Running in 02c700ed04da 
-root@debian9:~# docker run -it --name mongo2 --add-host mickeymouse:127.0.0.1 i2tch/mongodb2 bash +Removing intermediate container 02c700ed04da 
-root@718e7eab814f:/# cat /etc/hosts + ---> 4274107d52e2 
-127.0.0.1 localhost +Step 3/6 COPY myEntrypoint.sh /entrypoint.sh 
-::1 localhost ip6-localhost ip6-loopback + ---> 7a3923372768 
-fe00::0 ip6-localnet +Step 4/6 : ENV myVariable 3 
-ff00::0 ip6-mcastprefix + ---> Running in 3288bf6291ad 
-ff02::1 ip6-allnodes +Removing intermediate container 3288bf6291ad 
-ff02::2 ip6-allrouters + ---> 3edb630c1511 
-127.0.0.1 mickeymouse +Step 5/6 ENTRYPOINT ["/entrypoint.sh"
-172.17.0.2 718e7eab814f+ ---> Running in 8dcba2c41520 
 +Removing intermediate container 8dcba2c41520 
 + ---> 11962052539c 
 +Step 6/6 CMD ["mycommand"
 + ---> Running in f891fbcfaad0 
 +Removing intermediate container f891fbcfaad0 
 + ---> 7925ba23abb2 
 +Successfully built 7925ba23abb2 
 +Successfully tagged i2tch/mydocker:latest
 </code> </code>
  
-====Host==== +Lancez le conteneur :
- +
-Ce type de réseau est utilisé dans le cas où le réseau ne doit pas être isolé de l'hôte tout en isolant les autres aspects du conteneur. Les conteneurs utilisent la même interface que l'hôte en prenant la même adresse IP que la machine hôte. +
- +
-Dans le cas de la machine virtuelle, l'adresse IP de l'interface connectée au réseau local est **10.0.2.15** :+
  
 <code> <code>
-root@debian9:~# ip addr show enp0s3 +root@debian9:~/myDockerdocker run -it --name myDocker i2tch/mydocker 
-2enp0s3<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 +mycommand (18:07:12) 
-    link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff +mycommand (18:07:15) 
-    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 +mycommand (18:07:18) 
-       valid_lft 83772sec preferred_lft 83772sec +mycommand (18:07:21) 
-    inet6 fe80::a00:27ff:fe2e:7701/64 scope link  +^Cmycommand (18:07:22) 
-       valid_lft forever preferred_lft forever+mycommand (18:07:25) 
 +mycommand (18:07:28) 
 +^P^Q 
 +root@debian9:~/myDocker#
 </code> </code>
  
-Démarrez un conteneur à partir de l'image **centos** dans un réseau de type **host** :+Constatez que le conteneur est toujours en cours de fonctionnement :
  
 <code> <code>
-root@debian9:~# docker run -it --rm --network host --name centos1 centos bash +root@debian9:~/myDocker# docker ps 
-[root@debian9 /]# ip +CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES 
-1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 +140ecfdd80b7        i2tch/mydocker      "/entrypoint.sh myco…"   About minute ago   Up About a minute                        myDocker 
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +b3380889eb75        i2tch/mongodb2      "docker-entrypoint.s…"   7 minutes ago        Up 7 minutes        27017/tcp            mongo2 
-    inet 127.0.0.1/8 scope host lo +d2ddb4f8ca8a        i2tch/mongodb       "bash"                   38 minutes ago       Up 36 minutes                            mongo 
-       valid_lft forever preferred_lft forever +c080793965de        nginx               "nginx -g 'daemon of…"   About an hour ago    Up About an hour    0.0.0.0:81->80/tcp   suspicious_sanderson 
-    inet6 ::1/128 scope host  +root@debian9:~/myDocker# 
-       valid_lft forever preferred_lft forever +root@debian9:~/myDocker# docker logs myDocker | tail 
-2enp0s3<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 +mycommand (18:08:25) 
-    link/ether 08:00:27:2e:77:01 brd ff:ff:ff:ff:ff:ff +mycommand (18:08:28) 
-    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 +mycommand (18:08:31) 
-       valid_lft 82102sec preferred_lft 82102sec +mycommand (18:08:34) 
-    inet6 fe80::a00:27ff:fe2e:7701/64 scope link  +mycommand (18:08:37) 
-       valid_lft forever preferred_lft forever +mycommand (18:08:40) 
-3docker0<NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default  +mycommand (18:08:43) 
-    link/ether 02:42:38:f1:e7:ee brd ff:ff:ff:ff:ff:ff +mycommand (18:08:46) 
-    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 +mycommand (18:08:49) 
-       valid_lft forever preferred_lft forever +mycommand (18:08:52)
-    inet6 fe80::42:38ff:fef1:e7ee/64 scope link  +
-       valid_lft forever preferred_lft forever +
-[root@debian9 /]# hostname +
-debian9 +
-[root@debian9 /]# exit+
 </code> </code>
  
-====None==== +Arrêtez le conteneur :
- +
-Ce type de réseau est utilisé principalement dans le cas de l'utilisation d'un plugin réseau disponible dans le **[[https://hub.docker.com/search/?category=network&q=&type=plugin|Docker Hub]]**. +
- +
-Il est donc possible de lancer un conteneur totalement étanche grâce au réseau **none** :+
  
 <code> <code>
-root@718e7eab814f:/# exit +root@debian9:~/myDocker# docker stop -t 1 myDocker 
-exit +myDocker 
-root@debian9:~# docker stop mongo2 +root@debian9:~/myDocker# docker ps 
-mongo2 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES 
-root@debian9:~# docker rm mongo2 +b3380889eb75        i2tch/mongodb2      "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes        27017/tcp            mongo2 
-mongo2 +d2ddb4f8ca8a        i2tch/mongodb       "bash                  40 minutes ago      Up 38 minutes                            mongo 
-root@debian9:~# docker run -it --name mongo2 --network none i2tch/mongodb2 bash +c080793965de        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:81->80/tcp   suspicious_sanderson
-root@332aa9930f30:/+
 </code> </code>
  
-====Liens==== +Démarrez le conteneur :
- +
-Le mécanisme des liens entre conteneurs est très puissant et permet d'atteindre un autre conteneur facilement à condition que les deux conteneurs soient dans le même réseau. Créez donc un conteneur dénommé **centos3** qui est lié au conteneur **centos2** qu'il connait aussi sous l'alias **alias** :+
  
 <code> <code>
-root@332aa9930f30:/# exit +root@debian9:~/myDocker# docker start myDocker 
-exit +myDocker 
- +root@debian9:~/myDocker# docker ps 
-root@debian9:~# docker run -itd --name centos3 --link centos2:alias centos +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES 
-6a315259b2946c3bf2bb69f608cbe910d87edaadedb4f805e7a4dbf6af1eb916 +140ecfdd80b7        i2tch/mydocker      "/entrypoint.sh myco…  3 minutes ago       Up 10 seconds                            myDocker 
- +b3380889eb75        i2tch/mongodb2      "docker-entrypoint.s…  10 minutes ago      Up 10 minutes       27017/tcp            mongo2 
-root@debian9:~# docker ps -a +d2ddb4f8ca8a        i2tch/mongodb       "bash"                   40 minutes ago      Up 38 minutes                            mongo 
-CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES +c080793965de        nginx               "nginx -g 'daemon of…  About an hour ago   Up About an hour    0.0.0.0:81->80/tcp   suspicious_sanderson 
-6a315259b294        centos              "/bin/bash"              33 seconds ago      Up 32 seconds                                     centos3 +</code>
-332aa9930f30        i2tch/mongodb2      "docker-entrypoint...  3 minutes ago       Exited (127) 39 seconds ago                       mongo2 +
-aaed3bc8e404        centos              "/bin/bash"              16 minutes ago      Up 16 minutes                                     centos2 +
-9f36a628c72b        centos              "/bin/bash"              16 minutes ago      Up 16 minutes                                     centos1 +
-2169360fcbfd        centos              "/bin/bash"              20 minutes ago      Up 20 minutes                                     resotest +
-ea239635e141        testcache           "more /tmp/moment"       7 hours ago         Exited (0) 7 hours ago                            test1 +
-21b0490a93dd        i2tch/mydocker      "/entrypoint.sh my..."   7 hours ago         Exited (137) 6 hours ago                          myDocker +
-bdb4bc0f81de        i2tch/mongodb1      "docker-entrypoint...  18 hours ago        Created                       27017/tcp           mongo1 +
-f5b45072b831        i2tch/mongodb       "bash"                   19 hours ago        Exited (137) 6 hours ago                          mongo +
-9731a48f126a        nginx               "nginx -g 'daemon ...  19 hours ago        Exited (0) 6 hours ago                            cocky_gates +
-eacd70596e23        nginx               "nginx -g 'daemon ...  19 hours ago        Exited (0) 19 hours ago                           adoring_yonath +
-cffb4456e9c4        ubuntu              "/bin/bash"              20 hours ago        Exited (0) 20 hours ago                           i2tch+
  
-root@debian9:~# docker exec -it centos3 bash+Mettez le conteneur en pause :
  
-[root@6a315259b294 /]ping centos2 +<code> 
-PING alias (172.17.0.4) 56(84) bytes of data. +root@debian9:~/myDockerdocker pause myDocker 
-64 bytes from alias (172.17.0.4)icmp_seq=1 ttl=64 time=0.116 ms +myDocker 
-64 bytes from alias (172.17.0.4): icmp_seq=2 ttl=64 time=0.069 ms +root@debian9:~/myDocker# docker ps 
-64 bytes from alias (172.17.0.4): icmp_seq=ttl=64 time=0.068 ms +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                NAMES 
-64 bytes from alias (172.17.0.4): icmp_seq=4 ttl=64 time=0.070 ms +140ecfdd80b7        i2tch/mydocker      "/entrypoint.sh myco…"   minutes ago       Up 51 seconds (Paused                       myDocker 
-^C +b3380889eb75        i2tch/mongodb2      "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes            27017/tcp            mongo2 
---- alias ping statistics --- +d2ddb4f8ca8a        i2tch/mongodb       "bash"                   41 minutes ago      Up 39 minutes                                 mongo 
-4 packets transmitted, 4 received, 0% packet loss, time 2999ms +c080793965de        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour         0.0.0.0:81->80/tcp   suspicious_sanderson
-rtt min/avg/max/mdev = 0.068/0.080/0.116/0.023 ms +
- +
-[root@6a315259b294 /]# cat /etc/hosts +
-127.0.0.1 localhost +
-::1 localhost ip6-localhost ip6-loopback +
-fe00::0 ip6-localnet +
-ff00::0 ip6-mcastprefix +
-ff02::1 ip6-allnodes +
-ff02::2 ip6-allrouters +
-172.17.0.4 alias aaed3bc8e404 centos2 +
-172.17.0.2 6a315259b294 +
- +
-[root@6a315259b294 /]# exit +
-exit +
- +
-root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos3 +
-172.17.0.2+
 </code> </code>
  
-Notez cependant qu le lien est unidirectionnel :+Supprimez la pause :
  
 <code> <code>
-root@debian9:~# docker exec -it centos2 bash+root@debian9:~/myDocker# docker unpause myDocker 
 +myDocker 
 +root@debian9:~/myDocker# docker ps 
 +CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES 
 +140ecfdd80b7        i2tch/mydocker      "/entrypoint.sh myco…"   4 minutes ago       Up About a minute                        myDocker 
 +b3380889eb75        i2tch/mongodb2      "docker-entrypoint.s…"   11 minutes ago      Up 11 minutes       27017/tcp            mongo2 
 +d2ddb4f8ca8a        i2tch/mongodb       "bash                  42 minutes ago      Up 40 minutes                            mongo 
 +c080793965de        nginx               "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:81->80/tcp   suspicious_sanderson 
 +</code>
  
-[root@aaed3bc8e404 /]# ping centos3 +Lancez maintenant le conteneur avec un paramètre :
-pingcentos3: Name or service not known+
  
-[root@aaed3bc8e404 /]ping 172.17.0.2 +<code> 
-PING 172.17.0.2 (172.17.0.256(84bytes of data. +root@debian9:~/myDockerdocker rm -fv myDocker 
-64 bytes from 172.17.0.2icmp_seq=1 ttl=64 time=0.054 ms +myDocker 
-64 bytes from 172.17.0.2icmp_seq=2 ttl=64 time=0.035 ms +root@debian9:~/myDocker# docker run -d --name myDocker i2tch/mydocker "Up and Running" 
-64 bytes from 172.17.0.2icmp_seq=3 ttl=64 time=0.051 ms +0cf8c8c1bdf4cb05d9852900ecdf171ad9abad0fce29a9f040d5d8436285db65 
-64 bytes from 172.17.0.2icmp_seq=4 ttl=64 time=0.071 ms +root@debian9:~/myDocker# docker logs myDocker 
-^C +Up and Running (18:13:33) 
---- 172.17.0.2 ping statistics --- +Up and Running (18:13:36
-4 packets transmitted, 4 received, 0% packet loss, time 2997ms +Up and Running (18:13:39) 
-rtt min/avg/max/mdev = 0.035/0.052/0.071/0.015 ms +Up and Running (18:13:42) 
- +root@debian9:~/myDocker
-[root@aaed3bc8e404 /]+
 </code> </code>
  
-Dans le cas ci-dessus, **centos2** peut atteindre **centos3** en utilisant l'adresse IP **172.17.0.2** car **centos2** se trouve dans les deux réseaux avec les adresses IP 172.17.0.4 et 172.25.0.3  :+Changez la valeur de la variable d'environnement **myVariable** :
  
 <code> <code>
-[root@aaed3bc8e404 /]exit +root@debian9:~/myDockerdocker rm -fv myDocker 
-exit +myDocker 
-root@debian9:~# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos2 +root@debian9:~/myDocker# docker run ---name myDocker --env myVariable=1 i2tch/mydocker 
-172.17.0.4172.25.0.3+fbbe3b48c63310e37a3bad5fc962361c39c045a107f47980614efd6b2e8d3981 
 +root@debian9:~/myDocker# docker logs myDocker 
 +mycommand (18:14:47) 
 +mycommand (18:14:48) 
 +mycommand (18:14:49) 
 +mycommand (18:14:50) 
 +mycommand (18:14:51) 
 +mycommand (18:14:52) 
 +mycommand (18:14:53) 
 +mycommand (18:14:54) 
 +mycommand (18:14:55) 
 +mycommand (18:14:56) 
 +mycommand (18:14:57) 
 +root@debian9:~/myDocker# 
 </code> </code>
  
-=====LAB #8 Superviser les Conteneurs=====+====2.2 Bonnes Pratiques liées au Cache====
  
-====Les Journaux====+===Opérations Non-Idempotentes===
  
-Consultez les logs d'un conteneur :+Créez un répertoire **bestp** ainsi que le fichier Dockerfile suivant :
  
 <code> <code>
-root@debian9:~# docker logs mongo2 +root@debian9:~/myDockercd .. 
-root@332aa9930f30:/# ip addr +root@debian9:~mkdir bestp 
-bash: ip: command not found +root@debian9:~cd bestp 
-root@332aa9930f30:/ip address +root@debian9:~/bestpvi Dockerfile 
-bash: ip: command not found +root@debian9:~/bestpcat Dockerfile 
-root@332aa9930f30:/ifconfig +FROM ubuntu:latest 
-bash: ifconfig: command not found +RUN date +%N > /tmp/moment 
-root@332aa9930f30:/# ls +ENTRYPOINT ["more"] 
-bin  boot  core  data  dev  docker-entrypoint-initdb.d entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run sbin  selinux  srv  sys  tmp  usr  var +CMD ["/tmp/moment"]
-root@332aa9930f30:/# which ip +
-root@332aa9930f30:/# which ifconfig +
-root@332aa9930f30:/# docker run -itd --name centos3 --link centos2:alias centos +
-bash: docker: command not found +
-root@332aa9930f30:/# exit +
-exit+
 </code> </code>
  
-====Les Processus====+Le fichier Dokerfile contient une opération non idempotente. 
 + 
 +<WRAP center round important> 
 +**Important** : Une opération idempotente est une opération qui aboutit systématiquement au même résultat quand elle est lancée dans le même contexte. 
 +</WRAP>
  
-Consultez les processus d'un conteneur :+Compilez l'image :
  
 <code> <code>
-root@debian9:~# docker top centos3 +root@debian9:~/bestp# docker build -t testcache . 
-UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD +Sending build context to Docker daemon  2.048kB 
-root                31073               31060                                 10:20               pts/0               00:00:00            /bin/bash+Step 1/4 FROM ubuntu:latest 
 + ---> 94e814e2efa8 
 +Step 2/RUN date +%N > /tmp/moment 
 + ---> Running in 6c8c677c1549 
 +Removing intermediate container 6c8c677c1549 
 + ---> 66c3c88c57bb 
 +Step 3/4 ENTRYPOINT ["more"
 + ---> Running in e9658e591172 
 +Removing intermediate container e9658e591172 
 + ---> 81cb68241ec9 
 +Step 4/4 : CMD ["/tmp/moment"
 + ---> Running in 48974dc12faa 
 +Removing intermediate container 48974dc12faa 
 + ---> c55a42a18572 
 +Successfully built c55a42a18572 
 +Successfully tagged testcache:latest 
 +root@debian9:~/bestp#
 </code> </code>
  
-====L'Activité en Continu==== +Exécuter maintenant un premier conteneur à partir de l'image compilée :
- +
-Pour voir l'activité d'un conteneur, utilisez la commande suivante :+
  
 <code> <code>
-root@debian9:~# docker stats centos3 +root@debian9:~/bestp# docker run --name test1 -it testcache 
-CONTAINER           CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS +369009216
-centos3             0.00%               0B / 0B             0.00%               4.37kB / 952B       61.4kB / 0B         0+
 </code> </code>
  
-=====LAB #9 - Gestion des Ressources===== +Supprimez maintenant le conteneur et relancez la compilation de l'image :
- +
-La gestion de base des ressources allouées à un conteneur peut être réalisée par l'utilisation de deux options : +
- +
-  * --memory +
-  * --cpu-shares +
- +
-Par exemple, exécutez un conteneur à partir de l'image nginx avec une limite de la mémoire fixée à 256 Mo :+
  
 <code> <code>
-root@debian9:~# docker run --p 8081:80 --memory="256mnginx +root@debian9:~/bestp# docker rm test1 
-fc8ce16b3ec86433662719ca1f710a0588951d4f4abb8d90159b5953f419eef7+test1 
 +root@debian9:~/bestp# docker build -t testcache . 
 +Sending build context to Docker daemon  2.048kB 
 +Step 1/4 : FROM ubuntu:latest 
 + ---> 94e814e2efa8 
 +Step 2/4 RUN date +%N > /tmp/moment 
 + ---> Using cache 
 + ---> 66c3c88c57bb 
 +Step 3/4 : ENTRYPOINT ["more"] 
 + ---> Using cache 
 + ---> 81cb68241ec9 
 +Step 4/4 : CMD ["/tmp/moment"
 + ---> Using cache 
 + ---> c55a42a18572 
 +Successfully built c55a42a18572 
 +Successfully tagged testcache:latest 
 +root@debian9:~/bestp# 
 </code> </code>
  
-Exécutez ensuite la commande **docker stats** pour visualiser la limite de la mémoire :+Lancez un conteneur à partir de l'image re-compilée :
  
 <code> <code>
-CONTAINER ID        NAME                CPU %               MEM USAGE LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS +root@debian9:~/bestp# docker run --name test1 -it testcache 
-fc8ce16b3ec8        cool_blackwell      0.00%               1.793MiB / 256MiB   0.70%               2.45kB / 0B         0B / 0B             2+369009216
 </code> </code>
  
 <WRAP center round important> <WRAP center round important>
-**Important** Notez que la limite définie par **--memory** est une taille absolue tandis que la limite définie par **--cpu-shares** est relative.+**Important** Notez que les deux sorties des conteneurs sont identiques malgré le fait que la valeur de la commande date aurait du modifier le résultat obtenu lors de l'exécution du deuxième conteneur. La raison que ceci n'est pas le cas est l'utilisation dans la deuxième compilation du cacheSi cette commande avait été quelque chose de plus importante telle apt-get upgrade, le résultat pourrait être génant !
 </WRAP> </WRAP>
  
------+Pour contourner ce problème, il est possible d'utiliser l'option **--no-cache**. Malheureusement ceci produirait une compilation complète à chaque fois, même pour les opérations idempotentes. Il est donc conseillé de combiner les opérations non-idempotentes avec des opérations idempotentes dans la même ligne de commande afin d'invalider le cache pour cette ligne de commande seulement :
  
-=====ChangeLog=====+<code> 
 +root@debian9:~/bestp# vi Dockerfile  
 +root@debian9:~/bestp# cat Dockerfile  
 +FROM ubuntu:latest 
 +RUN date +%N > /tmp/moment \ 
 +    && echo "V1.1" > /tmp/version 
 +ENTRYPOINT ["more"
 +CMD ["/tmp/moment"
 +</code>
  
-====2020.01====+Supprimez maintenant le conteneur et relancez la compilation de l'image :
  
-Première version de 2020.+<code> 
 +root@debian9:~/bestp# docker rm test1 
 +test1 
 +root@debian9:~/bestp# docker build -t testcache . 
 +Sending build context to Docker daemon  2.048kB 
 +Step 1/4 : FROM ubuntu:latest 
 + ---> 94e814e2efa8 
 +Step 2/4 : RUN date +%N > /tmp/moment     && echo "V1.1" > /tmp/version 
 + ---> Running in 3d2a5cee6ac8 
 +Removing intermediate container 3d2a5cee6ac8 
 + ---> 75d0498a9676 
 +Step 3/4 : ENTRYPOINT ["more"
 + ---> Running in 88c0cec68659 
 +Removing intermediate container 88c0cec68659 
 + ---> 2aee524c8da4 
 +Step 4/4 : CMD ["/tmp/moment"
 + ---> Running in 82d2162bb701 
 +Removing intermediate container 82d2162bb701 
 + ---> a54c4af89994 
 +Successfully built a54c4af89994 
 +Successfully tagged testcache:latest 
 +</code>
  
-====2020.02====+Lancez un conteneur à partir de l'image re-compilée :
  
-  * **Fixed** - Dead Link : **https://docs.docker.com/engine/userguide/containers/dockervolumes/** **https://docs.docker.com/storage/volumes/** dans la section **Gestion Manuelle d'un Volume** du  **LAB #4 - Gestion des Volumes**.+<code> 
 +root@debian9:~/bestp# docker run --name test1 -it testcache 
 +746997174 
 +</code>
  
-  * **Fixed** - Erreur : **docker run -it --name mongo2 --net none i2tch/mongodb2 bash** > **docker run -it --name mongo2 --network none i2tch/mongodb2 bash** dans la section **None** du **LAB #5 - Gestion du Réseau**. 
-   
 ----- -----
-<html> + 
-<div align="center"> +Copyright © 2022 Hugh Norris.
-Copyright © 2020 Hugh NORRIS +
-</div> +
-</html>+
Menu