레이블이 DevOps-Docker인 게시물을 표시합니다. 모든 게시물 표시
레이블이 DevOps-Docker인 게시물을 표시합니다. 모든 게시물 표시

5/10/2018

Docker Command 사용법 정리

1. Docker Concept


Docker를 Container의 기술이라고 하며, 이 기술은 Virtualization과 아주 흡사하게 동작하는 기술이다.
이는 개발과 배포를 보다 손쉽게 해주는 실행해주는 기술로, 가상머신처럼 Image를 받아 실행을 해주는 기술이다.

Docker 기본환경설치
  https://ahyuo79.blogspot.com/2017/07/docker.html

Docker Redmine 설치
  https://ahyuo79.blogspot.com/2018/02/docker-redmine.html


1.1 Docker 의 containers 와 Image 개념


Dockerfile -> Image -> Container 

  • Container
쉽게 생각하면, Virtual Machine에서 Virtual HW에 해당하는 부분이지만, 좀 다르게, 추상화된 Package가 맞을 것 같다. 
Containers는 Image (App/Bin/Libs) 가 제대로 동작할 수 있도록하는 Image의 Instance 개념으로 Container를 생성한다.
그리고, 이 Image의 Instance를 Docker 기반으로 내부 App을 실행을 하고 외부와 차단하여 동작되어진다.
아래 그림 참조 

Virtual Machine과 다르게 Hypervisior / Guest OS를 사용하지 않고 Docker만을 이용하여,  외부(Container 끼리 혹은 Host)와 차단을 하여 동작을 한다.

물론 Container 외부와 통신하고 공유하는 방법도 존재하므로 설정에 따라 이 부분은 다르게 동작한다.
Container가 생성된 후에는 Container 내부에서는 독립적으로 데이타 저장도 가능하며 확장도 가능하지만, 종료가 될 때 Container도 삭제하도록 구성도 가능하다
일반적으로 Docker에서 Container를 생성하는 방법은 run 명령create를 이용하여 생성할 수 있다.


  • Images
Image는 실행될 수 있는 Binary Package를 말하며, 이는 Application을 구동시키기 위해서 사용되어지는 
Runtime Code , Libraries , 환경변수 및 설정파일들을 포함하고 있다.
처음 Dockerfile에 의해서 상위구성들을 Image로 만든다. 그리고,
이 Image는 Container를 처음 구성할때 같이 포함되어 실행될때 필요하다.

Container 와 image의 차이라면, Container는 Docker에서 실행을 하면서 필요한 Data 저장 및 변화된 환경 및 상태보관이 가능하다.
이외 에도 있을 거지만, 거기까지는 나도 잘 모르겠다. 


  • Container Orchestration
Container 하나만을 실행하면 괜찮겠지만, 문제는 여러개를 사용할 경우 이것을 조율해주고 관리해주는 Tool 이 필요하게된다.
이를 Container Orchestration 이라고 하며, 현재 유명한 것이 Docker Swarm Kubernetes 인 것 같으며,  아직 사용법은 모르겠다.

요즘 이슈가 되는게, Kubernetes로 Server기반으로 많이 사용되는 것 같으며, 내가 사용을 할 기회는 거의 없을 것 같다. 


1.2 Docker 와 Virtual Machine 비교 

간단하게 차이를 보면 Hypervisior, 즉 가상의 CPU / HW환경구성을 비롯하여 Guest OS를 볼수 있겠다.


  • Docker vs Virtual Machine 비교

Docker
Image 기반으로 Container라는 공간을 만들어 APP/Bins/Libs를 관리하며 기본으로 외부와 격리되어 동작된다.

Virtual MachineHypervisior라는 가상의 CPU구성 및 HW 환경구성 기반위에 별도의 GuestOS가 있고, 그 위에 App 관련된 구성이 돌아간다. (다른 CPU구성과 HW구성도 가능)


위에서 보았듯이 Docker의 Container 기술은 가볍고 빠르게 동작이 가능하지만, Host OS Kernel 과 공유하는 부분이 존재하므로, HW 자원의 고갈문제가 발생한다.
예를들면, 여러개의 Contianer가 동작 중이라면, 각각의 Container 마다 Host OS의 HW자원을 사용하려고 할텐데, 이 부분을 별도로 관리가 필요해서 오케스트라션이 필요한 것 이다.
이를 흔히 로드밸랜스라고 한다. 


  • Docker 세부내용은 아래 사이트 참조
  https://docs.docker.com/get-started/#docker-concepts
  https://docs.docker.com/get-started/part2/

  • Virtual Machine 과 Docker 비교
  https://www.aquasec.com/wiki/display/containers/Docker+Containers+vs.+Virtual+Machines
  https://blog.docker.com/2016/04/containers-and-vms-together/
  https://blog.thousandeyes.com/thousandeyes-docker-enterprise-agents/
  https://www.aquasec.com/wiki/display/containers/Docker+Architecture
  https://docs.docker.com/engine/docker-overview/
  https://www.phpflow.com/misc/devops/part-1-getting-started-docker-tutorial/
  https://success.docker.com/article/networking
  https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
  http://www.leafcats.com/146


1.3 Docker 개념의 관련자료 링크모음 


  • Docker Overview 및 개념확인


  • LXC vs Docker
Docker  Container 기술과 유사한 기술인 LXC (Linux Container) 있지만 이는 좀 다르게 동작하는 것 같다.
  http://www.opennaru.com/openshift/docker/what-is-the-difference-between-docker-lxd-and-lxc/
  https://linuxcontainers.org/lxc/introduction/
  https://robin.io/blog/containers-deep-dive-lxc-vs-docker-comparison/

  • Docker 관련내용 
  https://www.slideshare.net/pyrasis/docker-docker-38286477
  https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
  https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
  https://www.clien.net/service/board/lecture/7042127
  http://blog.nacyot.com/articles/2014-01-27-easy-deploy-with-docker/



  • Docker VirtualBox
