User Tools

Site Tools


linux:docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
linux:docker [2023/05/23 20:17] – created Wulf Rajeklinux:docker [2025/04/16 23:45] (current) Wulf Rajek
Line 1: Line 1:
 ====== Docker ====== ====== Docker ======
  
-Copying files from/to images+https://docs.docker.com/storage/volumes/ 
 + 
 +===== Main install =====
 <code> <code>
-docker cp dockerimage/bla ./bla +apt-get -y install curl unzip dialog 
-docker cp ./bla dockerimage/bla+curl -fSSL get.docker.com | sh 
 +</code> 
 + 
 +===== Show logs ===== 
 + 
 +<code> 
 +docker logs --follow <containername> 
 +</code> 
 + 
 + 
 +===== Build image ===== 
 + 
 +To build the docker image based on a Dockerfile in the current directory, use: 
 +<code> 
 +docker build . 
 +</code> 
 + 
 +===== Update container ===== 
 + 
 +Update docker container to latest version via docker compose: 
 +<code> 
 +#Single container: 
 +docker compose pull calibre-web 
 +docker compose up -d calibre-web 
 +docker image prune 
 + 
 +#Update all containers: 
 +docker compose pull 
 +docker compose up -d 
 +docker image prune 
 +</code> 
 + 
 +===== Health Checks ===== 
 + 
 +Docker compose health checks: 
 +https://medium.com/geekculture/how-to-successfully-implement-a-healthcheck-in-docker-compose-efced60bc08e 
 + 
 +https://stefanjarina.gitbooks.io/docker/content/swarm-mode/healthchecks.html 
 +===== Copying files to/from containers ===== 
 + 
 +Copying files from/to containers 
 +<code> 
 +docker cp dockerimage:/bla ./bla 
 +docker cp ./bla dockerimage:/bla 
 +</code> 
 + 
 +===== Flatten docker image layers ===== 
 +Flatten docker image layers: 
 +<code> 
 +FROM yourbuildimage as build 
 +# your existing build steps here 
 +FROM scratch 
 +COPY --from=build / / 
 +CMD ["/your/start/script"
 +</code> 
 + 
 +===== Change mount points of containers ===== 
 +Change mount points of existing docker containers; 
 + 
 +e.g. mount /home/<user-name> folder of host to the /mnt folder of the existing (not running) container. 
 +  - stop docker container or whole docker engine <code>systemctl stop docker.service</code>  
 +  - Open configuration file corresponding to the stopped container, which can be found at /var/lib/docker/containers/99d...1fb/config.v2.json (may be config.json for older versions of docker). For pretty print use <code>vi <(jq . /var/lib/docker/containers/<container-ID>/config.v2.json) 
 +Save updates to a file: :w config.v2.json 
 +Exit vim: :q! 
 +Update existing file: jq -c . config.v2.json > /var/lib/docker/containers/<container-ID>/config.v2.json 
 + </code> 
 +  - Find MountPoints section: "MountPoints":{}. 
 +  - Replace the contents with something like this (you can copy proper contents from another container with proper settings):<code> 
 +"MountPoints":{"/mnt":{"Source":"/home/<user-name>","Destination":"/mnt","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/home/<user-name>","Target":"/mnt"},"SkipMountpointCreation":false}}</code> or the same (formatted):<code> 
 +  "MountPoints":
 +    "/mnt":
 +      "Source": "/home/<user-name>", 
 +      "Destination": "/mnt", 
 +      "RW": true, 
 +      "Name": "", 
 +      "Driver": "", 
 +      "Type": "bind", 
 +      "Propagation": "rprivate", 
 +      "Spec":
 +        "Type": "bind", 
 +        "Source": "/home/<user-name>", 
 +        "Target": "/mnt" 
 +      }, 
 +      "SkipMountpointCreation": false 
 +    } 
 +  } 
 +</code> 
 +  - Start or restart the docker service: <code>systemctl start docker.service 
 +service docker restart</code> 
 +  - Start the container if necessary: <code>docker start <container-name/ID></code> 
 + 
 + 
 +===== PHP&NGINX image ===== 
 + 
 +Containerised PHP & NGINX on Alpine, image size ~60MB: 
 +https://levelup.gitconnected.com/containerizing-nginx-php-fpm-on-alpine-linux-953430ea6dbc 
 +https://github.com/johnathanesanders/docker-nginx-fpm 
 + 
 +Log nginx to stdout in Dockerfile: 
 +<code> 
 +# forward request and error logs to docker log collector 
 +RUN ln -sf /dev/stdout /var/log/nginx/access.log \ 
 + && ln -sf /dev/stderr /var/log/nginx/error.log 
 +</code> 
 + 
 +===== Rename/Retag image files ===== 
 + 
 +<code> 
 +docker tag current/image:tag new/image:tag 
 +</code> 
 + 
 +===== cmd shell of container ===== 
 +<code> 
 +docker exec -it <mycontainer> bash 
 +docker exec -it <mycontainer> /bin/sh 
 +</code> 
 + 
 +===== GPU hardware acceleration ===== 
 + 
 +Make sure the relevant GPU drivers are installed on the base system, then pass through the device via docker compose. 
 +Check devices are available, there should be a device per GPU starting at renderD128 for the first GPU: 
 +<code> 
 +ls -la /dev/dri 
 +</code> 
 + 
 +<code> 
 +  devices: 
 +   - /dev/dri:/dev/dri 
 +</code> 
 + 
 +===== docker ps short ===== 
 +Short form of docker ps to only get the container names: 
 +<code> 
 +docker ps | sed 's/   */#/g' | cut -d "#" -f 7 
 +</code> 
 + 
 +===== docker running out of network addresses ===== 
 + 
 +Error response from daemon: all predefined address pools have been fully subnetted  
 + 
 +<code json /etc/docker/daemon.json> 
 +
 +"default-address-pools":
 +    {"base":"169.254.2.0/23","size":28}, 
 +    {"base":"169.254.4.0/22","size":28}, 
 +    {"base":"169.254.8.0/21","size":28}, 
 +    {"base":"169.254.16.0/20","size":28}, 
 +    {"base":"169.254.32.0/19","size":28}, 
 +    {"base":"169.254.64.0/18","size":28}, 
 +    {"base":"169.254.128.0/18","size":28}, 
 +    {"base":"169.254.192.0/19","size":28}, 
 +    {"base":"169.254.224.0/20","size":28}, 
 +    {"base":"169.254.240.0/21","size":28}, 
 +    {"base":"169.254.248.0/22","size":28} 
 +  ] 
 +
 +</code> 
 +<code> 
 +docker restart 
 +docker network prune
 </code> </code>
  
linux/docker.1684869479.txt.gz · Last modified: 2023/05/29 11:53 (external edit)