도커 기본 명령어 > 클라우드네이티브

본문 바로가기

[이론] 도커 기본 명령어

필기자
2025-09-10 11:15 280 0

본문

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

도커 명령어

도커 명령어란?
  • 컨테이너를 다루는 명령어는 ‘docker’ 명령어로 시작   docker ~ 

도커 명령어의 기본적인 형태
  • docker 커맨드(상위/하위) (옵션) 대상(이미지) (명령어) (인자)

커맨드(상위/하위)
  • ‘무엇을‘, ‘어떻게’ 에 해당하는 부분
  • 커맨드는 상위 커맨드(’무엇을’)와 하위 커맨드(‘어떻게‘)로 구성
    • 무엇을 : docker container, docker image, docker network, docker volume, docker build, docker compose, docker context, docker node, docker plugin, docker secret, docker service, docker stack 등 총 12개
    • 어떻게 : create, start, stop, restart, pause, unpause, exec, run, attach, logs, ps, ls, inspect, stats, top, rm, rmi, prune, pull, push, build, commit, tag, login, logout, save, load, cp, diff, events, kill, update 등 총 32개
  • docker container start penguin
    • 컨테이너를(무엇을), 시작(어떻게), 어떤(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에서 웹 서버.
20250910112233_85b4dc9eb7d007620f49cb9b0007b920_p3sw.png
20250910112328_85b4dc9eb7d007620f49cb9b0007b920_3wju.png


컨테이너 생성, 실행, 종료, 삭제

컨테이너 생성 및 실행
  • 컨테이너를 생성하고 실행하는 커맨드 : 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 옵션을 추가하면 현재 존재하는 컨테이너의 목록 출력
3529946166_QLCNZic4_d71f56c6a92825f8674442cb86075a6d11cabc7a.png
 
  • 컨테이너 목록의 주요 항목
항목 내용
CONTAINER ID 컨테이너 식별자, 무작위 문자열 할당. 본래 64글자 앞에서 12글자만 출력
IMAGE 컨테이너를 만들 때 사용한 이미지의 이름
COMMAND 컨테이너 실행 시에 실행하도록 설정된 프로그램의 이름
CREATED 컨테이너 생성 후 경과된 시간
STATUS 컨테이너의 현재 상태. 실행 중이라면 ‘UP’, 종료된 상태라면 ‘Exited’ 출력
PORTS 컨테이너에 할당된 포트 번호. ‘ 호스트 포트 번호 -> 컨테이너 포트 번호‘ 형식으로 출력. 포트 번호가 동일할 경우-> 의 뒷부분은 출력되지 않음
NAMES 컨테이너 이름

컨테이너 생성, 실행, 종료, 삭제 실습
  • 컨테이너 생성

#아파치 이미지 사용해 컨테이너 생성 및 실행
docker run --name my-apache -d httpd
  • 아파치 이미지로 ‘my-apache’이름을 가진 컨테이너를 백그라운드로 생성 및 실행
  • Unable to find image ‘httpd:latest’ locally : 지정한 이미지가 로컬 저장소에 존재하지 않을 때 나타나는 메세지
  • latest: Pulling from library/httpd : 가장 최신 버전의 이미지 다운로드
20250910113918_85b4dc9eb7d007620f49cb9b0007b920_ua78.png

#컨테이너 정보 확인
docker inspect my-apache
...... 생략
        "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",


20250910114211_85b4dc9eb7d007620f49cb9b0007b920_8txt.png
  • 컨테이너 확인 및 종료

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

20250910114402_85b4dc9eb7d007620f49cb9b0007b920_6vsx.png


#컨테이너 종료 
docker stop my-apache

20250910114540_85b4dc9eb7d007620f49cb9b0007b920_xslh.png
 
  • 컨테이너 종료 및 존재 여부 확인

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

20250910114628_85b4dc9eb7d007620f49cb9b0007b920_lrs0.png


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

20250910114723_85b4dc9eb7d007620f49cb9b0007b920_d63g.png
 
  • 컨테이너 삭제 및 삭제 확인

#컨테이너 삭제
docker stop blissful_jang
docker rm my-apache
docker rm blissful_jang
docker rm hopeful_sammet


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

20250910115131_85b4dc9eb7d007620f49cb9b0007b920_3jqd.png

컨테이너 통신

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


3529946166_KOnsd8qo_e13400173333123c50c1e853a59b42a5b1876eb0.png

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

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

20250910115511_85b4dc9eb7d007620f49cb9b0007b920_ojhg.png

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


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

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

Firefox 웹 브라우저
3529946166_qiNjA4VB_b3352c945f6989dc64c2b8270b73a8dcdbacc109.png

아파치 초기 화면 
3529946166_7lLJmNKc_d3ec3b688563e4ff330505abedf9e895aec7d700.png


컨테이너 종료 및 삭제


#컨테이너 종료
docker stop my-apache



#컨테이너 삭제
docker rm apa000ex2


이미지 삭제

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


이미지 삭제 실습


#이미지 목록 확인
docker image ls

3529946166_Ifqpedoi_65d508b486342310257fa304877c25fa7253d875.png
 

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

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

3529946166_4GkjPBgm_1905ba7e9f7796261a833e32904772138965736c.png


추가 이미지 확인


#이미지 목록 확인
docker image ls

3529946166_pfhxJNvL_2ab7b57005873b72a6b238f7e4067e81ff229ade.png


버전 지정 이미지 삭제


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


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


#이미지 목록 확인
docker image ls

3529946166_brgZ25Tl_86b163f4d6d75f84192e7f60cf9b5696a4ba0c16.png


나머지 이미지 삭제


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

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


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

20250910115900_85b4dc9eb7d007620f49cb9b0007b920_5ejv.png

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


#컨테이너 삭제
docker rm my-apache



#이미지 삭제
docker image rm httpd

3529946166_bx0r6C81_d1c1f17c575e545f96ed3713a9f2186a1ffdea57.png

댓글목록0

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