2. 이미지, 컨테이너
by 코딩무비반응형
도커 이미지, 컨테이너
도커 이미지
- 컨테이너를 생성할 때 필요한 요소
- 여러 개의 계층으로 된 바이너리 파일로 존재
- 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용
- 이미지의 이름 - [저장소 이름]/[이미지 이름] : [태그]로 구성
ex) alicek106/ubuntu:18.04
저장소 이름 : 이미지가 저장된 장소(생략 가능)
이미지 이름 : 해당 이미지가 어떤 역할을 하는 지
태그 : 이미지의 버전 관리 (생략 가능)
도커 컨테이너
- 이미지의 목적에 맞는 파일이 들어 있는 파일시스템을 가진 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간
- 이미지에서 변경된 사항만 컨테이너 계층에 저장 -> 기존 이미지 영향 X
- 각 컨테이너는 독립된 공간을 제공받아 다른 컨테이너와 호스트 영향 X
도커 컨테이너 명령어
실행(생성)
- 컨테이너 생성하고 실행하는 역할
- docker run -i -t <이미지 이름>:[<태그>]
생성
- docker create -i -t --name <컨테이너 이름> <이미지 이름>: [<태그>]
시작
- docker start <컨테이너 이름>
컨테이너 내부명령어 실행
- docker exec <컨테이너 이름> <내부 명령어>
컨테이너 내부로 들어가기
- docker attach <컨테이너 이름>
컨테이너에서 빠져나오기
- 컨테이너 정지 시키면서 빠져나오기
exit입력 or Ctrl + D - 컨테이너 유지
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 |
블로그의 정보
코딩무비
코딩무비