👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles Büro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine Stehhöhe
            • VW Bus Erfahrungen
          • Camper gross - Stehhöhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • Spülmaschine 2021
      • Hebe-Schiebetür
      • Gasgrill
      • Minibar / Mini-Kühlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB Talentförderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Images zum Rumspielen
  • Ausführungsmodi eines Containers
  • Umgebungsvariablen setzen
  • Entrypoint override
  • Docker in Docker

Was this helpful?

  1. Build und Deployment
  2. Container
  3. Docker
  4. Docker run

docker run

Beim Erzeugen eines Containers per docker run wird aus einem Image ein Container instanziiert. Es wird geschaut, ob das Image lokal schon vorhanden ist. Wenn nicht, wird es vom konfigurierten Repository (z. B. DockerHub) automatisch runtergeladen.

Container können nur einen einzigen Befehl ausführen (ich nenne die mal Command-Container) und stoppen dann automatisch. Sie bleiben dann als Container noch lokal auf der Platte vorhanden (sichtbar per docker ps -a). Bei solchen Containern macht ein start per docker start container-id keinen Sinn, weil sie sofort bereits alles getan haben, was ihnen aufgetragen wurde. Die Logausgabe kann per docker logs container-id sowohl bei laufenden als auch bei gestoppten Containern ansehen. Man kann sie dementsprechend auch einfach per docker rm container-id löschen.

Container, die als dauerhafter Service laufen sollen (ich nenne sie Service-Container), arbeiten hingegen dauerhaft ... werden also nicht sofort wieder gestoppt. Auf solche Container kann man sich dann per docker exec -it bash auf die Console verbinden und umschauen. Solche Container können auch gestoppt werden (docker stop container-id) und später wieder gestartet werden (docker start container-id) wodurch sie wieder in den letzten Status gehen und im best-case einfach ihren Dienst wieder absolvieren. Sie behalten somit also ihren Zustand!!! Hat man dem Container einen Namen beim Start gegeben (docker run --name bla hello-world), dann ist der Container benannt (hier bla) und ein anschließendes docker run --name bla hello-world ist nicht möglich, weil der Container noch existiert (aber evtl. gestoppt ist). Man muß den Container dann evtl. erst stoppen (docker stop bla) und dann löschen (docker rm bla) bevor ein neuer Container mit diesem Namen angelegt werden kann.

ACHTUNG: es gibt auch den Befehl docker start my-container, der einen beendeten Container startet (docker stop my-container stoppt einen laufenden Container).


Images zum Rumspielen

Zum Rumspielen genügen sehr kleine Images wie

  • hello-world

  • busybox (< 5MB)


Ausführungsmodi eines Containers

Temporär:

sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

Nachdem Hello world ausgegeben wurde, wird der Container auch gleich wieder gestoppt. Der Container wird bei docker ps nicht mehr angezeigt, nur noch bei docker ps -a (-a = all).

Interaktiv:

sudo docker run -t -i ubuntu:14.04 /bin/bash

anschließend landet man auf der Konsole des Containers ... und siehe da: es sieht aus wie ein typisches Linux-Filesystem. Ausschließlich am geänderten Prompt (z. B. root@aab3edb0b6f3:/etc#) merkt man, daß die Shell scheinbar gewechselt wurde.

Wenn die Console (per exit oder Ctrl-D) verlassen wird, dann wird der Container auch gestoppt.

Dämonized:

sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

Verläßt man einen laufenden Container mit Ctrl-C, so erhält er ein SIGKILL Event, so daß der Container noch sauber runterfahren kann. Will man den Container stattdessen im Hintergrund weiterlaufen lassen, so sollte man Ctrl-p Ctrl-q verwenden, um die Console zu verlassen.


Umgebungsvariablen setzen

Häufig basieren Docker-Container auf Umgebungsvariablen, um eine Integration in die jeweilige Infrastruktur zu ermöglichen. Solche Umgebungsvraiablen können per -e gesetzt werden:

docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw

Entrypoint override

docker run -it --entrypoint "/bin/ls" ubuntu:14.04 -al /mnt


Docker in Docker

Ich wollte meinen Jenkins als Docker Container laufen lassen und gleichzeitig Docker Agents verwenden. Hierzu muß aus einem Docker Container ein anderer Docker Container gestartet werden. Ob das überhaupt funktioniert habe ich folgendermaßen geprüft:

# start Alpine container
docker run --rm --name alp -it -v /var/run/docker.sock:/var/run/docker.sock maven:3-alpine sh

# enter Docker Container console
docker exec -it alp sh

# install Docker
echo http://dl-6.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories
apk update
apk add docker

# test starting Docker containers
docker run hello-world

Viola - cool :-)

PreviousDocker runNextdocker network

Last updated 3 years ago

Was this helpful?