Docker & Co. - zacisco/notes GitHub Wiki

Install

Docker

For Debian (Source):

Add key:

wget -qO - https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Add repo:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Install:

sudo apt install docker-ce docker-ce-cli containerd.io

Dockerfile documentation

Link

Best Practices

Compose

Linux (Source)

Download Docker Compose binaries from the release page on this repository.

Rename the relevant binary for your OS to docker-compose and copy it to $HOME/.docker/cli-plugins

Or copy it into one of these folders for installing it system-wide:

  • /usr/local/lib/docker/cli-plugins OR /usr/local/libexec/docker/cli-plugins
  • /usr/lib/docker/cli-plugins OR /usr/libexec/docker/cli-plugins

(might require to make the downloaded file executable with chmod +x)

Latest now 2.4.1:

For active user:

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}

For all users:

DOCKER_CONFIG=${DOCKER_CONFIG:/usr/local/lib/docker}

then:

mkdir -p $DOCKER_CONFIG/cli-plugins
wget -O $DOCKER_CONFIG/cli-plugins/docker-compose https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-$(uname -s | tr '[A-Z]' '[a-z]')-$(uname -m)
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

Run on usual user

Rootless mode (prefered)

Simple access

execute and relogin: sudo usermod -aG docker $USER


Manuals

Docker

Dockerfile

Exec form

CMD ["cmd", "param1", "param2"] or ENTRYPOINT ["cmd", "param1", "param2"]

Shell form

CMD cmd param1 param2 or ENTRYPOINT cmd param1 param2 or ENTRYPOINT exec cmd param1 param2

Kubernates


Troubleshooting

Windows: //./pipe/docker_engine: Access is denied.

$env:DOCKER_HOST="tcp://0.0.0.0:2375"
docker ps

or

$env:DOCKER_HOST="tcp://localhost:2375"
docker ps

Since version 17.03.1-ce-win12 (12058) you must check Expose daemon on tcp://localhost:2375 without TLS if you use Docker for Windows and connecting via TCP

or


Some dockerfiles

Universal Java Build and Make Container (Gradle)
FROM gradle:jdk17-alpine AS build
#FROM gradle:jdk17 AS build
COPY --chown=gradle:gradle . /home/gradle/src
RUN cd /home/gradle/src && gradle build --no-daemon && echo $(ls -1 /home/gradle/src/build/libs/)
FROM openjdk:17-slim
#FROM openjdk:17-oracle

RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/

EXPOSE 8080

#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/*.jar"]
ENTRYPOINT exec java -Djava.security.egd=file:/dev/./urandom -jar /app/*.jar
Universal NodeJS Build and Make Container with NGINX
# Stage 1 - build project
FROM node:18-alpine3.15 as build-deps
WORKDIR /app
#COPY package.json yarn.lock ./
COPY package.json package-lock.json ./
RUN npm install --legacy-peer-deps
COPY . ./
RUN npm run build

# Stage 2 - build server
FROM nginx:1.12-alpine
COPY nginx/fullchain.pem /etc/ssl/certs/fullchain.pem
COPY nginx/privkey.pem /etc/ssl/private/privkey.pem
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-deps /app/build/ /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]
⚠️ **GitHub.com Fallback** ⚠️