Docker에서 virtual box를 이용하여 사용하는데, virtual box 내부에서 docker를 사용하는지는 추후에 알아보자
  https://docs.docker.com/machine/drivers/virtualbox/


  • Docker EE의 구성
  https://www.docker.com/products/docker-enterprise


  • Container  Orchestration
컨테이너 오케스라이션 두 개를 각각 자세히 알아보자.
추후에 세부적으로 사용할 일이 있겠지?

Docker SWARM
  https://docs.docker.com/swarm/overview/#understand-swarm-cluster-creation

Kubernetes
  https://kubernetes.io/
  https://www.redhat.com/ko/topics/containers/what-is-kubernetes
  https://www.popit.kr/kubernetes-introduction/
  https://www.slideshare.net/ienvyou/docker-on-kubernetes-v1
  https://cloud.google.com/kubernetes-engine/

Jenkins(DevOps) 와 Kubernets 연결 (Google의 활용)
  https://cloud.google.com/solutions/jenkins-on-kubernetes-engine-tutorial


2. Docker 의 기본설치 

Docker는 최근부터 두가지 Edition으로 제공하고 있으며, CE는 아래의 글을 읽어 보면 알겠지만, 
무료이고 개발용/실험용으로 무료로 제공해주고 있다.
EE는 기업용으로 좀 더 나은 기능을 제공해주고 있다.
현재 내가 본 Docker Version 17.09이며 지속적으로 새로운 기능과 다른 기능을 추가해주고 있는 것 같다.
  1. Docker CE (Community Edition)
  2. Docker EE (Enterprise Edition)

기업용(EE)는 나는 사용할 기회가 없으므로, 추후 기회가 생긴다면 그때 알아보자.
그리고 현재 아래의 사이트에서 다른 점 및 CE의  업데이트 주기를 알고 넘어 가야겠다.

  • Docker 설치 전에 확인사항 
Docker Version과 CE/EE 의 차이를 알아두자
  https://docs.docker.com/v17.09/engine/installation/
  https://docs.docker.com/install/

  • Docker  설치 방법
설치방법은 어렵지 않으니 아래의 사이트에서 확인
  https://docs.docker.com/install/linux/docker-ce/ubuntu/
  https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository
  http://dololak.tistory.com/354?category=644234
  http://pyrasis.com/Docker/Docker-HOWTO
  https://docs.docker.com/glossary/


2.1  Docker 의 명령어 사용법 

간단하게 아래의 사이트에서 Docker 의 명령어들을 익혀보자

간단 Manual
  https://gist.github.com/nacyot/8366310

Docker Command의 Option 확인
  https://docs.docker.com/engine/reference/commandline/start/#options

  • Docker-CE의 Command 확인 

$ docker --help
Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.

Options:
  --api-cors-header=                   Set CORS headers in the remote API
  -b, --bridge=                        Attach containers to a network bridge
  --bip=                               Specify network bridge IP
  -D, --debug=false                    Enable debug mode
  -d, --daemon=false                   Enable daemon mode
  --default-ulimit=[]                  Set default ulimits for containers
  --dns=[]                             DNS server to use
  --dns-search=[]                      DNS search domains to use
  -e, --exec-driver=native             Exec driver to use
  --fixed-cidr=                        IPv4 subnet for fixed IPs
  --fixed-cidr-v6=                     IPv6 subnet for fixed IPs
  -G, --group=docker                   Group for the unix socket
  -g, --graph=/var/lib/docker          Root of the Docker runtime
  -H, --host=[]                        Daemon socket(s) to connect to
  -h, --help=false                     Print usage
  --icc=true                           Enable inter-container communication
  --insecure-registry=[]               Enable insecure registry communication
  --ip=0.0.0.0                         Default IP when binding container ports
  --ip-forward=true                    Enable net.ipv4.ip_forward
  --ip-masq=true                       Enable IP masquerading
  --iptables=true                      Enable addition of iptables rules
  --ipv6=false                         Enable IPv6 networking
  -l, --log-level=info                 Set the logging level
  --label=[]                           Set key=value labels to the daemon
  --log-driver=json-file               Containers logging driver
  --mtu=0                              Set the containers network MTU
  -p, --pidfile=/var/run/docker.pid    Path to use for daemon PID file
  --registry-mirror=[]                 Preferred Docker registry mirror
  -s, --storage-driver=                Storage driver to use
  --selinux-enabled=false              Enable selinux support
  --storage-opt=[]                     Set storage driver options
  --tls=false                          Use TLS; implied by --tlsverify
  --tlscacert=~/.docker/ca.pem         Trust certs signed only by this CA
  --tlscert=~/.docker/cert.pem         Path to TLS certificate file
  --tlskey=~/.docker/key.pem           Path to TLS key file
  --tlsverify=false                    Use TLS and verify the remote
  -v, --version=false                  Print version information and quit

