[이론] 도커 기본 명령어
필기자
2024-09-10 13:46
1,045
0
본문
목 차
도커 명령어
도커 명령어란?
도커 명령어의 기본적인 형태
커맨드(상위/하위)
대상(이미지)
명령어 인자
컨테이너 생성, 실행, 종료, 삭제
컨테이너 생성 및 실행
컨테이너 정지 및 삭제
컨테이너 목록
컨테이너 생성, 실행, 종료, 삭제 실습
컨테이너 통신
컨테이너 통신 체크 포인트
아파치 이미지로 컨테이너를 생성 후 웹 브라우저를 통해 컨테이너에 접근해 웹 사이트 동작 확인 실습
컨테이너 포트 포워딩 되었는지 확인
웹 브라우저를 통해 아파치 컨테이너에 접근 및 컨테이너 종료
Firefox 웹 브라우저
아파치 초기 화면
컨테이너 종료 및 삭제
이미지 삭제
이미지 삭제 체크 포인트
추가 이미지 확인
버전 지정 이미지 삭제
지정한 버전의 이미지가 삭제됐는지 확인
나머지 이미지 삭제
해당 이미지를 사용중인 컨테이너 확인
컨테이너 삭제 및 이미지 삭제
- 도커 명령어
- 컨테이너 생성, 실행, 종료, 삭제
- 컨테이너 통신
- 이미지 삭제
도커 명령어
도커 명령어란?
- 컨테이너를 다루는 명령어는 ‘docker’ 명령어로 시작 docker ~
도커 명령어의 기본적인 형태
- docker 커맨드(상위/하위) (옵션) 대상(이미지) (명령어) (인자)
커맨드(상위/하위)
- ‘무엇을‘, ‘어떻게’ 에 해당하는 부분
- 커맨드는 상위 커맨드(’무엇을’)와 하위 커맨드(‘어떻게‘)로 구성
- 상위 커맨드는 12종류(대상의 종류)
- docker container start penguin
- 옵션은 커맨드에 세세한 설정을 지정하는 용도
- 커맨드의 실행 방법 또는 커맨드에 전달할 값을 지정
- -d, --name penguin, -dit
대상(이미지)
- 커맨드와 달리 구체적인 이름을 지정
- docker container start [옵션] penguin
명령어 인자
- 대상에 전달할 명령어와 인자 값을 지정
- 문자 코드 또는 포트 번호 등을 전달 가능
- docker run -d -p 8000:8000 python:3.8-alpine python -m http.server
- docker run
- 새로운 도커 컨테이너를 실행하는 명령어.
- -d
- Detached 모드로 컨테이너를 백그라운드에서 실행한다. 즉, 터미널을 차지하지 않고, 컨테이너가 백그라운드에서 실행.
- 장기 실행 프로세스나 자동화 작업에서 터미널을 계속 사용할 수 있게 하거나, 여러 개의 컨테이너를 동시에 실행해야 할 때 유용.
- -p 8000:8000
- 호스트의 8000번 포트를 컨테이너의 8000번 포트에 연결.
- 호스트 시스템에서 http://localhost:8000 접속 후 컨테이너 내부에서 실행되는 HTTP 서버에 접근할 수 있음.
- python:3.8-alpine
- 도커 이미지 이름으로 Python 3.8 버전이 포함된 Alpine Linux 기반의 경량 도커 이미지를 사용함.
- Alpine Linux는 용량이 매우 작은 리눅스 배포판으로, Python 3.8 환경을 제공하는 이미지
- python -m http.server
- 처음 컨테이너 실행시 실행하는 명령어.
- Python의 내장 모듈인 HTTP 서버를 실행.
- 기본적으로 포트 8000에서 웹 서버.
- docker run
컨테이너 생성, 실행, 종료, 삭제
컨테이너 생성 및 실행
- 컨테이너를 생성하고 실행하는 커맨드 : docker run(docker container run)
- docker image pull, docker container create, docker container start 기능을 하나로 합친 것과 같음
- docerk run (옵션) 이미지 (인자)
- 주요 옵션
옵션 형식 | 내용 |
--name 컨테이너_이름 | 컨테이너 이름을 지정 옵 |
-p 호스트_포트번호 : 컨테이너_포트번호 | 포트 포워드 옵션, 호스트의 포트와 컨테이너 포트를 연결 |
-v 호스트_디스크 : 컨테이너_디렉터리 | 바인딩 또는 볼륨(도커엔진에서 생성) 마운트 옵션 |
--net 네트워크_이름 | 컨테이너를 네트워크(도커엔진에서 생성)에 연결 옵션 |
-e 환경변수_이름=값 | 환경변수를 설정 옵션 |
-d | 백그라운드로 실행 옵션 |
-i | 컨테이너에 표준 입력을 연결하여, 키보드 입력을 받을 수 있게 하는 옵션 |
-t | "pseudo-TTY"라는 가상 터미널(호스트와 컨테이너간 터미널 세션)을 생성하는 옵션, 컨테이너 내부에서 실행되는 프로그램이 터미널 환경에서 실행되는 것처럼 작동하게 함. 키보드 입력을 위해 -i 옵션과 함께 사용. |
-help | 사용 방법 안내 메시지를 출력 |
- 서버(데몬)이 아닌 OS형태의 컨테이너의 경우 run 실행시 바로 종료
- docker run을 실행하되 백그라운드에서 실행하고(-d), 프로세스가 종료되지 않게 유지하고(-it)
컨테이너 정지 및 삭제
- 컨테이너를 정지하는 커맨드 : docker stop(docker container stop)
- 컨테이너를 삭제하려면 컨테이너를 정지시켜야 함
- docker stop 컨테이너_이름
- 컨테이너를 삭제하는 커맨드 : docker rm(docker container rm)
- 정지 상태가 아닌 컨테이너를 대상으로 실행하면 오류 발생 후 컨테이너가 삭제 되지 않음
- docker rm 컨테이너_이름
컨테이너 목록
- 컨테이너의 목록을 출력하는 커맨드 : docker ps(docker container ls)
- 현재 실행 중인 컨테이너의 목록을 출력
- docker ps -a 옵션을 추가하면 현재 존재하는 컨테이너의 목록 출력
- 컨테이너 목록의 주요 항목
항목 | 내용 |
CONTAINER ID | 컨테이너 식별자, 무작위 문자열 할당. 본래 64글자 앞에서 12글자만 출력 |
IMAGE | 컨테이너를 만들 때 사용한 이미지의 이름 |
COMMAND | 컨테이너 실행 시에 실행하도록 설정된 프로그램의 이름 |
CREATED | 컨테이너 생성 후 경과된 시간 |
STATUS | 컨테이너의 현재 상태. 실행 중이라면 ‘UP’, 종료된 상태라면 ‘Exited’ 출력 |
PORTS | 컨테이너에 할당된 포트 번호. ‘ 호스트 포트 번호 -> 컨테이너 포트 번호‘ 형식으로 출력. 포트 번호가 동일할 경우-> 의 뒷부분은 출력되지 않음 |
NAMES | 컨테이너 이름 |
컨테이너 생성, 실행, 종료, 삭제 실습
- 컨테이너 생성
#아파치 이미지 사용해 컨테이너 생성 및 실행
docker run --name apa000ex1 -d httpd
- 아파치 이미지로 ‘apa000ex1’이름을 가진 컨테이너를 백그라운드로 생성 및 실행
- Unable to find image ‘httpd:latest’ locally : 지정한 이미지가 로컬 저장소에 존재하지 않을 때 나타나는 메세지
- latest: Pulling from library/httpd : 가장 최신 버전의 이미지 다운로드
#컨테이너 정보 확인
docker inspect apa000ex1
...... 생략
"NetworkSettings": {
"Bridge": "",
"SandboxID": "fb1b34f4f9022",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": null
},
"SandboxKey": "/var/run/docker/netns/fb1b34f4f902",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "b43eab8834dc5b",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
- 컨테이너 확인 및 종료
#실행중인 컨테이너 목록 확인
docker ps
#컨테이너 종료
docker stop apa000ex1
- 컨테이너 종료 및 존재 여부 확인
#실행중인 컨테이너 목록 확인
docker ps
#존재하는 컨테이너 목록 확인
docker ps -a
- 컨테이너 삭제 및 삭제 확인
#컨테이너 삭제
docker rm apa000ex1
#존재하는 컨테이너 목록 확인
docker ps -a
컨테이너 통신
컨테이너 통신 체크 포인트
- 포트 : 컴퓨터 네트워크에서 통신을 위한 통로
- 호스트 포트 번호와 컨테이너 포트 번호 포트 포워딩
- 포트 포워딩 : 컨테이너 내부 포트와 호스트 포트를 매핑하는 기술
- 매핑 : 두 개의 포트를 연결하는 작업
- -p 호스트_포트_번호 : 컨테이너_포트_번호 (-p 8080 : 80)
- 여러 개의 컨테이너를 생성하려면 호스트 포트 번호를 겹치지 않게 설정
아파치 이미지로 컨테이너를 생성 후 웹 브라우저를 통해 컨테이너에 접근해 웹 사이트 동작 확인 실습
- 아파치 : 웹 서버 기능을 제공하는 소프트웨어
#아파치 컨테이너 생성
docker run --name apa000ex2 -d -p 8080:80 httpd
컨테이너 포트 포워딩 되었는지 확인
#실행중인 컨테이너 목록 확인
docker ps
- ‘0.0.0.0:8080->80/tcp’ : 호스트의 모든 IP 주소(‘0.0.0.0’)에서 들어오는 요청을 컨테이너의 80번 포트로 전달, 프로토콜은 tcp
- :::8080->80/tcp : 호스트의 모든 IPv6 주소(:::)에서 들어오는 요청을 컨테이너의 80번 포트로 전달, 프로토콜은 tcp
웹 브라우저를 통해 아파치 컨테이너에 접근 및 컨테이너 종료
- Firefox 웹 브라우저 접속 및 컨테이너 접근
- http://localhost:8080/
- ‘localhost’ : 현재 사용중인 컴퓨터라는 뜻, 뒤에 콜론 및 포트 번호 기재하면 컨테이너에서 제공하는 웹사이트 접근
Firefox 웹 브라우저
아파치 초기 화면
컨테이너 종료 및 삭제
#컨테이너 종료
docker stop apa000ex2
#컨테이너 삭제
docker rm apa000ex2
이미지 삭제
이미지 삭제 체크 포인트
- 이미지를 삭제하는 이유 : 컨테이너를 삭제해도 이미지는 그대로 남아 스토리지 용량을 압박하게 됨
- 이미지 삭제하는 방법 : 해당 이미지로 실행한 컨테이너가 남아 있으면 이미지를 삭제할 수 없으므로 컨테이너 삭제후 이미지 삭제 가능
- docker image rm 커맨드
- 이미지를 삭제하는 명령어
- 공백으로 구분해 여러 이미지를 지정 가능
- docker image rm [이미지_이름] [이미지_이름] [이미지_이름]
이미지 삭제 실습
#이미지 목록 확인
docker image ls
- 이미지 목록의 주요 항목
항목 | 내용 |
REPOSITORY | 이미지 이름 |
TAG | 버전 정보, 이미지를 내려받을 때 따로 지정하지 않으면 latest(최신 버전)를 내려 받음 |
IMAGE ID | 이미지 식별자, 본래는 64글자 앞에서부터 12글자만 출력 |
CREATED | 이미지 생성 후 경과된 시간 |
SIZE | 이미지의 전체 용량 |
- 이미지 버전을 지정하여 다운로드 : [이미지_이름]:[버전_넘버]
#버전 지정 도커 이미지 다운로드
docker pull httpd:2.2
추가 이미지 확인
#이미지 목록 확인
docker image ls
버전 지정 이미지 삭제
#이미지 삭제
docker image rm httpd:2.2
지정한 버전의 이미지가 삭제됐는지 확인
#이미지 목록 확인
docker image ls
나머지 이미지 삭제
#이미지 삭제
docker image rm httpd
- 해당 이미지가 컨테이너에서 사용 중이기 때문에 이미지를 삭제할 수 없다는 이미지를 삭제할 수 없다는 오류 메시지
- 아파치 컨테이너 실습 중 컨테이너를 종료만 하고 삭제를 하지 않았기 때문에 삭제가 되지 않음
해당 이미지를 사용중인 컨테이너 확인
#존재하는 컨테이너 목록 확인
docker ps -a
컨테이너 삭제 및 이미지 삭제
#컨테이너 삭제
docker rm apa000ex2
#이미지 삭제
docker image rm httpd
댓글목록0