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:// | ||
