devops:docker
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
devops:docker [2023/11/01 07:15] – removed - external edit (Unknown date) 127.0.0.1 | devops:docker [2025/03/22 23:03] (current) – skipidar | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ===== Dоcker ===== | ||
+ | |||
+ | ==== Hyper-V ==== | ||
+ | The newest Version uses Hyper-V. | ||
+ | |||
+ | **The Hyper-V has a bug - enabling a Virtual Switch Disabled WiFi adapter, which makes it useless on Laptops.** | ||
+ | So it is recommended to use the old version, with docker-machine, | ||
+ | |||
+ | < | ||
+ | |||
+ | Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Packages / Containers with applications, | ||
+ | Pro is the automatical shipment | ||
+ | |||
+ | - setup on Windows | ||
+ | - create a local docker-host | ||
+ | - install existing Container locally (DB, AppServer, HTTP daemon) | ||
+ | - access the container. Modify WebServer page, ubuntu via console, deploy to jboss, setup nginx as a reverse proxy | ||
+ | - wire Containers together | ||
+ | - install same Container to AWS | ||
+ | - make a SWARM cluster from them | ||
+ | - enroll them automatically all together locally | ||
+ | - enroll them automatically all together to AWS | ||
+ | - setup an own registry | ||
+ | - create a docker dontainer | ||
+ | - test online services, ship, run your container from there | ||
+ | - setup a local registry | ||
+ | |||
+ | |||
+ | == Commands == | ||
+ | ^ Command | ||
+ | | commit | ||
+ | | run | runs a container from an image | | ||
+ | | start | starts an EXISTING, STOPPED container | ||
+ | | stop | stops an EXISTING, RUINNING container | ||
+ | | exec | executes a command INSIDE of EXISTING, RUNNING container | ||
+ | | docker search NAME | Search for an image with the specified name. | | ||
+ | | docker pull NAME | Pull an image into your local file system with he specified name. | | ||
+ | | docker version | ||
+ | | docker run -td -p 80:8080 NAME | Run a docker image with daemon mode with port 80 forwarded to port 8080 in the container. | ||
+ | | docker start CONTAINERID | ||
+ | | docker stop CONTAINERID | ||
+ | | docker ps | List all RUNNING container | ||
+ | | docker ps -a | List all container | ||
+ | | docker login -u USERNAME -p PASSWORD -e EMAIL registryURL | ||
+ | | docker rm CONTAINERID | ||
+ | | docker images -a | list all images | ||
+ | | docker rmi IMAGEID | ||
+ | | docker logs | Fetch the logs from a docker container. | ||
+ | | docker inspect IMAGE_NAME | ||
+ | | docker run -d IMAGE_NAME | ||
+ | | docker run -P IMAGE_NAME | ||
+ | | docker exec -it CONTAINERID COMMAND | ||
+ | | docker inspect CONTAINER_NAME | ||
+ | | docker-machine ls | list existing hosts | | ||
+ | | docker-machine create --driver virtualbox HOSTNAME | ||
+ | | docker-machine rm HOSTNAME | ||
+ | | docker-machine restart HOSTNAME | ||
+ | | < | ||
+ | | docker attach CONTAINERNAME | ||
+ | | docker commit jira skipidar/ | ||
+ | | docker push skipidar/ | ||
+ | | docker exec < | ||
+ | | docker run --restart=always jenkinsci/ | ||
+ | | docker top < | ||
+ | | docker stats | The resources consumed by docker | ||
+ | | docker container logs -f < | ||
+ | |||
+ | |||
+ | == Glossary == | ||
+ | |||
+ | |Docker-Machine| Daemon, which runs on a Linux Server | | ||
+ | |VirtualBox| Virtual Machine for Windows, Linux, ... Docker installs a small Linux in it. In this Linux Docker-Daemon runs Containers. | | ||
+ | |Docker-Daemon| Daemon, which runs on a Linux Server and executes containers (as separated processes) | | ||
+ | |Docker-Host-Host|< | ||
+ | * Docker-aemon can only run in Linux | ||
+ | * If you install Docker-Daemon on Windows/ | ||
+ | * The Windows/ | ||
+ | |||
+ | {{http:// | ||
+ | {{http:// | ||
+ | |||
+ | </ | ||
+ | |Container-Host, | ||
+ | |Compose| Allows definition and instantiation of multi-container-applications. If Application requires multiple containers, e.g. for DB, AppServer, HttpHost containers have to know each other. Ips, ports etc. | | ||
+ | |Kinematic| GUI for Container management. Can start new containers. Can stop, restart existing.| | ||
+ | |Notary|< | ||
+ | - upload your private key to Notary Server | ||
+ | - sign your **docker image** with your **private key** | ||
+ | - user of your docker-image will get your public-key/ | ||
+ | </ | ||
+ | |Swarm| Tool which allows to control multiple containers as one. To command a Swarm of Docker-Hosts - the same Interface is used, as for a single Docker-Host. Swarm distributes the Images then on multiple instances by different strategies. The commander doesn' | ||
+ | |Dockerfile || | ||
+ | |||
+ | |Docker Hub|| | ||
+ | |DUCP Docker Universal Control Plane|| | ||
+ | |DDC Docker Data Center)|| | ||
+ | |DTR Docker Trusted Registry|| | ||
+ | |||
+ | |||
+ | |||
+ | {{http:// | ||
+ | |||
+ | ==== Setup on Windows ==== | ||
+ | |||
+ | === Using Docker Desktop === | ||
+ | The command & ' | ||
+ | |||
+ | < | ||
+ | & ' | ||
+ | </ | ||
+ | |||
+ | === Running containers | ||
+ | |||
+ | Example | ||
+ | < | ||
+ | docker run -it --gpus all -p 8080:8080 -v $HOME/ | ||
+ | | ||
+ | </ | ||
+ | |||
+ | === Using Windows native Hyper-V === | ||
+ | |||
+ | Achtung: currently there is a bug, which disabled Wireless Adapter, as soon as the Virtual Ethernet Switch is enabled in Hyper-V. | ||
+ | This means no WiFi may internet may be shared with a Hyper-V VM, which makes Hyper-V useless on Laptops. | ||
+ | |||
+ | **This is why it is recommended using VirtualBox to install docker on Windows.** | ||
+ | |||
+ | Hyper-V must be enabled in BIOS as following. | ||
+ | |||
+ | < | ||
+ | Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V –All | ||
+ | |||
+ | Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All | ||
+ | |||
+ | </ | ||
+ | |||
+ | === Using DOcker-Machine on Oracle VirtualBox === | ||
+ | |||
+ | |||
+ | |< | ||
+ | <fc # | ||
+ | On **Docker Quickstart Terminal** the container paths e.g. commands. \\ | ||
+ | will be then resolved to windows like **/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Setting up docker is easy: use **Docker Toolbox** https:// | ||
+ | |||
+ | **Configure Git Linux Shell** | ||
+ | Docker tools must be executed in a linux shell! \\ | ||
+ | On Windows this shell is provided by Git. \\ | ||
+ | Add **git.exe location**, **ssh.exe location** to your path: | ||
+ | < | ||
+ | C:\Program Files (x86)\Git\cmd | ||
+ | C:\Program Files (x86)\Git\bin | ||
+ | </ | ||
+ | |||
+ | **Start Linux Shell for docker:** | ||
+ | < | ||
+ | sh -li | ||
+ | </ | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | == create a local docker-host named " | ||
+ | < | ||
+ | docker-machine create --driver virtualbox my-default | ||
+ | </ | ||
+ | |||
+ | |||
+ | == switch to the new docker-host == | ||
+ | In order to start / stop containers on new docker-host you have to modify environment variables, so that new host's ip etc. is saved there | ||
+ | |||
+ | Go to e.g. powershell and type | ||
+ | < | ||
+ | $ docker-machine.exe env --shell powershell my-default | ||
+ | |||
+ | $Env: | ||
+ | $Env: | ||
+ | $Env: | ||
+ | $Env: | ||
+ | # Run this command to configure your shell: | ||
+ | # & docker-machine.exe env --shell powershell my-default | Invoke-Expression | ||
+ | </ | ||
+ | |||
+ | |||
+ | At the bottom there is an instruction. follow it - type | ||
+ | < | ||
+ | & docker-machine.exe env --shell powershell my-default | Invoke-Expression | ||
+ | </ | ||
+ | |||
+ | Now you are able to control docker-host " | ||
+ | |||
+ | == Script the switching to docker-host == | ||
+ | |||
+ | It makes sence to write a script, to switch to other docker-hosts faster. \\ | ||
+ | Here is a powershell script, which does the job | ||
+ | < | ||
+ | $arg1=$args[0] | ||
+ | |||
+ | if($arg1 -ne $null){ | ||
+ | docker-machine.exe env --shell powershell $name | ||
+ | & docker-machine.exe env --shell powershell $name | Invoke-Expression | ||
+ | }else{ | ||
+ | echo " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Store it e.g. under " | ||
+ | < | ||
+ | & " | ||
+ | </ | ||
+ | |||
+ | |||
+ | It is probably a good idea to add " | ||
+ | |||
+ | |||
+ | |||
+ | ==== Exception when creating the docker host on Windows " | ||
+ | |||
+ | < | ||
+ | Error creating machine: Error in driver during machine creation: Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm default –type headless failed: | ||
+ | VBoxManage.exe: | ||
+ | VBoxManage.exe: | ||
+ | VBoxManage.exe: | ||
+ | Details: 00: | ||
+ | < | ||
+ | |||
+ | Fix | ||
+ | < | ||
+ | I opened my Control Panel > Network & Internet > Network Connections and located my VirtualBox Host-Only Network adapter, called VirtualBox Host-Only Network #6 on my machine. I right-clicked it and selected the Properties, and checked the un-checked VirtualBox NDIS6 Bridged Networking Driver and started VirtualBox again. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== install existing Container locally (DB, AppServer, HTTP daemon) ==== | ||
+ | |||
+ | Install existing container " | ||
+ | < | ||
+ | docker run hello-world | ||
+ | </ | ||
+ | |||
+ | |||
+ | Install JBoss via Kitematic \\ | ||
+ | {{http:// | ||
+ | |||
+ | Install Apache container. There are many of them, I with that of user " | ||
+ | < | ||
+ | docker pull bitnami/ | ||
+ | docker run bitnami/ | ||
+ | </ | ||
+ | {{http:// | ||
+ | |||
+ | Checking from console whether containers are running is done via: | ||
+ | |||
+ | Docker hosts? | ||
+ | < | ||
+ | docker-machine ls | ||
+ | </ | ||
+ | |||
+ | Docker images? | ||
+ | < | ||
+ | docker ps | ||
+ | </ | ||
+ | |||
+ | One Dockerhost " | ||
+ | Two containers " | ||
+ | {{http:// | ||
+ | |||
+ | |||
+ | ==== Configure the container ==== | ||
+ | |||
+ | == Default configurations via KITEMATIC == | ||
+ | |||
+ | To start the container you can use KITEMATIC. \\ | ||
+ | The default values will be used to start the container. | ||
+ | |||
+ | The settings are listed as in form of environment variables: | ||
+ | |||
+ | {{http:// | ||
+ | |||
+ | |||
+ | == To retrieve configurations use " | ||
+ | |||
+ | < | ||
+ | PS D:\> docker inspect f94c1c97220c | ||
+ | [ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | 38, | ||
+ | 199 | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | "/ | ||
+ | "/ | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | "/ | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | |||
+ | The important parameters are " | ||
+ | Consider them, when running the container. | ||
+ | |||
+ | < | ||
+ | # ldap | ||
+ | docker run --name adop-ldap -d -p 389:389 --env INITIAL_ADMIN_PASSWORD=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Container start ==== | ||
+ | |||
+ | Starting a self restarting (--restart=always), | ||
+ | < | ||
+ | docker run -p 8080:8080 -p 443:443 -t -d -i --restart=always --name jenkins jenkinsci/ | ||
+ | </ | ||
+ | |||
+ | ==== Entering the container interactively ==== | ||
+ | |||
+ | To start an interactive shell use the exec command. You can execute **bash** or **shell (sh)** depends on what is installed inside of the container.\\ | ||
+ | The **-i** tells to start the last command interactively.\\ | ||
+ | The **-t** tells to allocate a pseudo | ||
+ | |||
+ | **-u 0** tells to start the command as user 0, which is root. Gives you the freedom to do everything inside it. | ||
+ | |||
+ | < | ||
+ | docker exec -u 0 -it < | ||
+ | docker exec -u 0 -it < | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Create a container with a service running in background ==== | ||
+ | |||
+ | This ais a short example about creating a long running container on an example of nginx: | ||
+ | |||
+ | A container with installed nginx " | ||
+ | |||
+ | Create file **startScript.sh** | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | # starts the nginx process | ||
+ | / | ||
+ | |||
+ | # keep the container alive by printing the nginx logs to STDOUT. Will be retrievable via " | ||
+ | tail -f / | ||
+ | </ | ||
+ | |||
+ | |||
+ | Create file **ubuntu-webserver-dockerfile.txt** | ||
+ | < | ||
+ | FROM schajtan/ | ||
+ | ADD startScript.sh / | ||
+ | ENTRYPOINT ["/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | * Now execute the commands to **build** an image, | ||
+ | * **run** a long running container from the new image, | ||
+ | * show the **STDOUT** of the container | ||
+ | |||
+ | |||
+ | < | ||
+ | # builds the image from a dockerfile | ||
+ | docker build --tag schajtan/ | ||
+ | |||
+ | # run a container, -P to redirect all exposed ports to random ports | ||
+ | docker run -P --name ubuntu3 schajtan/ | ||
+ | <CTRL + SHIFT + C> - exits the container | ||
+ | docker logs ubuntu3 | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Backup ==== | ||
+ | |||
+ | |||
+ | # stores the IMAGE. Attention: export import does not include the metadata of the image | ||
+ | < | ||
+ | docker save -o d: | ||
+ | docker load -i d: | ||
+ | </ | ||
+ | |||
+ | ==== Monitoring ==== | ||
+ | |||
+ | To show the current ressource usage by container name use " | ||
+ | < | ||
+ | docker stats $(docker ps --format ' | ||
+ | </ | ||
+ | |||
+ | ==== Logs within container ==== | ||
+ | You can send the logs, happened within the container - to docker-service. | ||
+ | For that you need to log to STDOUT within the container. | ||
+ | |||
+ | E.g. if you have a cron job - the output must be redirected as following: | ||
+ | < | ||
+ | 07 2 * * * / | ||
+ | </ | ||
+ | |||
+ | And from docker host you will be able to get the logs via | ||
+ | < | ||
+ | sudo docker logs < | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Host to Container connectivity ==== | ||
+ | |||
+ | There is a network-bridge between the host and containers. | ||
+ | You can reach the containers from the host. | ||
+ | |||
+ | Docker offers different networking modes when running containers. Depending on the mode you choose you would connect to your MySQL database running on the docker host differently. | ||
+ | |||
+ | |||
+ | Docker creates a bridge named **docker0** by default. Both the docker host and the docker containers have an IP address on that bridge. | ||
+ | |||
+ | == Host == | ||
+ | on the Docker host, type **sudo ip addr** show docker0 you will have an output looking like: | ||
+ | < | ||
+ | [vagrant@docker: | ||
+ | 4: docker0: < | ||
+ | link/ether 56: | ||
+ | inet 172.17.42.1/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Here my host has the IP address **172.17.42.1**. | ||
+ | |||
+ | |||
+ | == Container == | ||
+ | INside the container do: **ip addr show eth0**. \\ | ||
+ | Here it is | ||
+ | < | ||
+ | root@e77f6a1b3740:/# | ||
+ | 863: eth0: < | ||
+ | link/ether 66: | ||
+ | inet 172.17.1.192/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Here my container has the IP address **172.17.1.192**. Now look at the routing table: | ||
+ | |||
+ | < | ||
+ | root@e77f6a1b3740:/# | ||
+ | Kernel IP routing table | ||
+ | Destination | ||
+ | default | ||
+ | 172.17.0.0 | ||
+ | </ | ||
+ | |||
+ | |||
+ | So the IP Address of the docker host **172.17.42.1** is set as the default route and is accessible from your container. | ||
+ | |||
+ | |||
+ | ==== Docker Context ==== | ||
+ | The files/ | ||
+ | |||
+ | See https:// | ||
+ | |||
+ | You can explicitly create a tar.gz package and reference it during the build command. \\ | ||
+ | The tar ball has a flat hierarchy here, but may have any structure. Only, when referencing the files inside - one should consider this structure. | ||
+ | |||
+ | The DockerFile is referenced explicitely inside the tar.gz ball (**-f ./ | ||
+ | < | ||
+ | # create the context tar.gz | ||
+ | tar -C /vagrant -cvf / | ||
+ | |||
+ | # build the container with an existing gzipped context | ||
+ | docker build --no-cache -t runapp -f ./ | ||
+ | |||
+ | # run the container | ||
+ | docker run --name runAppContainer -d -p 8080:8080 runapp | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Start bash in container as root ==== | ||
+ | If you would like to connect to the container MYCONTAINERNAME as root, | ||
+ | < | ||
+ | docker exec -it --user root MYCONTAINERNAME bash | ||
+ | < | ||
+ | |||
+ | ====== ADOP ====== | ||
+ | |||
+ | The Accenture ADOP stack is listed here: https:// | ||
+ | |||
+ | |||
+ | The script to start the some relevant apps: | ||
+ | < | ||
+ | # run the code only in powershell / cmd - in GIT-Bash the paths, relative to container are resolved relative to the windows drive | ||
+ | |||
+ | # to reproduce the default start via KITEMATIC us " | ||
+ | |||
+ | |||
+ | |||
+ | $ip = " | ||
+ | $passwordLdap = " | ||
+ | |||
+ | |||
+ | # ldap | ||
+ | docker run --name adop-ldap -d -p 389:389 --env INITIAL_ADMIN_PASSWORD=" | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | # ldap phpadmin. Login " | ||
+ | docker run --name=adop-ldap-phpadmin -d -p 32774:80 --env LDAP_SERVER_HOST=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Tools ====== | ||
+ | TODO: add | ||
+ | http:// | ||
+ | |||
+ | ^^^ | ||
+ | |Docker|| | ||
+ | |Rancher|| | ||
+ | |||
+ | |||
+ | ====== Debug ====== | ||
+ | |||
+ | === Attach === | ||
+ | |||
+ | To find out, why the container is not starting - attach to it, to see what is happening in standard-out life: | ||
+ | |||
+ | < | ||
+ | docker attach the-container-name | ||
+ | </ | ||
+ | |||
+ | It will display the error like: | ||
+ | |||
+ | < | ||
+ | Error: parsing template / | ||
+ | </ | ||
+ | |||
+ | === View stdout history === | ||
+ | |||
+ | STDOUT of process 1 is captured and stored on the host. | ||
+ | To see the Stdout history do: | ||
+ | |||
+ | < | ||
+ | docker logs yourcontainername | ||
+ | </ | ||
+ | |||
+ | More: https:// |