## image 생성

- Dockerfile 작성

FROM ubuntu:16.04

WORKDIR /app


- 이미지 빌드

> docker build -t 이미지_이름 Dockerfile_경로


## container 실행

실행> docker run -it --name 컨테이너_이름 이미지_이름

-d : 데몬으로 실행

-p : 포트 바인딩 (ex. -p 80:80)

-it : 출력 표시

중지> docker stop [컨테이너_이름 | 컨테이너_ID]

시작> docker start [컨테이너_이름 | 컨테이너_ID]

## 실행중인 container 연결

> docker exec -it [컨테이너_이름 | 컨테이너_ID] bash


## cloud.docker.com 업로드

(public 무제한, private 1개 무료)


태그 달고 업로드

> docker login

> docker tag 이미지_이름 사용자_ID/레파지토리명:태그명

> docker push 사용자_ID/레파지토리명:태그명


이후 실행시 다운로드하여 실행 가능(ex. docker run -it 사용자_ID/레파지토리명:태그명)


## Services

여러 이미지를 구동시킴

https://docs.docker.com/get-started/part3/#understanding-services

docker-compose.yml 작성 


# 기능 활성

> docker swarm init

# 디플로이

> docker stack deploy -c docker-compose.yml 서비스_이름

# 조회

> docker stack ps 서비스_이름

# 삭제

> docker stack rm getstartedlab

## Swarms

여러 머신에 Services 구동(클러스터)

https://docs.docker.com/get-started/part4/#create-a-cluster

hyper-v 관리자 > 가상 스위치 관리자 > "외부" 가상 스위치 만들기

이름 : myswitch

체크 : "관리 운영 체제에서 이 네트워크 어댑터를 공유할 수 있도록 허용(M)"

> docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1

> docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2

# 명령 실행시 docker swarm join 문이 출력됨

> docker-machine ssh myvm1 "docker swarm init"

# myvm2에 대해 docker swarm join 문 실행

> docker-machine ssh myvm2 "docker swarm join --token <token> <ip>:<port>"

# 설정 복사시 scp 가 없어서 에러 나는 경우

# C:\Program Files\Git\usr\bin 의 Path 등록하여 scp.exe 사용하도록 실행

> docker-machine scp docker-compose.yml myvm1:~

# 실행

> docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"

# 조회

> docker-machine ssh myvm1 "docker stack ps getstartedlab"

## 명령어


# 모든 정지한 컨테이너 삭제

> docker container prune


# 모든 사용되지 않은 볼륨 삭제

> docker volume prune


# 모든 컨테이너로 사용되지 않는 이미지 삭제

> docker rm -f $ ( docker ps -a -q )

PS> docker rm -f @(docker ps -aq)


# 태그가 붙지 않은 이미지 삭제 (<none>:<none>)

> docker rmi $ ( docker images -f 'dangling = true' -q )

PS> docker rmi @( docker images -f "dangling = true" -q )


# 정지 컨테이너, 사용하지 않는 이미지/볼륨 일고라 삭제

> docker system prune


# 파일 복사

> docker cp 파일 컨테이너명:경로


# commit : dev 컨테이너를 dev:latest 에 커밋

> docker commit dev dev:latest


# export image

> docker save 이미지이름 > ./image.tar


# import image

> docker load < ./image.tar


# export container

> docker export 컨테이너명 > ./container.tar


# import container

> docker import ./container.tar


# docker 컨테이너 생성

> docker run -it -p 1980:1980 --name 컨테이너명 --security-opt seccomp=unconfined 이미지명:태그