코딩무비

2. 이미지, 컨테이너

by 코딩무비
반응형

도커 이미지, 컨테이너

도커 이미지
  • 컨테이너를 생성할 때 필요한 요소
  • 여러 개의 계층으로 된 바이너리 파일로 존재
  • 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용
  • 이미지의 이름 - [저장소 이름]/[이미지 이름] : [태그]로 구성
    ex) alicek106/ubuntu:18.04
    저장소 이름 : 이미지가 저장된 장소(생략 가능)
    이미지 이름 : 해당 이미지가 어떤 역할을 하는 지
    태그 : 이미지의 버전 관리 (생략 가능)
도커 컨테이너
  • 이미지의 목적에 맞는 파일이 들어 있는 파일시스템을 가진 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간 
  • 이미지에서 변경된 사항만 컨테이너 계층에 저장 -> 기존 이미지 영향 X
  • 각 컨테이너는 독립된 공간을 제공받아 다른 컨테이너와 호스트 영향 X

 

 

 

 

 

 

 

 

도커 컨테이너 명령어

실행(생성)
  • 컨테이너 생성하고 실행하는 역할
  • docker run -i -t <이미지 이름>:[<태그>]
생성
  • docker create -i -t --name <컨테이너 이름> <이미지 이름>: [<태그>]

시작

  • docker start <컨테이너 이름>

 

컨테이너 내부명령어 실행
  • docker exec <컨테이너 이름> <내부 명령어>
컨테이너 내부로 들어가기        
  • docker attach <컨테이너 이름>
컨테이너에서 빠져나오기
  1. 컨테이너 정지 시키면서 빠져나오기
    exit입력 or Ctrl + D
  2. 컨테이너 유지 
    Ctrl + P, Q
목록
  • 정지되지 않은 컨테이너만 출력
    docker ps
  • 전체 커테이너 출력
    docker ps -a
이름 변경
  • docker rename <기존 이름> <바꿀 이름>
중지
  • docker stop <컨테이너 이름>
삭제
  • 중지된 컨테이너 삭제
    docker rm <
    컨테이너 이름>
  • 컨테이너 강제 삭제
    docker rm -f <컨테이너 이름>
모든 컨테이너 삭제
  • docker container prune
모든 컨테이너 ID
  • docker ps -a -q
모든 컨테이너 중지
  • docker stop $(docker ps -a -q)
모든 컨테이너 삭제
  • docker rm $(docker ps -a -q)
외부 컨테이너 노출
  • docker run -it -p <호스트 포트>:<컨테이너 포트>  <이미지 이름>
 

 

Docker ps

docker ps

실행결과

CONTAINER ID   IMAGE                    COMMAND                  CREATED      STATUS      PORTS                                                  NAMES
f243cea06ae0   jenkins/jenkins:latest   "/sbin/tini -- /usr/…"   3 days ago   Up 3 days   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 50000/tcp   jenkins
91f79eaf59e9   docker-server/nginx      "/docker-entrypoint.…"   3 days ago   Up 3 days   0.0.0.0:80->80/tcp, :::80->80/tcp                      nginx
69a57e790bb4   docker-server/django     "uwsgi --ini uwsgi.i…"   3 days ago   Up 3 days   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp              django
96125ec042e4   mysql:8.0                "docker-entrypoint.s…"   3 days ago   Up 3 days   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   db

 

이름 설명
CONTAINTER ID  컨테이너에게 자동으로 할당되는 고유 ID
IMAGE  컨테이너를 생성할  사용된 이미지의 이름
COMMAND  컨테이너가 시작   실행될 명령어
CREATED 컨테이너가 생성되고   흐른 시간
STATUS 컨테이너의 상태 UP, Exited, Pause
PORTS  컨테이너가 개방 포트와 호스트에 연결한 포트
NAMES  컨테이너의 고유한 이름

 

 

 

실습 : 컨테이너를 외부에 노출

1. 컨테이너 실행
docker run -it --name network_test ubuntu:18.04
2. 컨테이너 내부에서 ifconfig 실행
root@69d262d04713:/# ifconfig

실행결과

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 4483  bytes 25082763 (25.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4109  bytes 275715 (275.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

도커의 NAT IP인 eth0 인터페이스와 로컬 호스트인 lo 인터페이스 확인

컨테이너는 도커가 설치된 호스트에서만 접근 가능

 

아무런 설정을 하지 않았을 시 컨테이너는 외부에서 접근 X

 

ifconfig 가 안될 시!

더보기

apt-get update

apt-get install net-tools

ifconfig

 

3. eth0의 IP와 포트를 호스트의 IP와 포트에 바인딩
$ docker run -it --name mywebserver -p 80:80 ubuntu:18.04
root@c436e084f3a7:/# apt-get update
root@c436e084f3a7:/# apt-get insatll apache2 -y
root@c436e084f3a7:/# service apache2 start
4. 호스트의 IP 확인
  • 주소창에 호스트 IP:80 입력
  • 호스트 IP : aws ec2 주소

성공!

도커 컨테이너는 자체적으로 172.17.0.x의 IP을 순차적으로 할당받음 

but, 도커 컨테이너를 외부에 노출시키기 위하여 도커 컨테이너와 호스트를 바인딩

 

 

 

출처

 

시작하세요! 도커/쿠버네티스

반응형

'도커' 카테고리의 다른 글

aws cloudwatch  (5) 2022.04.14
컨테이너 로깅  (6) 2022.03.30
[Docker] 4. 도커 네트워크  (8) 2022.03.24
3. 컨테이너 애플리케이션 구축  (4) 2022.03.22
[Docker] 1. 도커란?  (1) 2022.03.17

블로그의 정보

코딩무비

코딩무비

활동하기