[{"data":1,"prerenderedAt":520},["ShallowReactive",2],{"post-document:\u002Fdevops\u002Fdocker\u002F2026\u002F08\u002F17\u002Fdocker-05-container-commands-and-volumes\u002F":3},{"id":4,"title":5,"body":6,"categories":499,"date":502,"description":503,"extension":504,"image":505,"key_concepts":505,"last_modified_at":505,"legacyPath":506,"meta":507,"navigation":84,"part":509,"path":510,"published":84,"robots":505,"seo":511,"series":512,"stem":513,"strengths":505,"summary":505,"tags":514,"tradeoffs":505,"__hash__":519},"posts\u002Fposts\u002FCI-CD-Docker\u002FDocker\u002F2026-08-17-docker-05-container-commands-and-volumes.md","Docker 기초 5편: 컨테이너 기본 명령어와 Volume",{"type":7,"value":8,"toc":492},"minimark",[9,14,18,21,27,38,41,46,167,174,224,230,287,295,299,310,313,318,325,331,362,375,379,403,434,463,483,488],[10,11,13],"h2",{"id":12},"docker-볼륨","Docker 볼륨",[15,16,17],"p",{},"Docker 볼륨은 컨테이너의 데이터를 컨테이너 밖에 따로 보관하는 저장 공간이다.",[15,19,20],{},"컨테이너를 임시 작업실이라고 보면 볼륨은 작업실이 철거되어도 남아 있는 외부 창고와 같다.",[22,23,24],"blockquote",{},[15,25,26],{},"컨테이너의 화물이 잘 보관되려면 창고에 가야하지 않겠는가? 그 창고 역할을 하는 것이 Volume이다.",[28,29,35],"pre",{"className":30,"code":32,"language":33,"meta":34},[31],"language-text","컨테이너 삭제\n  └── 컨테이너 내부에만 저장한 데이터 삭제\n\n컨테이너 삭제\n  └── 볼륨에 저장한 데이터 유지\n","text","",[36,37,32],"code",{"__ignoreMap":34},[15,39,40],{},"DB 컨테이너를 볼륨 없이 삭제하면 데이터베이스 데이터도 함께 사라진다. 볼륨을 연결하면 새 컨테이너에서도 기존 데이터를 다시 사용할 수 있다.",[22,42,43],{},[15,44,45],{},"어때요, 참 쉽죠?",[28,47,51],{"className":48,"code":49,"language":50,"meta":34,"style":34},"language-bash shiki shiki-themes github-light github-dark","# mariadb-data 볼륨 생성\ndocker volume create mariadb-data\n\n# MariaDB 데이터 저장 경로에 볼륨 연결\ndocker run -d \\\n  --name mariadb \\\n  -e MYSQL_ROOT_PASSWORD=password \\\n  -e MYSQL_DATABASE=skala \\\n  -p 3306:3306 \\\n  -v mariadb-data:\u002Fvar\u002Flib\u002Fmysql \\\n  mariadb:latest\n","bash",[36,52,53,62,79,86,92,107,118,129,139,150,161],{"__ignoreMap":34},[54,55,58],"span",{"class":56,"line":57},"line",1,[54,59,61],{"class":60},"sJ8bj","# mariadb-data 볼륨 생성\n",[54,63,65,69,73,76],{"class":56,"line":64},2,[54,66,68],{"class":67},"sScJk","docker",[54,70,72],{"class":71},"sZZnC"," volume",[54,74,75],{"class":71}," create",[54,77,78],{"class":71}," mariadb-data\n",[54,80,82],{"class":56,"line":81},3,[54,83,85],{"emptyLinePlaceholder":84},true,"\n",[54,87,89],{"class":56,"line":88},4,[54,90,91],{"class":60},"# MariaDB 데이터 저장 경로에 볼륨 연결\n",[54,93,95,97,100,104],{"class":56,"line":94},5,[54,96,68],{"class":67},[54,98,99],{"class":71}," run",[54,101,103],{"class":102},"sj4cs"," -d",[54,105,106],{"class":102}," \\\n",[54,108,110,113,116],{"class":56,"line":109},6,[54,111,112],{"class":102},"  --name",[54,114,115],{"class":71}," mariadb",[54,117,106],{"class":102},[54,119,121,124,127],{"class":56,"line":120},7,[54,122,123],{"class":102},"  -e",[54,125,126],{"class":71}," MYSQL_ROOT_PASSWORD=password",[54,128,106],{"class":102},[54,130,132,134,137],{"class":56,"line":131},8,[54,133,123],{"class":102},[54,135,136],{"class":71}," MYSQL_DATABASE=skala",[54,138,106],{"class":102},[54,140,142,145,148],{"class":56,"line":141},9,[54,143,144],{"class":102},"  -p",[54,146,147],{"class":71}," 3306:3306",[54,149,106],{"class":102},[54,151,153,156,159],{"class":56,"line":152},10,[54,154,155],{"class":102},"  -v",[54,157,158],{"class":71}," mariadb-data:\u002Fvar\u002Flib\u002Fmysql",[54,160,106],{"class":102},[54,162,164],{"class":56,"line":163},11,[54,165,166],{"class":71},"  mariadb:latest\n",[15,168,169,170,173],{},"볼륨 연결 옵션은 ",[36,171,172],{},"-v mariadb-data:\u002Fvar\u002Flib\u002Fmysql","이다.",[175,176,177,190],"table",{},[178,179,180],"thead",{},[181,182,183,187],"tr",{},[184,185,186],"th",{},"구분",[184,188,189],{},"의미",[191,192,193,204,214],"tbody",{},[181,194,195,201],{},[196,197,198],"td",{},[36,199,200],{},"mariadb-data",[196,202,203],{},"Docker가 관리하는 볼륨 이름",[181,205,206,211],{},[196,207,208],{},[36,209,210],{},"\u002Fvar\u002Flib\u002Fmysql",[196,212,213],{},"컨테이너에서 MariaDB 데이터가 저장되는 경로",[181,215,216,221],{},[196,217,218],{},[36,219,220],{},":",[196,222,223],{},"왼쪽 저장 공간과 오른쪽 경로를 연결",[28,225,228],{"className":226,"code":227,"language":33,"meta":34},[31],"MariaDB가 \u002Fvar\u002Flib\u002Fmysql에 데이터 저장\n  ↓\nmariadb-data 볼륨에 실제 데이터 보관\n  ↓\nMariaDB 컨테이너를 삭제해도 볼륨 유지\n  ↓\n새 컨테이너에 같은 볼륨을 연결해 데이터 재사용\n",[36,229,227],{"__ignoreMap":34},[28,231,233],{"className":48,"code":232,"language":50,"meta":34,"style":34},"# 볼륨 목록 확인\ndocker volume ls\n\n# 볼륨 상세 정보 확인\ndocker volume inspect mariadb-data\n\n# 사용하지 않는 볼륨 정리\ndocker volume prune\n",[36,234,235,240,249,253,258,269,273,278],{"__ignoreMap":34},[54,236,237],{"class":56,"line":57},[54,238,239],{"class":60},"# 볼륨 목록 확인\n",[54,241,242,244,246],{"class":56,"line":64},[54,243,68],{"class":67},[54,245,72],{"class":71},[54,247,248],{"class":71}," ls\n",[54,250,251],{"class":56,"line":81},[54,252,85],{"emptyLinePlaceholder":84},[54,254,255],{"class":56,"line":88},[54,256,257],{"class":60},"# 볼륨 상세 정보 확인\n",[54,259,260,262,264,267],{"class":56,"line":94},[54,261,68],{"class":67},[54,263,72],{"class":71},[54,265,266],{"class":71}," inspect",[54,268,78],{"class":71},[54,270,271],{"class":56,"line":109},[54,272,85],{"emptyLinePlaceholder":84},[54,274,275],{"class":56,"line":120},[54,276,277],{"class":60},"# 사용하지 않는 볼륨 정리\n",[54,279,280,282,284],{"class":56,"line":131},[54,281,68],{"class":67},[54,283,72],{"class":71},[54,285,286],{"class":71}," prune\n",[22,288,289],{},[15,290,291,294],{},[36,292,293],{},"docker volume prune","은 사용하지 않는 볼륨을 삭제하므로 삭제 대상을 먼저 확인한다.",[10,296,298],{"id":297},"컨테이너-기본-활용","컨테이너 기본 활용",[15,300,301,302,305,306,309],{},"Docker 명령은 일반적으로 ",[36,303,304],{},"docker \u003C대상> \u003C명령> [옵션]"," 형식으로 작성한다. 사용자 권한과 설치 방식에 따라 ",[36,307,308],{},"sudo","가 필요할 수 있지만 항상 root 권한으로 실행해야 하는 것은 아니다.",[15,311,312],{},"이미지는 Docker Hub 같은 공개 Registry 또는 조직에서 운영하는 Private Registry에 저장할 수 있다.",[314,315,317],"h3",{"id":316},"참고-docker-hub-이미지-이름","참고: Docker Hub 이미지 이름",[15,319,320,321,324],{},"Docker Hub의 공식 ",[36,322,323],{},"nginx"," 이미지를 전체 이름으로 표현하면 다음과 같다.",[28,326,329],{"className":327,"code":328,"language":33,"meta":34},[31],"nginx → docker.io\u002Flibrary\u002Fnginx:latest\n",[36,330,328],{"__ignoreMap":34},[332,333,334,342,349,355],"ul",{},[335,336,337,338,341],"li",{},"Registry가 생략되면 기본적으로 ",[36,339,340],{},"docker.io","를 사용한다.",[335,343,344,345,348],{},"Namespace가 생략된 공식 이미지는 ",[36,346,347],{},"library","에서 찾는다.",[335,350,351,352,341],{},"Tag가 생략되면 기본적으로 ",[36,353,354],{},"latest",[335,356,357,358,361],{},"Podman과 Buildah의 비정규화 이미지 검색 Registry는 ",[36,359,360],{},"\u002Fetc\u002Fcontainers\u002Fregistries.conf","에서 확인할 수 있다.",[28,363,365],{"className":48,"code":364,"language":50,"meta":34,"style":34},"cat \u002Fetc\u002Fcontainers\u002Fregistries.conf\n",[36,366,367],{"__ignoreMap":34},[54,368,369,372],{"class":56,"line":57},[54,370,371],{"class":67},"cat",[54,373,374],{"class":71}," \u002Fetc\u002Fcontainers\u002Fregistries.conf\n",[10,376,378],{"id":377},"프로세스와-포트-강제-종료","프로세스와 포트 강제 종료",[28,380,382],{"className":48,"code":381,"language":50,"meta":34,"style":34},"sudo pkill -9 -f -i docker\n",[36,383,384],{"__ignoreMap":34},[54,385,386,388,391,394,397,400],{"class":56,"line":57},[54,387,308],{"class":67},[54,389,390],{"class":71}," pkill",[54,392,393],{"class":102}," -9",[54,395,396],{"class":102}," -f",[54,398,399],{"class":102}," -i",[54,401,402],{"class":71}," docker\n",[332,404,405,410,416,422,428],{},[335,406,407,409],{},[36,408,308],{},": 관리자 권한으로 실행",[335,411,412,415],{},[36,413,414],{},"pkill",": 조건에 맞는 프로세스 종료",[335,417,418,421],{},[36,419,420],{},"-9",": 프로세스 즉시 강제 종료",[335,423,424,427],{},[36,425,426],{},"-f",": 프로세스의 전체 실행 명령 검색",[335,429,430,433],{},[36,431,432],{},"-i",": 대소문자를 구분하지 않고 검색",[28,435,437],{"className":48,"code":436,"language":50,"meta":34,"style":34},"lsof -ti :8080 | xargs kill -9\n",[36,438,439],{"__ignoreMap":34},[54,440,441,444,447,450,454,457,460],{"class":56,"line":57},[54,442,443],{"class":67},"lsof",[54,445,446],{"class":102}," -ti",[54,448,449],{"class":71}," :8080",[54,451,453],{"class":452},"szBVR"," |",[54,455,456],{"class":67}," xargs",[54,458,459],{"class":71}," kill",[54,461,462],{"class":102}," -9\n",[332,464,465,471,477],{},[335,466,467,470],{},[36,468,469],{},"lsof -ti :8080",": 8080 포트를 사용하는 프로세스 ID(PID) 출력",[335,472,473,476],{},[36,474,475],{},"|",": 앞 명령의 출력을 다음 명령으로 전달",[335,478,479,482],{},[36,480,481],{},"xargs kill -9",": 전달받은 PID의 프로세스를 즉시 강제 종료",[22,484,485],{},[15,486,487],{},"두 명령 모두 프로세스를 강제로 종료하므로 일반적인 종료 명령이 실패했을 때만 사용한다.",[489,490,491],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":34,"searchDepth":64,"depth":64,"links":493},[494,495,498],{"id":12,"depth":64,"text":13},{"id":297,"depth":64,"text":298,"children":496},[497],{"id":316,"depth":81,"text":317},{"id":377,"depth":64,"text":378},[500,501],"DevOps","Docker","2026-08-17 12:20:00 +0900"," Docker Network, 컨테이너 명령어와 Volume.","md",null,"\u002Fdevops\u002Fdocker\u002F2026\u002F08\u002F17\u002Fdocker-05-container-commands-and-volumes\u002F",{"layout":508},"post","5","\u002Fposts\u002Fci-cd-docker\u002Fdocker\u002F2026-08-17-docker-05-container-commands-and-volumes",{"title":5,"description":503},"Docker 기초","posts\u002FCI-CD-Docker\u002FDocker\u002F2026-08-17-docker-05-container-commands-and-volumes",[501,515,516,517,518],"Container","Network","Volume","Docker CLI","B9eftGQoDRPTDCJjIPKS0hbSDZhVMpOprSHzZslvTa8",1788744787615]