Skip to main content

Command Palette

Search for a command to run...

Docker Developer Guide#02

Published
5 min read
Docker Developer Guide#02

Docker Concepts & Guide

Summary

  1. Concepts of Container
  2. Development Container
  3. Deploy of Container
  4. GitHub Package
  5. Upload Image to Docker Hub
  6. Docker Install WSL2
  7. Import & Export Container
  8. Docker Cheat Sheet
  9. Docker Volumes
  10. Portainer.io
  11. Setup /etc/docker/daemon.json
  12. References

1. Concepts of Contaitner

Diference Container x Virtual Machine

2. Developer Container

3. Deploy Container

3.1. Google Cloud Platform

Google Cloud Run

3.2. AWS

AWS Elastic Container Service

[Amazon EC2 Container Service - AWS
O Amazon EC2 container service (EC2 ECS) permite escalar contêineres do docker com alto desempenho, e executa…aws.amazon.com](https://aws.amazon.com/pt/ecs/ "https://aws.amazon.com/pt/ecs/")

[Amazon EC2 Container Service - AWS
O Amazon EC2 container service (EC2 ECS) permite escalar contêineres do docker com alto desempenho, e executa…aws.amazon.com](https://aws.amazon.com/pt/ecs/ "https://aws.amazon.com/pt/ecs/")

3.3. Kurbenetes

Diferences Beteween K8s x K3s

[What's the difference between k3s vs k8s - Civo.com
For those of you not in the know, Kubernetes is a "container orchestration platform". This effectively means taking…www.civo.com](https://www.civo.com/blog/k8s-vs-k3s "https://www.civo.com/blog/k8s-vs-k3s")

K3S

[Lightweight Kubernetes
The above figure shows the difference between K3s server and K3s agent nodes. For more information, see the…k3s.io](https://k3s.io/ "https://k3s.io/")

curl -sfL https://get.k3s.io | sh -  
# Check for Ready node,  
takes maybe 30 seconds  
k3s kubectl get node

3.4. Start Docker

sudo dockerd &

4. GitHub Package

  • ghcr.io

name: CI

on:
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:

- name: Checkout  
  uses: actions/checkout@v2  

- uses: azure/docker-login@v1  
  with:  
    login-server: ghcr.io  
    username: ${{ secrets.GH\_PACKAGES\_USER }}  
    password: ${{ secrets.GH\_PACKAGES\_TOKEN }}  

- run:   
    docker build -t ghcr.io/Software-Engineering-2030/sample-docker/demovideo:latest -f Dockerfile  
    docker tag ghcr.io/Software-Engineering-2030/sample-docker/demovideo ghrc.io/Software-Engineering-2030/sample-docker/demovideo:${{github.sha}}  

- run:   
    docker push ghcr.io/Software-Engineering-2030/sample-docker/demovideo:latest  
    docker push ghcr.io/Software-Engineering-2030/sample-docker/demovideo:${{github.sha}}

5. Upload Image to Docker Hub

  • docker ps -a
  • docker commit Imagem repo
  • docker push repo
  • docker login -username=username -email=email@docker.com
  • https://hub.docker.com

docker login -u=xxxx -p=yyyy

docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"

6. Docker Install WSL2

Pre-reqs

sudo apt update && sudo apt upgrade
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

Update Sources Ubuntu

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Install Docker Engine

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

Docker Permission Users

sudo usermod -aG docker $USER

Install Docker Composer

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Install Docker Service Start(*)

sudo service docker start

Docker Bash, Commit, Push

docker pull ubuntu

docker run -it -d ubuntu

docker exec -it aa3e7607dbac bash

docker commit aa3e7607dbac viannaandre/ubuntu-test:latest

docker push viannaandre/ubuntu-test:latest

GitHub Package

7. Import & Export Container

Export Container

# docker container ls -a

# docker export meudjango | gzip > meudjango.gz

Copy Container

scp meudjango.gz servidor:/destino

Destination Host

# ssh usuario@servidor

# zcat meudjango.gz | docker import - meudjango

Execute Host

# docker run -it meudjango bash

8. Docker Cheat Sheet

9. Docker Volumes

Docker Backup / Restore

Docker Backup / Restore

Docker Volume Bind

Docker Volume Bind

Docker Migration Strategy

How to persist and backup PostgreSQL Docker container

PostgreSQL Docker Backup

version: '3.1'  
services:  
  db:  
    image: postgres  
    restart: always  
    environment:  
      POSTGRES_USER: myuser  
      POSTGRES_PASSWORD: mypassword  
      POSTGRES_DB: mydb  
    volumes:  
       - ./data:/var/lib/postgresql/data

How to persist and backup MySQL Docker container

Structure

Docker Migration Volumes

Docker Backup / Restore Volumes

Backup a container

Backup docker data from inside container volumes and package it in a tarball archive. docker run --rm --volumes-from CONTAINER -v $(pwd):/backup busybox tar cvfz /backup/backup.tar CONTAINERPATH

Restore container from backup

Restore the volume with a tarball archive. docker run --rm --volumes-from CONTAINER -v $(pwd):/backup busybox bash -c "cd CONTAINERPATH && tar xvf /backup/backup.tar --strip 1"

¬

Docker Volume Backup / Restore (Checked)

Backup

#!/bin/bash  
# This script allows you to backup a single volume from a container  
# Data in given volume is saved in the current directory in a tar archive.  
CONTAINER_NAME=$1  
VOLUME_NAME=$2  

usage() {  
  echo "Usage: $0 [container name] [volume name]"  
  exit 1  
}  

if [ -z $CONTAINER_NAME ]  
then  
  echo "Error: missing container name parameter."  
  usage  
fi  

if [ -z $VOLUME_NAME ]  
then  
  echo "Error: missing volume name parameter."  
  usage  
fi  

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Restore

#!/bin/bash  
# This script allows you to restore a single volume from a container  
# Data in restored in volume with same backupped path  
NEW_CONTAINER_NAME=$1  

usage() {  
  echo "Usage: $0 [container name]"  
  exit 1  
}  

if [ -z $NEW_CONTAINER_NAME ]  
then  
  echo "Error: missing container name parameter."  
  usage  
fi  

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

Usage can be like this:

$ volume_backup.sh old_container /srv/www  
$ sudo docker stop old_container && sudo docker rm old_container  
$ sudo docker run -d --name new_container myrepo/new_container  
$ volume_restore.sh new_container

10. Portainer.io

portainer.io

Docker Volume

docker volume create portainer_data

Docker Container

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.0

https://localhost:9443

11. Setup /etc/docker/daemon.json

/etc/docker/daemon.json

{
"dns": ["8.8.8.8"]
}

Restart Docker:

sudo service docker restart

11. References