2.2.1 컨테이너 생성
//run 명령어로 컨테이너를 생성. (-i -t 옵션은 컨테이너와 상호 입출력을 가능하게 함.)
docker run -i -t ubuntu:14.04
//컨테이너 내부에서 빠져나오는 방법 (컨테이너 정지)
exit
Ctrl + d
//컨테이너 정지시키지 않고 빠져나오려면 ?
Ctrl +P, Q
//이미지 내려받기
docker pull centos:7
//이미지 목록 출력
docker images
//create 명령어로 컨테이너 생성
docker create -i -t --name mycentos centos:7
//컨테이너 내부로 들어가지 않고 생성
docker start mycentos
//컨테이너 내부로 들어가기
docker attach mycentos
run 명령어 순서 :
- docker pull (이미지가 없을 때)
- docker create
- docker start
- docker attach (-i -t 옵션을 사용했을 때)
create 명령어 순서 :
- docker pull (이미지가 없을 때)
- docker create
2.2.2 컨테이너 목록 확인
//컨테이너 목록 확인
docker ps
//컨테이너 전체 ID확인
docker inspect mycentos | grep Id
//컨테이너 이름 변경
docker rename mycentos mycentos2
2.2.3 컨테이너 삭제
//컨테이너 삭제
docker rm mycentos
//실행중인 컨테이너 멈추고 삭제
docker stop mycentos
docker rm mycentos
//실행중인 컨테이너 강제 삭제
docker rm -f mycentos
//모든 컨테이너 삭제
docker container prune
//-a, -q옵션을 조합해 컨테이너 삭제
//-a는 상태와 관계없이 모든 컨테이너를, -q는 컨테이너의 ID만 출력하는 역할
docker ps -a -q
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
2.2.4 컨테이너를 외부에 노출
//-p 옵션으로 컨테이너의 포트를 호스트의 포트와 바인딩, [호스트의 포트]:[컨테이너의 포트]
docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
//호스트의 특정 ip를 바인딩
docker run -i -t -p 3306:3306 -p 192.168.0.100:7777:80 ubuntu:14.04
2.2.5 컨테이너 애플리케이션 구축
//-d : Detached 모드로 컨테이너를 실행. 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행
//-e : 컨테이너 내부의 환경변수를 설정
docker run -d \
--name wordpressdb \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
mysql:5.7
//-link : 내부IP를 알 필요 없이 다른 컨테이너에 별명으로 접근하도록 설정
docker run -d \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress \
--link wordpressdb:mysql \
-p 80 \
wordpress
//호스트와 바인딩 된 포트 확인
docker port wordpress
//exec 명령어를 사용하면 컨테이너 내버에서 명령어를 실행한 뒤 그 결괏값을 반환받을 수 있음
docker exec wordpress ls
2.2.6 도커 볼륨
//-v [호스트의 공유 디렉터리]:[컨테이너 공유 디렉터리]
docker run -d \
--name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \
mysql:5.7
docker run -d \
-e WORDPRESS_DB_PASSWORD=password \
--name wordpress_hostvolume \
--link wordpressdb_hostvolumn:mysql \
-p 80 \
wordpress
//--volumes-from 옵션을 설정하면 -v 또는 --volume 옵션을 적용한 컨테이너의 볼륨 디렉터리를 공유할 수 있음
//볼륨 컨테이너에 연결해 데이터를 간접적으로 공유받는 방식
docker run -i -t \
--name volumes_from_container \
--volumes-from volume_override \
ubuntu:14.04
//도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존
docker volume create --name myvolume
//생성된 볼륨 확인
docker volume ls
//[볼륨의 이름]:[컨테이너의 공유 디렉터리]
docker run -i -t --name myvolume_1 \
-v myvolume:/root/ \
ubuntu:14.04
//docker inspect를 통해 컨테이너, 이미지, 볼륨 등 도커의 모든 구성 단위의 정보를 확인
//볼륨의 실제 저장 위치 확인
docker inspect --type volume myvolume
//볼륨 자동 생성. -v 옵션에 공유 디렉터리 위치만 입력.
docker run -i -t --name volume_auto \
-v /root \
ubuntu:14.04
//볼륨 일괄 삭제
docker volume prune
2.2.7 도커 네트워크
도커 네트워크 기능
//네트워크 목록 확인
docker network ls
//네트워크의 자세한 정보
docker network inspect ~
docker inspect --type network
브리지 네트워크
//새로운 브리지 네트워크 생성
docker network create --driver bridge mybridge
//mybridge 네트워크를 사용하는 컨테이너 생성
docker run -i -t --name mynetwork_container \
--net mybridge \
ubuntu:14.04
//서브넷, 게이트웨이, IP할당 범위 등을 임의로 설정
docker network create --driver=bridge \
--subnet = 172.72.0.0/16 \
--ip-range = 172.72.0.0/24 \
--gateway = 172.72.0.1 \
my_custom_network
호스트 네트워크
//호스트의 네트워크 환경을 그대로 사용
//컨테이너의 네트워크를 호스트 모드로 설정하면 컨테이너 내부의 애플리케이션을 별도의 포트 포워딩 없이 바로 쓸 수 있음
docker run -i -t --name network_host \
--net host \
ubuntu:14.04
논 네트워크
//none 옵션을 사용하면 외부와 연결 단절
docker run -i -t --name network_none \
--net none \
ubuntu:14.04
컨테이너 네트워크
//--net 옵션으로 container를 입력하면 다른 컨테이너의 네트워크 환경을 공유할 수 있음
docker run -i -t -d --name network_container_1 ubuntu:14.04
docker run -i -t -d --name network_container_2 \
--net container:network_container_1 \
ubuntu:14.04
브리지 네트워크와 --net-alias
//브리지 타입의 네트워크와 run 명령어의 --net-alias 옵션을 함께 쓰면 특정 호스트 이름으로 컨테이너 여러 개에 접근할 수 있음
docker run -i -t -d --name network_alias_container_1 \
--net mybridge \
--net-alias alicek106 ubuntu:14.04
docker run -i -t -d --name network_alias_container_2 \
--net mybridge \
--net-alias alicek106 ubuntu:14.04
docker run -i -t -d --name network_alias_container_3 \
--net mybridge \
--net-alias alicek106 ubuntu:14.04
//컨테이너 생성 후 ping 요청하면 세개의 컨테이너가 교대로 응답함
docker run -i -t -d --name network_alias_ping \
--net mybridge \
ubuntu:14.04
ping -c alicek106
//dig로 도메인 이름에 대응하는 IP조회
apt-get update
apt-get install dnsutils
dig alicek106
2.2.8 컨테이너 로깅
json-file 로그 사용하기
docker run -d --name no_passwd_mysql \
mysql:5.7
//docker logs명령어로 컨테이너의 표준 출력 확인
docker logs no_passwd_mysql
//--tail 옵션으로 마지막 로그 줄부터 출력할 수 지정
docker logs --tail 2 mysql
//--since 옵션으로 특정 시간 이후의 로그 확인
docker logs --since 1474765979 mysql
//-t 옵션으로 타임스태프 표시, -f옵션으로 로그를 스트림으로 확인
docker logs -f -t mysql
syslog 로그
fluentd 로깅
아마존 클라우드워치 로그
2.2.9 컨테이너의 자원 할당 제한
컨테이너 메모리 제한
컨테이너 CPU 제한
Block I/O 제한
컨테이너 저장 공간 설정