root@contem:~# docker run nginx
# nginx라는 이미지로 컨테이너를 run(생성 + 동작) 시키겠다
컨테이너 이미지는 여러개의 layer로 구성되어있다
A 이미지 = 1+2+3 이고 B 이미지 = 1+2+5라면 A 이미지를 갖고있는 상태에서 B 이미지를 새로 구성한다면, 5라는 layer만 새로 구성하고 1+2는 재활용한다.
또한 여러개의 컨테이너를 만든다고 하더라도 컨테이너 이미지 자체는 변하지 않는다.

docker run을 하면 컨테이너가 생성된다. 현재 생성된 컨테이너는 --name 옵션을 통해 이름을 정하지 않아 random한 이름이 부여된다.
만약 옵션없이 docker run을 하면 컨테이너 내부로 진입한다.
컨테이너가 잘 동작하려면 반드시 내부에서 foreground 상태인 프로세스가 존재 해야한다!
컨테이너의 이름을 지정할 수 있다.
root@contem:~# docker run --name mycon nginx

root@contem:~# docker run -d --name ntest nginx:latest
# -d:호스트입장에서 백그라운드로 컨테이너 실행.
root@contem:~# docker inspect ntest
# inspect : 자세히 조사.
# ntest라는 이름을 갖고있는 컨테이너의 자세한 정보를 보고싶다.
-it 옵션
이미 컨테이너가 존재한다면 exec -it로 컨테이너 내부로 들어갈 수 있다.

만약에 컨테이너를 다 전부 삭제하고 싶다면
docker rm -f $(docker ps -qa)
로 삭제할 수 있다.
Volume(-v)
컨테이너와 호스트를 마운트하는 개념이다.
root@contem:~# mkdir /shared
root@contem:~# docker run -d --name con -v /shared:/remote nginx:latest
root@contem:~# echo vol-test > /shared/test.txt
# 호스트에 테스트 파일 생성
root@con-tem:~# ls /shared/
test.txt
root@contem:~# docker exec con cat /remote/test.txt
vol-test

이렇게 cat을 통해확인할수있다
컨테이너를 삭제해도 호스트에는 파일이 남는다.
nginx에 웹 루트 디렉토리는 /usr/share/nginx/html 이다.
root@contem:~# docker run -d --name vol -v /shared:/usr/share/nginx/html nginx:latest
# 기존에 파일이 존재하는 디렉토리를 마운트포인트로 하여 -v 구성
root@contem:~# docker run -d --name pub -p 8080:80 httpd:latest
여기서 8080포트는 호스트 포트 80은 컨테이너 포트이다.

root@contem:~# docker run -d --name pwd -w /usr nginx:latest
root@contem:~# docker exec -it pwd bash

그림과 같이 작업 디렉토리가 /usr로 정해져있다.
도커이미지를 만들기 위한 명세표라고 보면 된다.


이미지를 빌드를 해주고
root@contem:/docker# docker run -dp 8181:80 --name myweb mynginx:1
run을통해 컨테이너를 생성하고 curl localhost:8181을 통해 동작을 확인할 수 있다.
FROM nginx:latest
# 베이스 이미지
WORKDIR /usr/share/nginx/html
# 작업 디렉토리 변경.
root@contem:/docker# docker build -t mynginx:2 .
# 이미지 빌드.
# 현재 디렉토리의 Dockerfile을 토대로 mynginx:2 라는 이미지를 만들어라.
root@contem:/docker# docker run -it --name myweb2 mynginx:2 bash
# 컨테이너 생성과 동시에 진입

root@contem:/docker# echo copy_test > index.html
# 간단한 파일 생성. 우리는 이걸 앱이라고 간주.
root@contem:/docker# vi Dockerfile

FROM nginx:latest
# 베이스 이미지
WORKDIR /usr/share/nginx/html
# 작업 디렉토리 변경.
COPY index.html index.html
# 파일이나 디렉토리 복사
# 파일이면 파일로, 디렉토리면 디렉토리로 복사하는게 좋다.
# 현재 COPY명령을 수행하는 시점에서
# WORKDIR이 웹루트디렉토리로 잡혀있기때문에
# 파일만 명시해도 웹루트디렉토리로 복사가 된다.
root@contem:/docker# docker build -t mynginx:3 .
# 이미지빌드
root@contem:/docker# docker run -dp 5959:80 --name myweb3 mynginx:3
# 컨테이너 생성

COPY <호스트파일> <컨테이너파일>
COPY <호스트경로> <컨테이너경로>
