You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
YIk Teng Hie b15ad4ba1d docker host networks 5 years ago
..
README.md docker host networks 5 years ago

README.md

Build Docker image

  • Reference

  • Useful Command

    // run with interactive shell
    $ docker run -it <image> /bin/bash
    
    // list running process
    $ docker ps
    
    // list images
    $ docker images
    
    // 
    $ docker exec -it <container id> /bin/bash
    
    // print app output
    $ docker logs <container id>
    
    // build docker image. image name cannot use camel case
    $ docker build -t <target-image-name> .
    
    // store image in tar file
    $ docker save <generated-image-name> -o ./store/<generated-image-name>.tar
    
    // upload tar image to server
    $ rsync -rzvP ./store/<generated-image-name>.tar ubuntu@<serverip>:~/apps/<image-name>/
    
    $ ssh ubuntu@<serverip>
    $ cd ~/apps/<image-name>
    $ docker-compose stop
    $ docker load -i <image-name>.tar
    $ docker-compose up -d --build
    
    // skip docker entrypoint
    $ docker run -it --entrypoint=/bin/bash $IMAGE -i
    
    // delete all dangling images at once
    // -q return only the image unique id
    $ docker rmi $(docker images -q --filter "dangling=true")
    
    // remove build cache
    $ docker builder prune
    
    // pull latest
    $ docker-compose pull
    
    // restart image
    $ docker-compose restart
    
    // show container mem / io usage
    $ docker stats
    
    // show running process in container
    $ docker top <container>
    
  • testing http

    $ curl -i localhost:5000
    
    HTTP/1.1 200 OK
    X-Powered-By: Express
    Content-Type: text/html; charset=utf-8
    Content-Length: 12
    ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
    Date: Mon, 13 Nov 2017 20:53:59 GMT
    Connection: keep-alive
    
    Hello world
    
  • sample deploy script

    # docker way
    docker build -t razer-pay-direct-fast-middleware:latest .
    docker save razer-pay-direct-fast-middleware:latest -o ./docker-local/razer-pay-direct-fast-middleware.tar
    
    # upload docker image and compose file to the server
    rsync -rzvP ./docker-local/razer-pay-direct-fast-middleware.tar docker-compose.yml ubuntu@172.88.1.101:~/apps/razer-pay-direct-fast-middleware/
    
    ssh ubuntu@172.88.1.101 << EOF
        cd ~/apps/razer-pay-direct-fast-middleware
        pwd
    
        echo "Stopping Container..."
        docker-compose stop
    
        echo "Loading new Docker image..."
        docker load -i razer-pay-direct-fast-middleware.tar
    
        echo "Restarting Container..."
        docker-compose up -d --build
    
        echo "Container restarted."
    
    EOF
    
    echo "Deployed successfully."
    
  • user permission

// create docker group
$ sudo groupadd docker

// add current user to group
$ sudo usermod -aG docker ${USER}

// reboot system for group privillege to take effect

// test run
$ docker run hello-world

  • docker image versioning

    • Semantic Versioning (Semver)
    • blog
    • Tag and push separately
    $ docker build -t registry:latest .
    $ docker push registry:latest
    
    $ docker tag registry:latest registry:2
    $ docker push registry:2
    
    $ docker tag registry:latest registry:2.6
    $ docker push registry:2.6
    
    $ docker tag registry:latest registry 2.6.3
    $ docker push registry:2.6.3
    
  • // check image size
    $ docker run --entrypoint=/bin/sh $IMAGE:$VERSION -c 'du -s / 2 > /dev/null | cut -f1'
    
  • Best practice

  • Copy docker image to another machine

// build docker image on source machine
$ docker build -t razer-pay-direct-fast-middleware:latest .

// save Docker image as tar file on source machine
$ docker save -o <path for generated tar file> <image name>

// eg.
$ docker save -o c:/myfile.tar centos:16
$ docker save razer-pay-direct-fast-middleware:latest -o ./razer-pay-direct-fast-middleware.tar

// copy to target move via scp / rsync
// scp copy tar to aws ec2
$ scp -i ssh-identity.pem -o StrictHostKeyChecking=no ./razer-pay-direct-fast-middleware.tar $RPS_PRD_SSH_USER@$RPS_PRD_HOST:~/apps/razer-pay-direct-fast-middleware/

// Then, load the tar file into Docker
$ docker load -i <path to image tar file>

// using pipe to run all on the fly
// bzipping the on the fly
// pv - to show progress indicator
$ docker save <image> | bzip2 | pv | ssh user@host 'bunzip2 | docker load'


// run docker image
$ ssh ubuntu@172.88.1.101 

$ cd ~/apps/razer-pay-direct-fast-middleware
$ pwd

    echo "Stopping Container..."
$ docker-compose stop

$ echo "Loading new Docker image..."
$ docker load -i razer-pay-direct-fast-middleware.tar

$ echo "Restarting Container..."
// --build build image before starting container
$ docker-compose up -d --build

$ echo "Container restarted."

  • persistent data setup
services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
        - ./persistent_data:/var/lib/mysql

// stop container and remove volune
$ docker-compose down -v
  • host.docker.internal or gateway.docker.internal