Docker

Docker Compose

Concept Docker Compose enable us to manage multi container environments in a file. Install As of Dec.2021 On Ubuntu 20.04 V2 https://docs.docker.com/compose/cli-command/#install-on-linux $ mkdir -p ~/.docker/cli-plugins/ $ curl -SL https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose $ chmod +x ~/.docker/cli-plugins/docker-compose $ docker compose version Docker Compose version v2.0.1 Sample: php-fpm with Nginx Directory structure $ tree . ├── README.md ├── docker-compose.yml ├── front-php │ └── Dockerfile └── nginx_conf └── front.conf docker-compose.yml: version: "3" services: front-nginx: image: nginx:latest container_name: front-nginx ports: - "80:80" volumes: - {{ path_to_php-fpm_app }}/myconf.

Rootless Docker

My environment Pop!_OS $ uname -a Linux system76 5.11.0-7620-generic #21~1624379747~20.10~3abeff8-Ubuntu SMP Wed Jun 23 02:23:59 UTC x86_64 x86_64 x86_64 GNU/Linux Configure rootless Docker https://docs.docker.com/engine/security/rootless/ $ dockerd-rootless-setuptool.sh install [ERROR] Missing system requirements. Run the following commands to [ERROR] install the requirements and run this tool again. ########## BEGIN ########## sudo sh -eux <<EOF # Install newuidmap & newgidmap binaries apt-get install -y uidmap EOF ########## END ########## OK… Run the command above and try again.

ENTRYPOINT or CMD

TL;DR Best practice: When your Docker container runs as a daemon, write entrypoint.sh and run it when container starts by ENTRYPOINT. CMD can be overwritten. When ENTRYPOINT, not CMD Suppose you want to run a command when the Docker container starts. In that case, you can use CMD. The following code runs the command sleep 5 when the container starts. FROM Ubuntu CMD sleep 5 # or # CMD ["sleep", "5"] The arguments of CMD can be replaced when its run time command by:

Docker network

Check your network When you deploy your docker container with port mapping, the network is automatically generated and the container assigned its own network. atlex@ ~ % docker network ls NETWORK ID NAME DRIVER SCOPE ea37d3b97d11 bridge bridge local 01573b79ea81 host host local 85b9bca4df78 none null local 0abac39fbea3 dockerfiletest bridge local` Details atlex@ ~ % docker network inspect dockerfiletest [ { "Name": "dockerfiletest_default", "Id": "0abac39fbea3f9fd55c1bf9ce1288b5623b3905c3ebd2ff9e60393bab8357a24", "Created": "2020-04-15T15:52:24.875480173Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.

Dockerfile

Terminology context: A build’s context is the set of files located in the specified PATH or URL1. Dockerfile sample FROM ubuntu:20.04 ENV TZ=America/Los_Angeles RUN mkdir -p /home/my_user COPY ./files/in_home /home/my_user/in_home ARG DEBIAN_FRONTEND=noninteractive RUN apt update && apt upgrade -y RUN apt install -y nginx php COPY ./files/nginx/my.conf /etc/nginx/sites-available/my.conf RUN ln -s /etc/nginx/sites-available/my.conf /etc/nginx/sites-enabled/my.conf CMD ["nginx", "-g", "daemon off;"] Here is the context. . ├── Dockerfile └── files ├── in_home(dir) └── nginx └── my.

Docker - intro

Install macOS Environment: macOS 10.15.3 (Intel chip), Mar. 2020. Installing Docker in macOS, the official document seems to recommend installing Docker Desktop with the installer. I don’t need desktop function so far, but this is not so critical when I learn Docker. And it is the easiest way to install Docker CLI in macOS. If you don’t have DockerID, please make it first. Related official Documents: https://docs.docker.com/docker-for-mac/install/ https://hub.docker.com/?overlay=onboarding Don’t forget that you need to exec docker once because of permissions of macOS.