Commands:
    attach    Attach to a running container       // 동작 중인 Container에 접속가능 (exec로도 가능)
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders from a container's filesystem to the host path // Container에서 생성된 정보를 가져올때 사용 
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container // 동작 중인 Container에 명령어 실행 (/bin/bash 를 이용하여 접속가능) 
    export    Stream the contents of a container as a tar archive
    history   Show the history of an image
    images    List images   // 현재 존재하는 Image List들을 확인 
    import    Create a new filesystem image from the contents of a tarball
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive
    login     Register or log in to a Docker registry server
    logout    Log out from a Docker registry server
    logs      Fetch the logs of a container
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT
    pause     Pause all processes within a container
    ps        List containers   // 동작 중인 containers의 list 보여주며, name도 확인가능 
    pull      Pull an image or a repository from a Docker registry server // Image를 가져올때 사용 
    push      Push an image or a repository to a Docker registry server
    rename    Rename an existing container
    restart   Restart a running container
    rm        Remove one or more containers  // container 제거 
    rmi       Remove one or more images      // image 제거 
    run       Run a command in a new container // 처음 Container를 생성할 때 사용하는 명령
    save      Save an image to a tar archive
    search    Search for an image on the Docker Hub // Docker Hub에서 Image 검색 
    start     Start a stopped container
    stats     Display a stream of a containers' resource usage statistics  // Container의 HW 자원 확인 
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Lookup the running processes of a container
    unpause   Unpause a paused container
    version   Show the Docker version information
    wait      Block until a container stops, then print its exit code



Docker 안쓰는 Image / Container 삭제
  http://www.kwangsiklee.com/2017/07/docker-%EC%95%88%EC%93%B0%EB%8A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EB%A6%AC%ED%95%98%EA%B8%B0/
  https://www.popit.kr/%ED%95%B4%EA%B2%B0%EB%B0%A9%EC%95%88-docker%EB%A5%BC-%EC%9A%B4%EC%98%81%ED%95%98%EB%8B%A4-%EC%9A%A9%EB%9F%89%EC%9D%B4-%EA%BD%89%EC%B0%BC%EC%9D%84%EB%95%8C/


$ cat /lib/systemd/system/docker.service  //docker server부분 설정 

$ sudo du -sh /var/lib/docker   // docker image 및 저장위치 인 것 같음 

$ ls /etc/docker/      // 각 설정, 현재 모름 
daemon.json  key.json    



  • MYSQL  세부저장 
  http://jibak.tistory.com/13?category=625389
  http://jibak.tistory.com/7


  • Docker 저장소 변경 
  https://kiros33.blogspot.kr/2015/05/docker.html


2.3 Docker Container의  Backup 과  Restore 방법 

Docker 기반으로 개발할 경우, Container의 Backup 과 Restore는 중요하며, 이부분은 별도로 테스트를 해서 검증을 해보며 써야 할 것  같다.
대부분 Container에서 부족한 부분은 본인 Terminal을 이용해서 설치도 가능하며, 이를 Backup 해서 본인만의 image를 새로 구축해도 될 것 같다. (배포도 가능)

commit 후에 save를 할때 tar 묶는 이유를 보면, docker가 하나의 image로 저장이 되지 않아서 인것 같다.
/var/lib/docker 으로 분산되어 존재하는 것 같은데,  추후에 자세히 알면 이 부분은 다시 분석

아래사이트 참고
  http://home.zany.kr:9003/board/bView.asp?bCode=13&aCode=14131&cBlock=0&cPageNo=1&sType=0&sString=
  https://digndig.kr/docker/709/


2.4 Docker File 만들기 

docker build를 이용하여 dokerfile을 쉽게 image로 만들 수 있으며, 대 부분은 기존의 Base Image가 존재하는 상태에서
본인 필요한 Package를 추가하는 형태로 새롭게 만들어나가는 구조로 사용하는 것 같다.

결과적으로 보면 Docker Container Backup 과 기존의 Image를 이용하여 Docker File을 새롭게 만들어서 구축하는 방법은 동일하다.
배포도 가능하며, 이 부분은 추후에 다시 동작을 해보도록 하자.

  • Docker File 만들기
DOCKERFILE , File을 만든 후 아래의 Link의 Command로 쉽게 구성할 수 있다. 
  https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
  https://medium.com/@NovaWoo/docker-%EC%99%80-jenkins-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ci-1-9510178a525f


3. Simple Linux File System Download

우연히 발견한 사이트이지만,  가끔 Simple한 File system 구성이 필요할때가 있는데, 마침 찾았다.
예전처름 처음부터 package를 일일히 설치해가며 Filesystem을 구축을 해 만들필요는 없는것 같다.


  https://alpinelinux.org/downloads/

9/17/2017

Docker Jenkins 설치 (추후 시간있을 경우, 다시 작성)

1. Docker Jenkins 설치

일반적인 Jenkins 설치
  https://jenkins.io/
  https://jenkins.io/doc/pipeline/tour/getting-started/
  https://pkg.jenkins.io/debian/

Docker Jenkins 설치
  https://docs.docker.com/samples/library/jenkins/
  https://jenkins.io/doc/book/installing/
  https://hub.docker.com/_/jenkins/

Embedded Jenkins 
  https://jenkins.io/solutions/embedded/

Jenkins and Slack 설치
  https://jojoldu.tistory.com/139

Java Build
  https://jenkins.io/doc/tutorials/build-a-java-app-with-maven/

DockerFile 기반의 Jenkins 이용
  https://medium.com/@NovaWoo/docker-%EC%99%80-jenkins-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ci-1-9510178a525f
  https://jojoldu.tistory.com/139

Docker Volumes 원리 (추후 자세한 설명)
docker 이용시, 각 command 이용할 경우, 동작되는 방식 
  https://docs.docker.com/storage/volumes/
  https://docs.docker.com/storage/bind-mounts/
  https://docs.docker.com/storage/tmpfs/
Docker 기본동작 (1번에 복사하여 설명)
  https://docs.docker.com/get-started/



$  sudo docker run -d -name jenkins -p 8080:8080 -p 50000:50000 jenkins
or 
$  sudo docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins
or
$  sudo docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins 



$  cd $HOME
$  mkdir dockers dockers/jenkins_home         // /var/jenkins_home 이곳에 저장 

