도커 기본 명령어 > 도커 & 쿠버네티스

본문 바로가기

[이론] 도커 기본 명령어

필기자
2024-09-10 13:46 1,045 0

본문

목 차
  • 도커 명령어
  • 컨테이너 생성, 실행, 종료, 삭제
  • 컨테이너 통신
  • 이미지 삭제

도커 명령어

도커 명령어란?
  • 컨테이너를 다루는 명령어는 ‘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 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 옵션을 추가하면 현재 존재하는 컨테이너의 목록 출력
2049277881_3UoFwWmq_dd287838d0c52520d7be74e92c4a82f2676d297a.png
 
  • 컨테이너 목록의 주요 항목
항목 내용
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 : 가장 최신 버전의 이미지 다운로드
2049277881_z7e2uXpg_dc4fb407312a4acdce6a0912753583946e8d31d1.png

#컨테이너 정보 확인
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

2049277881_WOga27J4_3a58a08691769d200fffd22bd6e33d1ac7d5d20b.png


#컨테이너 종료 
docker stop apa000ex1

2049277881_12mWjOox_17b801e9c93215791c19d37df92e6479ba22c59b.png

 
  • 컨테이너 종료 및 존재 여부 확인

#실행중인 컨테이너 목록 확인
docker ps

2049277881_DPXsOeLr_ed873f02393d7c67d348fafaf9a36a926bc78110.png


#존재하는 컨테이너 목록 확인
docker ps -a

2049277881_kTBtgeK1_7d826dd6bac281f1ddf5f6feab09a421eebb079e.png

 
  • 컨테이너 삭제 및 삭제 확인

#컨테이너 삭제
docker rm apa000ex1

2049277881_IW3uUHEg_945a3a9322df9d9ed5a054da83d0d4a42a443795.png


#존재하는 컨테이너 목록 확인
docker ps -a

2049277881_0Sv6Rkp9_bc2e25b5dc5dd7dc9b0f9dcb4fd7c595644f08a3.png


컨테이너 통신

컨테이너 통신 체크 포인트
 
  • 포트 : 컴퓨터 네트워크에서 통신을 위한 통로
  • 호스트 포트 번호와 컨테이너 포트 번호 포트 포워딩
  • 포트 포워딩 : 컨테이너 내부 포트와 호스트 포트를 매핑하는 기술
  • 매핑 : 두 개의 포트를 연결하는 작업
  • -p 호스트_포트_번호 : 컨테이너_포트_번호 (-p 8080 : 80)
  • 여러 개의 컨테이너를 생성하려면 호스트 포트 번호를 겹치지 않게 설정


2049277881_0aIfHW5R_62aa6a9ac746ad798d3670b2eb6f38e3d371e9be.png

아파치 이미지로 컨테이너를 생성 후 웹 브라우저를 통해 컨테이너에 접근해 웹 사이트 동작 확인 실습
  • 아파치 : 웹 서버 기능을 제공하는 소프트웨어

#아파치 컨테이너 생성
docker run --name apa000ex2 -d -p 8080:80 httpd

2049277881_DnRYSf28_c59cff6ed8a30ae1c69127bbe43c627fb3ba9011.png


컨테이너 포트 포워딩 되었는지 확인


#실행중인 컨테이너 목록 확인
docker ps
  • ‘0.0.0.0:8080->80/tcp’ : 호스트의 모든 IP 주소(‘0.0.0.0’)에서 들어오는 요청을 컨테이너의 80번 포트로 전달, 프로토콜은 tcp
  • :::8080->80/tcp : 호스트의 모든 IPv6 주소(:::)에서 들어오는 요청을 컨테이너의 80번 포트로 전달, 프로토콜은 tcp
2049277881_kyHbRqNm_ba7c8e6126e03b87abef7c4317ea2bbce715ede8.png

웹 브라우저를 통해 아파치 컨테이너에 접근 및 컨테이너 종료
  • Firefox 웹 브라우저 접속 및 컨테이너 접근
    • http://localhost:8080/
    • ‘localhost’ : 현재 사용중인 컴퓨터라는 뜻, 뒤에 콜론 및 포트 번호 기재하면 컨테이너에서 제공하는 웹사이트 접근

Firefox 웹 브라우저
2049277881_szClGSwK_22652b5aaadfa5bae8db163223225d6d298e368f.png

아파치 초기 화면 
2049277881_MZg7fuQA_b5edc9fabd8970a20b08143937c45064b5414f3a.png


컨테이너 종료 및 삭제


#컨테이너 종료
docker stop apa000ex2



#컨테이너 삭제
docker rm apa000ex2


이미지 삭제

이미지 삭제 체크 포인트
  • 이미지를 삭제하는 이유 : 컨테이너를 삭제해도 이미지는 그대로 남아 스토리지 용량을 압박하게 됨
  • 이미지 삭제하는 방법 : 해당 이미지로 실행한 컨테이너가 남아 있으면 이미지를 삭제할 수 없으므로 컨테이너 삭제후 이미지 삭제 가능
  • docker image rm 커맨드 
    • 이미지를 삭제하는 명령어
    • 공백으로 구분해 여러 이미지를 지정 가능
    • docker image rm [이미지_이름] [이미지_이름] [이미지_이름]


이미지 삭제 실습


#이미지 목록 확인
docker image ls

2049277881_kPh8byOo_4414c28dc99cf5d41eac3d5a0ebbc6d77ce7885a.png
 

  • 이미지 목록의 주요 항목
항목 내용
REPOSITORY 이미지 이름
TAG 버전 정보, 이미지를 내려받을 때 따로 지정하지 않으면 latest(최신 버전)를 내려 받음
IMAGE ID 이미지 식별자, 본래는 64글자 앞에서부터 12글자만 출력
CREATED 이미지 생성 후 경과된 시간
SIZE 이미지의 전체 용량
 
  • 이미지 버전을 지정하여 다운로드 : [이미지_이름]:[버전_넘버]

#버전 지정 도커 이미지 다운로드
docker pull httpd:2.2

2049277881_6zDPtcZd_e38430ecc1ce20301595759018c19f1c1db36fc6.png


추가 이미지 확인


#이미지 목록 확인
docker image ls

2049277881_XHyx7K5I_97b6a8f61b2393fdf091dfbe3cce4ecbaf6ba3fb.png


버전 지정 이미지 삭제


#이미지 삭제
docker image rm httpd:2.2


지정한 버전의 이미지가 삭제됐는지 확인


#이미지 목록 확인
docker image ls

2049277881_ZuWARsgT_cadef643e98d00b541fad273b705aa0b99234faf.png


나머지 이미지 삭제


#이미지 삭제
docker image rm httpd
  • 해당 이미지가 컨테이너에서 사용 중이기 때문에 이미지를 삭제할 수 없다는 이미지를 삭제할 수 없다는 오류 메시지
  • 아파치 컨테이너 실습 중 컨테이너를 종료만 하고 삭제를 하지 않았기 때문에 삭제가 되지 않음
2049277881_YayzkPR6_031c093db2363fa4a7c7bfd38fe7ab0786ddccf8.png

해당 이미지를 사용중인 컨테이너 확인


#존재하는 컨테이너 목록 확인
docker ps -a 

2049277881_j5iQw8Y0_ada59dfbab0e5cdaa77d21e1a363136fa32be096.png


컨테이너 삭제 및  이미지 삭제


#컨테이너 삭제
docker rm apa000ex2



#이미지 삭제
docker image rm httpd

2049277881_OHQzjgY6_bfa336f09c8f9ecfd003fcbf14f042c3f739ade1.png

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색