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 명령어 순서 : 

  1. docker pull (이미지가 없을 때)
  2. docker create
  3. docker start
  4. docker attach (-i -t 옵션을 사용했을 때)

create 명령어 순서 :

  1. docker pull (이미지가 없을 때)
  2. 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 제한
컨테이너 저장 공간 설정

'개발 도서 > 시작하세요!도커' 카테고리의 다른 글

02 도커 엔진 - 2.4 Dockerfile  (0) 2020.06.08
02 도커 엔진 - 2.3 도커 이미지  (0) 2020.06.07
02 도커 엔진 - 2.1 도커 이미지와 컨테이너  (0) 2020.06.07
01 도커란?  (0) 2020.06.07
목차  (0) 2020.06.07

+ Recent posts