[Docker&Compose] Docker & compose & auto complete install

Docker & docker-compose & docker-compose auto complete install


ENV

OS : ubuntu 16.04
Docker ver: docker CE 17.12.1 (2018-03-17)
compose-version : 1.19.0

Recommend follow official page install guide


TL; DR

#Docker CE install on Ubuntu 16.04
$ sudo apt-get remove docker docker-engine docker.io\
    && sudo apt-get update \
    && sudo apt-get install  apt-transport-https ca-certificates curl software-properties-common \
    && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add – \
    && sudo apt-key fingerprint 0EBFCD88 \
    && sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
    && sudo apt-get update \
    && sudo apt-get install docker-ce

#Docker-compose(1.19.0) install on Ubuntu 16.04
$ sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose \
    && sudo chmod +x /usr/local/bin/docker-compose

# Docker-compose bash complete install on Ubuntu 16.04
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.19.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose \
    && source ~/.bashrc
# OR Logout and Login

 


Docker install [link]

$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ sudo apt-get install  apt-transport-https \
     ca-certificates \
     curl \
     software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \ 
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce

 

Docker-compose install [link]

$ sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

 

Docker-compose auto complete install [link]

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.19.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
# source ~/.bashrc OR Logout and Login

If not working then install bash_completion package and retry.

[Docker]docker-compose 정리

Docker Compose

여러 docker를 한번에 up(setup)할때 사용하는 방법이다. yml 파일을 사용하며, docker-compose up명령어로 실행하여 사용할 수 있다.


TL;DR

version: '{버전}'
services:
  {도커 이름}:
    driver: {네트워크 이름}
    build: {dockerfile build 할 시 디렉토리}
    ports:
    - "{외부포트}:{컨테이너포트}"
    volumes:
    - {볼륨명}: {컨테이너 위치}
    - logvolume01:/var/log
    links:
    - redis #링크
  redis:
    image: redis # dockerfile에서 build 하지않고 이미지를 받아옴
    environment:
        {환경 변수명}: {컨테이너이름}:3456
        DB_PASSWORD: redis:password
volumes:
  logvolume01: {}

networks:
  {네트워크 이름}:
    # 커스텀 네트워크 사용
    driver: custom-driver-1
  {네트워크 이름}:
    # 커스텀 네트워크 옵션 사용
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"

Version

난빠가엿다..

docker 문법의 버전을 의미한다. 각 버전벌로 필요로하는 docker-engine이 다르고 지원하는 문법이 다르니 주의.

Compose file format Docker Engine release
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+

Service

아래엔 container의 상세 내용이 기술된다.

{도커 이름} : # run될 container의 이름을 설정한다.

build: . # 빌드할 Dockerfile의 경로
image: ubuntu:16.04 # 빌드 하지않고 이미지를 사용할 수 있음.

ports:
– 8080:80 # 외부포트 : 컨테이너 포트 설정

volume:
– my_data:/data # 볼륨명 : 컨테이너 위치

link:
– container_name # link로 연결할 컨테이너 이름 ( deprecate )

environment:
– ENV_NAME: env_value # 환경변수 설정

Network

driver: bridge # 네트워크에서 사용할 드라이버 종류 (overlay, host, none 등…)

internal : true # 내부망 설정 옵션

ipam:
    driver: default # ipam에서 사용할 드라이버 옵션 기본 설정은 default
    config: # ipam config
        – subnet : 10.0.0.0/24 # subnet 설정 ps. gateway설정은 version 2에서만 지원된다.

 

나만의 Docker registry 만들기

Docker registry


https를 적용을 하지않고 http를 사용하지만, 간단한 인증은 진행하는 docker registry를 만들어보자.

$ mkdir $PWD/registry_data/auth

$ docker run \

    --entrypoint htpasswd \

    registry:2 -Bbn "silnex" "myPassw0rd" > $PWD/registry_data/auth/htpasswd

위 커맨드를 사용해 $PWD/registry_data/auth안에 htpasswd라는 인증을 위한 ID와 Password 파일을 만들어준다.

docker run -d --name <my-registry> \
        --restart=always \
        -v $PWD/registry_data:/data \
        -v $PWD/registry_data/auth:/auth \
        -e "REGISTRY_AUTH=htpasswd" \
        -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
        -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
        -p 5000:5000 \
        <my-docker-registry>

이렇게 실행하면 실행 후 <my-docker-registry>:5000에 위에서 설정한 id와 pw로 docker registry에 push와 pull을 할 수 있다.

 

Ex

$ docker login <my-docker-registry>:5000 
>> id와 pw를 입력

$ docker push <my-docker-registry>/<my-image>:tag

이렇게 하면 내 registry에 이미지가 올라가게 된다.
확인은 직접 pull을 해보는 방법도 있지만, http://<my-docker-registry>:5000/v2/_catalog에 들어가 로그인하면 image 리스트가 나오게 된다.

Docker commit 정리

Docker commit

실행중인 container의 변경사항을 commit한다.

Usage

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Options

Name, shorthand Default Description
--author , -a   commit한 사람 (e.g., “silnex <silnex@silnex.kr>”)
--change , -c   Dockerfile 명령을 생성 된 이미지에 적용합니다.
--message , -m   Commit 메시지
--pause , -p true 이미지를 생성하는 동안 컨테이너를 일시 정지 합니다.

 

Ex

docker commit -a "SilNex <silnex@silnex.kr>" -m "add somthing" <container-name> <new-image-name>:0.1

<container-name> 컨테이너를 <new-image-name>:0.1 로 commit 한다.