$  sudo docker run -p 8080:8080 -p 50000:50000 -v $HOME/dockers/jenkins_home:/var/jenkins_home jenkins
$  sudo docker run -d -p 8080:8080 -p 50000:50000 -v $HOME/dockers/jenkins_home:/var/jenkins_home jenkins
$  sudo docker run --rm -p 8080:8080 -p 50000:50000 -v $HOME/dockers/jenkins_home:/var/jenkins_home jenkins
$  sudo docker run -d --rm -p 8080:8080 -p 50000:50000 -v $HOME/dockers/jenkins_home:/var/jenkins_home  -v /var/run/docker.sock:/var/run/docker.sock jenkins

$  cat $HOME/dockers/jenkins_home/secrets/initialAdminPassword 
45ece99138e843b599c467b29ddd081e


$  sudo docker ps   // 작동 중인 Container/Image 상태보기 
$  sudo docker stop      // 동작중 Container 정지 
$  sudo docker rm        // Container 제거  
$  sudo docker rmi       // Image 제거  


$  sudo docker images  // 설치된 Image들 전체보기 
$  sudo docker stats     // Container 상태확인 
$  sudo docker logs       // Container Log 파악 




2. Jenkins 설정

Docker 기반으로 쉽게 Jenkins를 동작 


http://192.168.1.100:50000


http://192.168.1.100:8080




............................
*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

499ba15a6e3d4099a9a457b199281c63           // 이 Password를 복사하여 8080 Port에서 인증 

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
......................




  http://www.itworld.co.kr/news/107527
  http://www.nextree.co.kr/ciwa-execute-shelleul-iyonghan-jadongbaepo-buteo-seobeo-silhaengggaji/
  https://github.com/softwaresaved/build_and_test_examples/tree/master/jenkins



2.1 기타 문제사항 


  • mkdir 에러 

  https://stackoverflow.com/questions/46703596/jenkins-error-in-mkdir-command

sudo vi /etc/group

jenkins:x:130:jhlee

  https://www.facebook.com/groups/712393792190261/
  https://www.notion.so/Jenkins-Dockerfile-37407a3b5c6446b68e18f3412d3dbf06


일단 기본적으로 동작을 확인했으나, 추후 시간이 다시 있을 경우, 블로그를 업데이트 진행
관련링크만,!!!


7/23/2017

Docker Redmine 기본설치

1. Redmine 소개 

SVN or GIT  소스를 관리만을 하지만, Redmine or Track 은 Project 관리와 버그 추적을 쉽게 해주기 위해서 만들어진 통합된 프로젝트 관리 프로그램이다.
흔히 ITS(Issue Tracking Ssystem) 이라고도 불리우기도 하며,Redmine이전에도 다양한 오픈소스가 존재한다. 

최근에는 거의 오픈소스는 Redmine으로 사용으로 가거나, 유료인 JIRA 사용하는 것으로 보인다.

오픈소스 ITS(Issue Tracking Ssystem)/BTS관련소개 
Redmine 기능 및 소개
  https://www.redmine.org/
  https://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C%EB%A7%88%EC%9D%B8

Redmine 설치 전 기본환경사항파악
  http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Supported-database-back-ends

Redmine은 Database를 필요하며, 기본적으로 Database도 설치를 해줘야 한다.
이전에는 각 서버에 다 설치해주었지만, 요즘 Docker가 있어서 편하다. 


2. Docker로 Redmine 설치방법 

아래의 설치방법을 보면, Redmine Image는 Database 필요하고, SQlite3가 포함하고 있지만, Multi-User로는 사용이 불가능하다고 한다.
Database를 MySQL or PostgreSQL로 변경하여 2개의 Container를 설치 및 연결해보자.

설치전 Docker의 기본환경을 구축하자
  https://ahyuo79.blogspot.com/2017/07/docker.html

Docker 기본 명령어 파악
  https://docs.docker.com/engine/reference/commandline/docker/

Redmine 설치방법
  https://docs.docker.com/samples/library/redmine/
  https://github.com/sameersbn/docker-redmine


2.1 Docker Images 찾기

Docker로 Redmine/MySQL/Postgres Image를 찾아 많이 사용하는 것을 찾아보자.

  • Docker Image 검색하여 설치할 Image 찾기  
Docker Hub내에서 존재하는 관련 Image들을 검색을 해보자

Docker Hub에서 검색
  https://hub.docker.com/search?q=redmine
  
$ sudo docker search redmine
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redmine                           Redmine is a flexible project management w...   621       [OK]       
sameersbn/redmine                                                                 284                  [OK]
bitnami/redmine                   Bitnami Docker Image for Redmine                30                   [OK]
74th/redmine-all-in-one           Redmine includes hosting SVN & Git , backl...   9                    [OK]
inspiredgeek/redmine-alpine       Simple Docker images to run Redmine tracke...   6                    [OK]
eeacms/redmine                    EEA Redmine docker setup                        2                    [OK]
themill/redmine                   fork for redmine to add/test theming            1                    [OK]
fjudith/redmine                   Dockerized Redmine based on redmine:3.3 of...   1                    [OK]
minimaru/openshift-redmine        A Debian8 based Redmine v3.2 image for use...   1                    
arm64v8/redmine                   Redmine is a flexible project management w...   1                    
tkeydll/docker-redmine-backlogs   Redmine with backlogs plugin.                   1                    [OK]
arm32v7/redmine                   Redmine is a flexible project management w...   1                    
commonms/redmine                  Docker image for Redmine.                       1                    [OK]
sorintdev/redmine                 Redmine with custom theme                       0                    
nitra/redmine_priority_tasks      redmine_priority_tasks                          0                    [OK]
robobeerun/redmine                Redmine image that runs as non-privileged ...   0                    [OK]
togent2/redmine_ttdlx_enabled     redmine_ttdlx_enabled                           0                    [OK]
amd64/redmine                     Redmine is a flexible project management w...   0                    
stackbrew/redmine                 Deprecated; use 'redmine' from https://hub...   0                    
trollin/redmine                                                                   0                    
mikroways/redmine                 redmine passenger image                         0                    [OK]
rubykube/redmine                  Redmine 4.0 container                           0                    [OK]
honsiorovskyi/redmine             Official Redmine + Git + Mercurial              0                    [OK]
dockerpicosoft/redminemisfat                                                      0                    


 $ sudo docker search mysql
NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                                                  MySQL is a widely used, open-source relati...   6972      [OK]       
mariadb                                                MariaDB is a community-developed fork of M...   2226      [OK]       
mysql/mysql-server                                     Optimized MySQL Server Docker images. Crea...   512                  [OK]
percona                                                Percona Server is a fork of the MySQL rela...   369       [OK]       
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       126                  [OK]
hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          96                   
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server ...   67                   [OK]
centurylink/mysql                                      Image containing mysql. Optimized to be li...   59                   [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          44                   [OK]
centos/mysql-57-centos7                                MySQL 5.7 SQL database server                   39                   
mysql/mysql-cluster                                    Experimental MySQL Cluster Docker images. ...   34                   
tutum/mysql                                            Base docker image to run a MySQL database ...   32                   
schickling/mysql-backup-s3                             Backup MySQL to S3 (supports periodic back...   23                   [OK]
bitnami/mysql                                          Bitnami MySQL Docker Image                      19                   [OK]
zabbix/zabbix-proxy-mysql                              Zabbix proxy with MySQL database support        15                   [OK]
linuxserver/mysql                                      A Mysql container, brought to you by Linux...   14                   
centos/mysql-56-centos7                                MySQL 5.6 SQL database server                   10                   
circleci/mysql                                         MySQL is a widely used, open-source relati...   6                    
openshift/mysql-55-centos7                             DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
mysql/mysql-router                                     MySQL Router provides transparent routing ...   4                    
jelastic/mysql                                         An image of the MySQL database server main...   1                    
openzipkin/zipkin-mysql                                Mirror of https://quay.io/repository/openz...   1                    
cloudfoundry/cf-mysql-ci                               Image used in CI of cf-mysql-release            0                    
cloudposse/mysql                                       Improved `mysql` service with support for ...   0                    [OK]
ansibleplaybookbundle/mysql-apb                        An APB which deploys RHSCL MySQL                0                    [OK]


$ sudo docker search postgres
NAME                                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
postgres                                 The PostgreSQL object-relational database ...   5498      [OK]       
sameersbn/postgresql                                                                     135                  [OK]
paintedfox/postgresql                    A docker image for running Postgresql.          77                   [OK]
orchardup/postgresql                     https://github.com/orchardup/docker-postgr...   48                   [OK]
kiasaki/alpine-postgres                  PostgreSQL docker image based on Alpine Linux   42                   [OK]
centos/postgresql-96-centos7             PostgreSQL is an advanced Object-Relationa...   29                   
bitnami/postgresql                       Bitnami PostgreSQL Docker Image                 22                   [OK]
begriffs/postgrest                       Moved to https://hub.docker.com/r/postgres...   16                   [OK]
centos/postgresql-94-centos7             PostgreSQL is an advanced Object-Relationa...   15                   
schickling/postgres-backup-s3            Backup PostgresSQL to S3 (supports periodi...   13                   [OK]
crunchydata/crunchy-postgres             Crunchy PostgreSQL is an open source, unmo...   12                   
circleci/postgres                        The PostgreSQL object-relational database ...   11                   
wrouesnel/postgres_exporter              Postgres metrics exporter for Prometheus.       9                    
postdock/postgres                        PostgreSQL server image, can work in maste...   9                    [OK]
clkao/postgres-plv8                      Docker image for running PLV8 1.4 on Postg...   8                    [OK]
centos/postgresql-95-centos7             PostgreSQL is an advanced Object-Relationa...   6                    
blacklabelops/postgres                   Postgres Image for Atlassian Applications       4                    [OK]
frodenas/postgresql                      A Docker Image for PostgreSQL                   3                    [OK]
camptocamp/postgresql                    Camptocamp PostgreSQL Docker Image              3                    [OK]
fredboat/postgres                        PostgreSQL 10.0 used in FredBoat's docker-...   0                    
ansibleplaybookbundle/postgresql-apb     An APB which deploys RHSCL PostgreSQL           0                    [OK]
cfcommunity/postgresql-base              https://github.com/cloudfoundry-community/...   0                    
relatable/postgrest                      Nginx container to serve web requests to t...   0                    [OK]
cfcommunity/postgresql                   https://github.com/cloudfoundry-community/...   0                    
ansibleplaybookbundle/rds-postgres-apb   An APB that deploys an RDS instance of Pos...   0                    [OK]



2.2  Docker Container/Image 설치 

Redmine은 Database를 사용하는데, MySql or Postgres로 설치하여 연결할 것이다.
docker run을 이용하여 새로운 Container에 이름을 할당하고, 상위에서 찾은 Image 이름으로 설치 와 동시에 실행해보자



docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options Description
--detach , -d Run container in background and print container ID
--name Assign a name to the container
--env , -e Set environment variables
--link Add link to another container
--publish , -p Publish a container’s port(s) to the host


-p 옵션을 통해 Redmine에 접속할수 있는 port를 변경이 가능하다.
http://localhost:3000 or http://host-ip:3000 으로 redmine 접속이 가능하다.
이 옵션이 없다면, 기본적으로 http://localhost:8080, or http://host-ip:8080 로 동작한다.

  • MySql or Postgres Container / Image 설치 및 실행 
$ sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=redmine mysql 
or 
$ sudo  docker run -d --name postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=redmine postgres

-e 옵션은 Environment Variables 부분 참조
마지막에 반드시 찾은 Image 이름
  • Redmine  Container / Image 설치 및 실행 
$ sudo docker run -d --name redmine -p 3000:3000 --link mysql:mysql redmine // Database: MySQL
or 
$ sudo docker run -d --name redmine -p 3000:3000 --link postgres:postgres redmine  // Database: Postgres


Redmine 설치방법

  https://docs.docker.com/engine/reference/commandline/run/

2.3 Docker Container/Image 삭제 

상위에서 Container와 Image를 생성했기 때문에, 관련사항들을 다 삭제해보자.

  • Container/ Image 제거 

$ sudo docker ps  // 동작중인 Container 파악 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
1fd4d477c23b        redmine:latest      "/docker-entrypoint.   4 months ago        Up 3 minutes        0.0.0.0:3000->3000/tcp   redmine             
89d3dc20a51a        mysql:latest        "docker-entrypoint.s   4 months ago        Up 3 minutes        3306/tcp                 mysql 
 
$ sudo docker stop mysql redmine  // 동작중인 Container 멈춤, 상위 CONTAINER ID 가능  

$ sudo docker rm mysql redmine   // Containers 제거   

$ sudo docker rmi mysql redmine  // Images 제거 

$ sudo docker images             // 설치된 Image 재확인 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE


2.4  Docker Containers 실행/정지 

현재 Ubuntu를 사용하고 있으며, 기본적으로 재부팅을 하면, Docker Engine도 멈추기 때문에, 다시 Container를 가동하여 Image를 동작해야한다.

  • Docker-MySql 과 Redmine 동작실행 
$ sudo docker start mysql redmine
mysql
redmine

  • Docker-MySql 과 Redmine 동작멈춤 
$ sudo docker stop mysql redmine
mysql
redmine


2.5 Docker Container/Images 확인 및 동작확인

Docker에서 Container or Images의 상태를 각각 확인을 해보자.

  • 설치된 Docker-Images 확인
$ sudo docker images // MySQL 설치시
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
redmine             latest              1b5ebc39dc3e        4 months ago        662.5 MB
mysql               latest              08fa4e794b8b        5 months ago        371.4 MB

$ sudo docker images  //Postgres 설치시 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
redmine             latest              e297148f3bd1        10 hours ago        687.2 MB
postgres            latest              a283a33b6783        10 days ago         228.4 MB

  • 동작 중인 Docker-Container/Images 확인 

$ sudo docker ps // MySQL 사용시 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
1fd4d477c23b        redmine:latest      "/docker-entrypoint.   4 months ago        Up 3 minutes        0.0.0.0:3000->3000/tcp   redmine             
89d3dc20a51a        mysql:latest        "docker-entrypoint.s   4 months ago        Up 3 minutes        3306/tcp                 mysql 

$ sudo docker ps // Postgres 사용시 
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
33f9f499cef9        redmine:latest      "/docker-entrypoint.   12 seconds ago      Up 11 seconds       0.0.0.0:3000->3000/tcp   redmine             
0e33f82bb946        postgres:latest     "docker-entrypoint.s   6 minutes ago       Up 6 minutes        5432/tcp                 postgres 


  • Docker의 Container 상태 (CPU/MEM/NET 정보)


$ sudo docker stats mysql redmine  // 각 container가 미동작 확인  
CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
mysql               0.00%               0 B/0 B             0.00%               0 B/0 B
redmine             0.00%               0 B/0 B             0.00%               0 B/0 B

$ sudo docker stats mysql redmine  // 각 container 동작 Image 실행 
CONTAINER           CPU %               MEM USAGE/LIMIT       MEM %               NET I/O
mysql               0.10%               244.1 MiB/3.778 GiB   6.31%               55.03 KiB/282.5 KiB
redmine             0.01%               124.5 MiB/3.778 GiB   3.22%               284.1 KiB/52.86 KiB


  • Docker Container의 Log 파악 


$  sudo docker logs redmine  // redmine or mysql 각 Image 선택 
........


  • Docker 관련사항 찾아보기 

$ sudo find / -name redmine  // redmine image 찾기 
/var/lib/docker/vfs/dir/06d0898d2ee8f722f5dbb5db412ec12f44ab8ca997398367612a442570f5b580/redmine
/var/lib/docker/aufs/diff/07edb9d05a16af091a3eb354febfa11691632aba9faed3df2985aea033d5b06b/usr/src/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine/lib/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine/test/unit/lib/redmine
/var/lib/docker/aufs/diff/605d9552a2bf32d1ebda51db67c3ea87e235bcd0a07afa347688248481acbd44/usr/src/redmine/test/integration/lib/redmine
/var/lib/docker/aufs/diff/716af2fdc4bfa300f02e52e3676615ee00faa82d2ffe011f5b8dc03f2edff416/usr/src/redmine
/var/lib/docker/aufs/diff/1fd4d477c23b613b7d6c463f9548dc89b10cc11e5dfbf871390c5af34de5c80c/usr/src/redmine

$ sudo find / -name mysql  // mysql  image 찾기 
/etc/apparmor.d/abstractions/mysql
/etc/apparmor.d/snap/abstractions/mysql
/etc/init.d/mysql
/etc/mysql
/var/lib/docker/vfs/dir/06d0898d2ee8f722f5dbb5db412ec12f44ab8ca997398367612a442570f5b580/mysql
/var/lib/docker/aufs/diff/9ca537d00bf27e382442900487f836aedb7f2eb4805e87fa6bca90921e840f49/etc/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/etc/init.d/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/etc/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/var/lib/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/var/log/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/usr/lib/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/usr/bin/mysql
/var/lib/docker/aufs/diff/e15d670277a7990e98ddeaeeba7ac34531c8db08d418a69330a4e886fa8aa768/usr/share/mysql
...

$ sudo ls /var/lib/docker/   
aufs  containerd  graph  init   network   plugins        runtimes  tmp vfs
builder  containers  image  linkgraph.db  overlay2  repositories-aufs  swarm  trust volumes



2.6 Docker 설치 및 실행시 Network 상태확인

상위에서 Docker를 설치 한 후, Docker Image들을 설치하고 실행을 한 후 네트워크 상태를 확인해보면
아래와 같이 두 종류의 Link가 새로 생성되었다.

  1. docker0:  docker 명령어 설치시 생성됨 
  2. vethx : docker image 실행시 생성됨 


$ ifconfig
docker0   Link encap:Ethernet  HWaddr 8e:12:bf:f6:e3:e5  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::5c9b:24ff:fea2:322/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1100 (1.1 KB)  TX bytes:10832 (10.8 KB)

eth0      Link encap:Ethernet  HWaddr 08:00:27:0f:63:43  
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe0f:6343/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5777 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2116 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7996724 (7.9 MB)  TX bytes:192119 (192.1 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:288 errors:0 dropped:0 overruns:0 frame:0
          TX packets:288 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:23759 (23.7 KB)  TX bytes:23759 (23.7 KB)

veth15bcff9 Link encap:Ethernet  HWaddr 8e:12:bf:f6:e3:e5  
          inet6 addr: fe80::8c12:bfff:fef6:e3e5/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:348 errors:0 dropped:0 overruns:0 frame:0
          TX packets:408 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:289303 (289.3 KB)  TX bytes:56696 (56.6 KB)

veth1c96ca0 Link encap:Ethernet  HWaddr f6:bb:61:16:e3:09  
          inet6 addr: fe80::f4bb:61ff:fe16:e309/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:390 errors:0 dropped:0 overruns:0 frame:0
          TX packets:365 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:54193 (54.1 KB)  TX bytes:291716 (291.7 KB)


3. Redmine 설정 및 사용

브라우저에서 http://192.168.1.100:3000/login  로그인

ID: admin
PW: admin


내계정->비밀번호 바꾸기
PW변경
Atom 접근키 생성

현재 기본사용만 했을 뿐 다른 플러그인이나, 관련사항을 설치하지 않았다.


Redmine 설치 후 설정부분
  http://www.whatwant.com/367
  http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Supported-database-back-ends

7/16/2017

Docker 기본환경설치 및 기본용어

1. Docker 기본구조 이해  

Virtual Machin 과 유사하게 아래처럼 각각의 Container 기반으로 Docker에서 동작되어지도록 구성되어진다.


자료
  https://www.aquasec.com/wiki/display/containers/Docker+Architecture

  1. Docker Engine:  Container 구동 및 통신, 설정 Docker에 관련된 것을 관리
  2. Container : Image를 실행하며, 환경설정 및 통신가능  
  3. Images : 상위 App/Bin/Libs 해당하며, 실행가능한 Image 

Docker 기본 명령어 파악
  https://docs.docker.com/engine/reference/commandline/docker/

Docker 기본용어   
  https://docs.docker.com/glossary/

Docker 제공하는 Sample들
  https://docs.docker.com/samples/

Docker Hub
현재 나도 가입을 했으며, Docker 사용을 위해서 가입을 하도록하자.
  https://hub.docker.com/

Docker Hub 의 기본사용법 
  https://docs.docker.com/get-started/#prepare-your-docker-environment
  https://docs.docker.com/network/#network-driver-summary
  https://docs.docker.com/engine/reference/commandline/stop/#options
  https://docs.docker.com/engine/reference/builder/#expose


1.1 Docker Old Version 설치 

Ubuntu 14.04_64bit LTS Version에서 설치 진행

  • Docker Old version Engine 설치 
$ sudo curl -sSL https://get.docker.com/ | sh
$ sudo apt-get update && apt-get upgrade
$ sudo apt-get install docker.io


  • Docker Old version Engine 제거 
제거하기전에 만약 사용하던 Container와 Image 및 연결된 설정파일도 같이 제거 한후에 실행하자.

$ sudo apt-get remove docker docker-engine docker.io

  • Docker Version 및 위치확인
현재 사용중인 Docker Engine의 Version과 설치된 위치를 파악하자.

$ sudo docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.2.1
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64

$ which docker         // docker 설치위치 파악 
/usr/bin/docker



  • Docker 기본사용법 

$ sudo docker --help // or man docker
[sudo] password for jhlee: 
Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.

Options:
  --api-cors-header=                   Set CORS headers in the remote API
  -b, --bridge=                        Attach containers to a network bridge
  --bip=                               Specify network bridge IP
  -D, --debug=false                    Enable debug mode
  -d, --daemon=false                   Enable daemon mode
  --default-ulimit=[]                  Set default ulimits for containers
  --dns=[]                             DNS server to use
  --dns-search=[]                      DNS search domains to use
  -e, --exec-driver=native             Exec driver to use
  --fixed-cidr=                        IPv4 subnet for fixed IPs
  --fixed-cidr-v6=                     IPv6 subnet for fixed IPs
  -G, --group=docker                   Group for the unix socket
  -g, --graph=/var/lib/docker          Root of the Docker runtime
  -H, --host=[]                        Daemon socket(s) to connect to
  -h, --help=false                     Print usage
  --icc=true                           Enable inter-container communication
  --insecure-registry=[]               Enable insecure registry communication
  --ip=0.0.0.0                         Default IP when binding container ports
  --ip-forward=true                    Enable net.ipv4.ip_forward
  --ip-masq=true                       Enable IP masquerading
  --iptables=true                      Enable addition of iptables rules
  --ipv6=false                         Enable IPv6 networking
  -l, --log-level=info                 Set the logging level
  --label=[]                           Set key=value labels to the daemon
  --log-driver=json-file               Containers logging driver
  --mtu=0                              Set the containers network MTU
  -p, --pidfile=/var/run/docker.pid    Path to use for daemon PID file
  --registry-mirror=[]                 Preferred Docker registry mirror
  -s, --storage-driver=                Storage driver to use
  --selinux-enabled=false              Enable selinux support
  --storage-opt=[]                     Set storage driver options
  --tls=false                          Use TLS; implied by --tlsverify
  --tlscacert=~/.docker/ca.pem         Trust certs signed only by this CA
  --tlscert=~/.docker/cert.pem         Path to TLS certificate file
  --tlskey=~/.docker/key.pem           Path to TLS key file
  --tlsverify=false                    Use TLS and verify the remote
  -v, --version=false                  Print version information and quit

Commands:
    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders from a container's filesystem to the host path
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container
    export    Stream the contents of a container as a tar archive
    history   Show the history of an image
    images    List images
    import    Create a new filesystem image from the contents of a tarball
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive
    login     Register or log in to a Docker registry server
    logout    Log out from a Docker registry server
    logs      Fetch the logs of a container
    port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT
    pause     Pause all processes within a container
    ps        List containers
    pull      Pull an image or a repository from a Docker registry server
    push      Push an image or a repository to a Docker registry server
    rename    Rename an existing container
    restart   Restart a running container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save an image to a tar archive
    search    Search for an image on the Docker Hub
    start     Start a stopped container
    stats     Display a stream of a containers' resource usage statistics
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Lookup the running processes of a container
    unpause   Unpause a paused container
    version   Show the Docker version information
    wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.



  • Docker run 사용법 
docker image를 container에 넣어 실행하는 동작으로 container가 생성이 되며 Proecess는 1개로 시작됨

$ docker run --help // or $ man docker run 

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

  -a, --attach=[]            Attach to STDIN, STDOUT or STDERR
  --add-host=[]              Add a custom host-to-IP mapping (host:ip)
  -c, --cpu-shares=0         CPU shares (relative weight)
  --cap-add=[]               Add Linux capabilities
  --cap-drop=[]              Drop Linux capabilities
  --cgroup-parent=           Optional parent cgroup for the container
  --cidfile=                 Write the container ID to the file
  --cpuset-cpus=             CPUs in which to allow execution (0-3, 0,1)
  -d, --detach=false         Run container in background and print container ID
  --device=[]                Add a host device to the container
  --dns=[]                   Set custom DNS servers
  --dns-search=[]            Set custom DNS search domains
  -e, --env=[]               Set environment variables
  --entrypoint=              Overwrite the default ENTRYPOINT of the image
  --env-file=[]              Read in a file of environment variables
  --expose=[]                Expose a port or a range of ports
  -h, --hostname=            Container host name
  --help=false               Print usage
  -i, --interactive=false    Keep STDIN open even if not attached
  --ipc=                     IPC namespace to use
  -l, --label=[]             Set meta data on a container
  --label-file=[]            Read in a line delimited file of labels
  --link=[]                  Add link to another container
  --log-driver=              Logging driver for container
  --lxc-conf=[]              Add custom lxc options
  -m, --memory=              Memory limit
  --mac-address=             Container MAC address (e.g. 92:d0:c6:0a:29:33)
  --memory-swap=             Total memory (memory + swap), '-1' to disable swap
  --name=                    Assign a name to the container
  --net=bridge               Set the Network mode for the container
  -P, --publish-all=false    Publish all exposed ports to random ports
  -p, --publish=[]           Publish a container's port(s) to the host
  --pid=                     PID namespace to use
  --privileged=false         Give extended privileges to this container
  --read-only=false          Mount the container's root filesystem as read only
  --restart=no               Restart policy to apply when a container exits
  --rm=false                 Automatically remove the container when it exits
  --security-opt=[]          Security Options
  --sig-proxy=true           Proxy received signals to the process
  -t, --tty=false            Allocate a pseudo-TTY
  -u, --user=                Username or UID (format: <name uid="">[:<group gid="">])
  --ulimit=[]                Ulimit options
  -v, --volume=[]            Bind mount a volume  (e.g., from the host: -v /host:/container, from Docker: -v /container)
  --volumes-from=[]          Mount volumes from the specified container(s)
  -w, --workdir=             Working directory inside the container


내가 설치한 docker.io는 오래된 Version이며, 현재는 docker.ce로 변경이 되어 운영된다.
일단 이전 Version으로 한번 설치를 해본 후에 최신 Version으로도 다시 해보자.

Docker Command Line
  https://docs.docker.com/engine/reference/commandline/cli/


1.2  Docker CE/EE 버전

docker.io 와 docker.ce 차이
  https://stackoverflow.com/questions/45023363/what-is-docker-io-in-relation-to-docker-ce-and-docker-ee
  https://docs.docker.com/install/linux/docker-ce/ubuntu/

  • Uninstall old version 
$ sudo apt-get remove docker docker-engine docker.io containerd runc


  • Set up Repository 
$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


$ sudo apt-key fingerprint 0EBFCD88
    
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) 
sub   rsa4096 2017-02-22 [S]


$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"



  • Install Docker CE

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

$ sudo docker version
Client:
 Version:           18.09.3
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        774a1f4
 Built:             Thu Feb 28 06:40:58 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.3
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       774a1f4
  Built:            Thu Feb 28 05:59:55 2019
  OS/Arch:          linux/amd64
  Experimental:     false


  • Uninstall Docker CE


$ sudo apt-get purge docker-ce
$ sudo rm -rf /var/lib/docker