Skip to content

Instantly share code, notes, and snippets.

@jungbin-kim
Last active October 31, 2017 11:14
Show Gist options
  • Save jungbin-kim/d0c8a41d3c72ebdace3c4d5acaa017e4 to your computer and use it in GitHub Desktop.
Save jungbin-kim/d0c8a41d3c72ebdace3c4d5acaa017e4 to your computer and use it in GitHub Desktop.
docker for MacOS by Brew
# Dockerfile을 만들 directory 생성
$ mkdir OracleLinux7.2
# 생성한 directory 내, Dockefile 파일 생성
$ cd OracleLinux7.2/
$ vi Dockerfile
##### Example Dockerfile #####
# Set up oracle linux 7.2
# Pull base image
FROM oraclelinux:7.2
#####
# Dockerfile을 이용한 image 빌드
# docker build [-t{Image 명} [:{Tag 명}]]{Dockerfile이 존재하는 directory 아래에서는 dockerfile이 존재하는 diretory에서 실행하여 '.'임 }
$ docker build -t jb/oraclelinux:7.2 .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM oraclelinux:7.2
...
# 빌드된 image 확인
$ docker images
# 빌드된 image로 container run
$ docker run --rm -it jb/oraclelinux:7.2 /bin/bash
# -p docker-machine port matching
# -p {외부 포트}:{내부 포트}
# -v: mount host directory
# -v {host dir}:{container dir}
$ docker run --rm -it -p 9000:9000 -v ~/DockerMount:/mnt jb/oraclelinux:7.2 /bin/bash

Set up

brew로 Docker설치

$ brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

# docker-machine-driver-xhyve need root owner and uid
$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

docker 내 컨테이너 실행

# macOS 내에서 실행되고 있는 docker Machine에 SSH 접속
$ docker-machine ssh dev

# ... docker machine 내로 이동

# ubuntu 컨테이너 실행 및 컨테이너 접속
$ docker run --rm -it ubuntu /bin/bash

docker run 옵션

-it 옵션: 컨테이너 내부에 들어가기 위해 bash 쉘을 실행하고 키보드 입력 가능

--rm 옵션: 프로세스가 종료되면 컨테이너가 자동으로 삭제

Managing docker container

# 모든 컨테이너 상태 확인
$ docker ps -a

# 종료된 컨테이너 다시 실행
$ docker restart {container id}

# 다시 실행된 컨테이너 접속
$ docker attach {container id}

개념

docker

컨테이너 기반의 오픈 소스 가상화 플랫폼 [1] docker 내부는 client와 host로 나뉨.

docker-machine-driver

xhyve: macOS에서 제공하는 가상환경

docker-machine

Docker Machine은 가상 호스트에서 Docker engine을 설치할 수 있게하고, 그 호스트들을 docker-machine 명령어로 관리할 수 있게하는 도구이다. Machine을 이용하여 로컬 Mac이나 윈도우, 클라우드 서비스 제공자 등에서 Docker host들을 만들 수 있다. docker-machine 명령어로 관리 host를 start, inspect, stop, restart를 할 수 있고, docker client와 daemon을 업그레이드 할 수 있으며, docker client의 환경을 설정할 수 있다.

docker-compose

Compose는 multi-container Docker application들을 정의하고 실행하기 위한 도구이다. Compose file을 사용해서 application의 서비스들을 형성한다. 그리고, 하나의 명령어로 configuration에 있는 모든 서비스들을 만들고 시작할 수 있다. Compose를 이용하는 것은 기본적으로 3단계의 과정을 거친다.

  1. app의 환경을 Dockerfile에 정의함으로 app을 어디에나 복제할 수 있게 한다.
  2. app을 이루고 있는 서비스들을 docker-compose.yml에 정의함으로 하나의 고립된 환경에 서비스들이 함께 실행될 수 있게 한다.
  3. docker-compose up 명령어를 실행함으로 Compose는 모든 app을 시작하고 실행할 것이다.

dockerfile

Docker는 Dockerfile로부터 명령어들을 읽어 image들을 자동적으로 빌드할 수 있다. 공식문서를 참고해서 작성.

$ mkdir {DockerFile repository}
$ cd {DockerFile repository}
# Make new DockerFile
$ vi DockerFile

# Build image by using dockerfile
$ docker build -t {image's name} .

# Run a {image's name} container -d: background
$ docker run -d -P --name {container's name} {image's name}

참고자료

# docker-machine 내 ps? 확인
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Error Unknown machine does not exist
dev - virtualbox Stopped Unknown
# 특정 docker-machine start
$ docker-machine start dev
Starting "dev"...
(dev) Check network to re-create if needed...
(dev) Waiting for an IP...
docker-machine lsMachine "dev" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
# start 상태 확인
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Error Unknown machine does not exist
dev - virtualbox Running tcp://192.168.99.100:2376 v1.12.2
# macOS 내에서 실행되고 있는 docker Machine에 SSH 접속
$ docker-machine ssh dev
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
#
# Set up oracle linux 7.2 with JRE 8
# Pull base image
FROM oraclelinux:7.2
MAINTAINER JB <jungbin.kim@letsee.io>
ENV JRE_VERSION 8u151
ENV JRE_BUILD_NUM b12
ENV JRE_DOWNLOAD_HASH e758a0de34e24606bca991d704f6dcbf
RUN \
echo "Update packages" && \
yum update -y && \
yum install -y wget && \
echo "Install JRE" && \
wget --quiet --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/$JRE_VERSION-$JRE_BUILD_NUM/$JRE_DOWNLOAD_HASH/jre-$JRE_VERSION-linux-x64.rpm" && \
rpm -ivh jre-$JRE_VERSION-linux-x64.rpm && \
java -version
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment