<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%EC%97%AC%EC%A0%84%EC%82%AC</id>
	<title>IT 위키 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%EC%97%AC%EC%A0%84%EC%82%AC"/>
	<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/w/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/%EC%97%AC%EC%A0%84%EC%82%AC"/>
	<updated>2026-09-16T21:00:48Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=Docker_run&amp;diff=60611</id>
		<title>Docker run</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=Docker_run&amp;diff=60611"/>
		<updated>2026-06-26T07:20:57Z</updated>

		<summary type="html">&lt;p&gt;여전사: 새 문서: docker run은 Docker 이미지로부터 새 컨테이너를 생성하고 실행하는 Docker CLI 명령으로, 공식 명령은 &amp;lt;code&amp;gt;docker container run&amp;lt;/code&amp;gt;이며 &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt;은 그 별칭으로 사용된다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot;&amp;gt;Docker Docs, &amp;quot;docker container run&amp;quot;, https://docs.docker.com/reference/cli/docker/container/run/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;  == 개요 == &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt;은 지정한 이미지로 컨테이너를 만들고, 필요한 경...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;docker run은 Docker 이미지로부터 새 컨테이너를 생성하고 실행하는 [[Docker CLI]] 명령으로, 공식 명령은 &amp;lt;code&amp;gt;docker container run&amp;lt;/code&amp;gt;이며 &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt;은 그 별칭으로 사용된다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot;&amp;gt;Docker Docs, &amp;quot;docker container run&amp;quot;, https://docs.docker.com/reference/cli/docker/container/run/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
&amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt;은 지정한 이미지로 컨테이너를 만들고, 필요한 경우 이미지를 레지스트리에서 가져온 뒤, 컨테이너의 기본 명령 또는 사용자가 지정한 명령을 실행한다. 로컬에 이미지가 없으면 기본적으로 이미지를 풀한 뒤 실행하며, 이미 정지된 컨테이너를 다시 실행하려면 &amp;lt;code&amp;gt;docker start&amp;lt;/code&amp;gt;를 사용한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
기본 형식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예를 들어 &amp;lt;code&amp;gt;ubuntu:24.04&amp;lt;/code&amp;gt; 이미지로 일회성 셸을 실행하려면 다음과 같이 입력한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it ubuntu:24.04 bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 기본 구조 ==&lt;br /&gt;
&amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt; 명령은 크게 옵션, 이미지, 컨테이너 내부에서 실행할 명령으로 구성된다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구성 요소 !! 예시 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| 옵션&lt;br /&gt;
| &amp;lt;code&amp;gt;--rm -it -v &amp;quot;$PWD&amp;quot;:/app -p 8080:80&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 삭제, 터미널 연결, 볼륨 마운트, 포트 공개 등 실행 방식을 지정한다.&lt;br /&gt;
|-&lt;br /&gt;
| 이미지&lt;br /&gt;
| &amp;lt;code&amp;gt;nginx:latest&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ubuntu:24.04&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너를 생성할 기준 이미지이다. 태그를 생략하면 일반적으로 &amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt; 태그가 사용된다.&lt;br /&gt;
|-&lt;br /&gt;
| 명령&lt;br /&gt;
| &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;npm start&amp;lt;/code&amp;gt;&lt;br /&gt;
| 이미지에 정의된 기본 명령 대신 컨테이너 안에서 실행할 명령이다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run [옵션] 이미지[:태그] [컨테이너_내부_명령]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 자주 쓰는 옵션 ==&lt;br /&gt;
아래 옵션들은 실무에서 사용 빈도가 높은 순서와 학습 중요도를 고려해 정리한 것이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 순서 !! 옵션 !! 의미 !! 대표 사용 상황&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 종료 시 자동 삭제&lt;br /&gt;
| 테스트, 일회성 실행, 임시 셸&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| &amp;lt;code&amp;gt;-it&amp;lt;/code&amp;gt;&lt;br /&gt;
| 표준 입력 유지(&amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;)와 가상 터미널 할당(&amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;)&lt;br /&gt;
| 대화형 셸, 디버깅&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--volume&amp;lt;/code&amp;gt;&lt;br /&gt;
| 호스트 경로 또는 Docker 볼륨을 컨테이너에 마운트&lt;br /&gt;
| 소스 코드 공유, 데이터 영속화&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--publish&amp;lt;/code&amp;gt;&lt;br /&gt;
| 호스트 포트와 컨테이너 포트를 연결&lt;br /&gt;
| 웹 서버, API 서버 실행&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 이름 지정&lt;br /&gt;
| 컨테이너 식별, 로그 확인, 네트워크 연결&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--detach&amp;lt;/code&amp;gt;&lt;br /&gt;
| 백그라운드 실행&lt;br /&gt;
| 서버 프로세스 실행&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| &amp;lt;code&amp;gt;-e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--env&amp;lt;/code&amp;gt;&lt;br /&gt;
| 환경 변수 전달&lt;br /&gt;
| 설정값, 비밀번호, 실행 모드 지정&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;code&amp;gt;--env-file&amp;lt;/code&amp;gt;&lt;br /&gt;
| 파일에서 환경 변수 일괄 전달&lt;br /&gt;
| 환경별 설정 관리&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| &amp;lt;code&amp;gt;--network&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 네트워크 지정&lt;br /&gt;
| 컨테이너 간 통신, 네트워크 격리&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| &amp;lt;code&amp;gt;--restart&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 재시작 정책 지정&lt;br /&gt;
| 운영용 데몬, 장애 자동 복구&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| &amp;lt;code&amp;gt;-w&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--workdir&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 내부 작업 디렉터리 지정&lt;br /&gt;
| 소스 디렉터리 기준 명령 실행&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| &amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--user&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 내부 실행 사용자 지정&lt;br /&gt;
| 루트 권한 회피, 파일 권한 관리&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| &amp;lt;code&amp;gt;--entrypoint&amp;lt;/code&amp;gt;&lt;br /&gt;
| 이미지의 기본 엔트리포인트 재정의&lt;br /&gt;
| 디버깅, 초기화 명령 우회&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| &amp;lt;code&amp;gt;--pull&amp;lt;/code&amp;gt;&lt;br /&gt;
| 이미지 풀 정책 지정&lt;br /&gt;
| 최신 이미지 보장, CI/CD&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| &amp;lt;code&amp;gt;--platform&amp;lt;/code&amp;gt;&lt;br /&gt;
| 실행 플랫폼 지정&lt;br /&gt;
| ARM, AMD64 이미지 선택&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| &amp;lt;code&amp;gt;--cpus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--memory&amp;lt;/code&amp;gt;&lt;br /&gt;
| CPU와 메모리 제한&lt;br /&gt;
| 리소스 제어, 테스트 환경 제한&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| &amp;lt;code&amp;gt;--mount&amp;lt;/code&amp;gt;&lt;br /&gt;
| 구조화된 마운트 옵션&lt;br /&gt;
| 복잡한 바인드 마운트, 볼륨 마운트&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| &amp;lt;code&amp;gt;--add-host&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 내부 &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt; 항목 추가&lt;br /&gt;
| 로컬 도메인 테스트, 내부 이름 해석&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| &amp;lt;code&amp;gt;--privileged&amp;lt;/code&amp;gt;&lt;br /&gt;
| 확장된 권한 부여&lt;br /&gt;
| 특수 장치 접근, Docker-in-Docker 등 제한적 상황&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| &amp;lt;code&amp;gt;--cap-add&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;--cap-drop&amp;lt;/code&amp;gt;&lt;br /&gt;
| Linux capability 추가 또는 제거&lt;br /&gt;
| 최소 권한 원칙 적용&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 주요 옵션 상세 ==&lt;br /&gt;
&lt;br /&gt;
=== --rm ===&lt;br /&gt;
&amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt;은 컨테이너가 종료될 때 컨테이너 파일 시스템을 자동으로 삭제한다. 테스트용 컨테이너나 일회성 명령 실행에 적합하다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
임시 Ubuntu 셸을 열고, 종료하면 컨테이너를 남기지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it ubuntu:24.04 bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python 스크립트를 임시 컨테이너에서 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -v &amp;quot;$PWD&amp;quot;:/app -w /app python:3.12 python app.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt;은 컨테이너를 남기지 않기 때문에 실행 후 로그나 파일 시스템 상태를 조사해야 하는 경우에는 사용하지 않는 편이 낫다.&lt;br /&gt;
&lt;br /&gt;
=== -it ===&lt;br /&gt;
&amp;lt;code&amp;gt;-it&amp;lt;/code&amp;gt;는 &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;와 &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;를 함께 쓴 축약형이다. &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt;는 표준 입력을 열어 두고, &amp;lt;code&amp;gt;-t&amp;lt;/code&amp;gt;는 가상 터미널을 할당한다. 보통 컨테이너 안에서 셸을 열 때 함께 사용한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it ubuntu:24.04 bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alpine Linux에서 셸을 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it alpine:latest sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실행 중인 컨테이너에 들어가는 명령은 &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt;이 아니라 &amp;lt;code&amp;gt;docker exec&amp;lt;/code&amp;gt;를 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -it my-nginx sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== -v, --volume ===&lt;br /&gt;
&amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--volume&amp;lt;/code&amp;gt;은 호스트의 디렉터리, 파일, 또는 Docker 볼륨을 컨테이너 내부 경로에 마운트한다. 짧고 자주 쓰이지만, 복잡한 설정에는 &amp;lt;code&amp;gt;--mount&amp;lt;/code&amp;gt;가 더 명시적이다.&amp;lt;ref name=&amp;quot;storage&amp;quot;&amp;gt;Docker Docs, &amp;quot;Storage&amp;quot;, https://docs.docker.com/engine/storage/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;bind-mounts&amp;quot;&amp;gt;Docker Docs, &amp;quot;Bind mounts&amp;quot;, https://docs.docker.com/engine/storage/bind-mounts/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
현재 디렉터리를 컨테이너의 &amp;lt;code&amp;gt;/app&amp;lt;/code&amp;gt;에 마운트한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it -v &amp;quot;$PWD&amp;quot;:/app -w /app node:22 bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
컨테이너 안에서 호스트 파일을 읽는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -v &amp;quot;$PWD&amp;quot;:/app -w /app alpine:latest ls -al&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
읽기 전용으로 마운트한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -v &amp;quot;$PWD&amp;quot;:/app:ro -w /app alpine:latest cat README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Docker 볼륨을 사용해 데이터베이스 데이터를 보존한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker volume create mysql-data&lt;br /&gt;
&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name mysql \&lt;br /&gt;
  -e MYSQL_ROOT_PASSWORD=secret \&lt;br /&gt;
  -v mysql-data:/var/lib/mysql \&lt;br /&gt;
  mysql:8.4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
바인드 마운트와 볼륨 마운트의 차이는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분 !! 예시 !! 특징&lt;br /&gt;
|-&lt;br /&gt;
| 바인드 마운트&lt;br /&gt;
| &amp;lt;code&amp;gt;-v &amp;quot;$PWD&amp;quot;:/app&amp;lt;/code&amp;gt;&lt;br /&gt;
| 호스트의 실제 경로를 컨테이너에 연결한다. 개발 환경에서 소스 코드를 공유할 때 많이 쓴다.&lt;br /&gt;
|-&lt;br /&gt;
| Docker 볼륨&lt;br /&gt;
| &amp;lt;code&amp;gt;-v mysql-data:/var/lib/mysql&amp;lt;/code&amp;gt;&lt;br /&gt;
| Docker가 관리하는 저장 공간을 연결한다. 데이터베이스 데이터처럼 영속성이 필요한 데이터에 적합하다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -p, --publish ===&lt;br /&gt;
&amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--publish&amp;lt;/code&amp;gt;는 호스트 포트를 컨테이너 포트에 매핑한다. 컨테이너 내부 서비스는 기본적으로 호스트 외부에서 직접 접근할 수 없으므로, 웹 서버나 API 서버를 테스트할 때 자주 사용한다.&amp;lt;ref name=&amp;quot;networking&amp;quot;&amp;gt;Docker Docs, &amp;quot;Networking overview&amp;quot;, https://docs.docker.com/engine/network/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nginx 컨테이너의 80번 포트를 호스트 8080번 포트로 연결한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -d --name web -p 8080:80 nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
브라우저 또는 curl로 접근한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl http://localhost:8080&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
호스트의 특정 IP에만 바인딩할 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -d --name web -p 127.0.0.1:8080:80 nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여러 포트를 동시에 공개한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -d \&lt;br /&gt;
  --name app \&lt;br /&gt;
  -p 8080:8080 \&lt;br /&gt;
  -p 8443:8443 \&lt;br /&gt;
  my-app:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --name ===&lt;br /&gt;
&amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt;은 컨테이너 이름을 지정한다. 이름을 지정하지 않으면 Docker가 임의의 이름을 부여한다. 운영이나 디버깅에서는 명시적인 이름을 붙이는 것이 편리하다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --name my-nginx -p 8080:80 nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이름으로 로그를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logs my-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이름으로 컨테이너를 정지하고 삭제한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker stop my-nginx&lt;br /&gt;
docker rm my-nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
같은 이름의 컨테이너가 이미 있으면 새 컨테이너를 만들 수 없으므로, 기존 컨테이너를 삭제하거나 다른 이름을 사용해야 한다.&lt;br /&gt;
&lt;br /&gt;
=== -d, --detach ===&lt;br /&gt;
&amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--detach&amp;lt;/code&amp;gt;는 컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력한다. 서버 프로세스처럼 계속 실행되는 컨테이너에 많이 사용한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --name redis redis:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실행 상태를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
로그를 실시간으로 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logs -f redis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== -e, --env ===&lt;br /&gt;
&amp;lt;code&amp;gt;-e&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--env&amp;lt;/code&amp;gt;는 컨테이너에 환경 변수를 전달한다. 애플리케이션 설정, 데이터베이스 비밀번호, 실행 모드 등을 지정할 때 사용한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -e NODE_ENV=production node:22 node -e &amp;quot;console.log(process.env.NODE_ENV)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MySQL 컨테이너에 루트 비밀번호와 데이터베이스 이름을 전달한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name mysql \&lt;br /&gt;
  -e MYSQL_ROOT_PASSWORD=secret \&lt;br /&gt;
  -e MYSQL_DATABASE=appdb \&lt;br /&gt;
  mysql:8.4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
호스트의 환경 변수 값을 그대로 전달할 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export APP_MODE=dev&lt;br /&gt;
docker run --rm -e APP_MODE alpine:latest env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
비밀번호나 토큰을 명령행에 직접 쓰면 셸 히스토리나 프로세스 목록에 노출될 수 있으므로 운영 환경에서는 별도 보안 관리 방식을 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
=== --env-file ===&lt;br /&gt;
&amp;lt;code&amp;gt;--env-file&amp;lt;/code&amp;gt;은 환경 변수 파일을 컨테이너에 전달한다. 환경 변수가 많거나 환경별 설정 파일을 분리하고 싶을 때 유용하다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; .env &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
APP_ENV=local&lt;br /&gt;
APP_PORT=8080&lt;br /&gt;
DATABASE_URL=mysql://user:pass@db:3306/app&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
docker run --rm --env-file .env alpine:latest env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --network ===&lt;br /&gt;
&amp;lt;code&amp;gt;--network&amp;lt;/code&amp;gt;는 컨테이너가 사용할 네트워크를 지정한다. 기본값은 일반적으로 &amp;lt;code&amp;gt;bridge&amp;lt;/code&amp;gt; 네트워크이며, 사용자 정의 브리지 네트워크를 만들면 컨테이너 이름으로 서로 통신하기 쉽다.&amp;lt;ref name=&amp;quot;networking&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사용자 정의 네트워크를 만든다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker network create app-net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MySQL 컨테이너를 해당 네트워크에서 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name db \&lt;br /&gt;
  --network app-net \&lt;br /&gt;
  -e MYSQL_ROOT_PASSWORD=secret \&lt;br /&gt;
  mysql:8.4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
애플리케이션 컨테이너에서 &amp;lt;code&amp;gt;db&amp;lt;/code&amp;gt;라는 이름으로 데이터베이스에 접근한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --network app-net \&lt;br /&gt;
  alpine:latest \&lt;br /&gt;
  sh -c &amp;quot;apk add --no-cache mysql-client &amp;amp;&amp;amp; mysql -h db -uroot -psecret -e &#039;SELECT 1&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
호스트 네트워크를 직접 사용하는 예시는 다음과 같다. 단, &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; 네트워크는 격리 수준과 플랫폼별 동작 차이를 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm --network host nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --restart ===&lt;br /&gt;
&amp;lt;code&amp;gt;--restart&amp;lt;/code&amp;gt;는 컨테이너 종료 시 재시작 정책을 지정한다. 장시간 실행되는 서비스에 사용하지만, 일회성 컨테이너에는 보통 사용하지 않는다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
항상 재시작하도록 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name redis \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  redis:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
주요 값은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 값 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt;&lt;br /&gt;
| 자동 재시작하지 않는다. 기본값이다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on-failure&amp;lt;/code&amp;gt;&lt;br /&gt;
| 비정상 종료 시 재시작한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;always&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너가 종료되면 항상 재시작한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unless-stopped&amp;lt;/code&amp;gt;&lt;br /&gt;
| 사용자가 직접 정지하지 않은 경우 재시작한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -w, --workdir ===&lt;br /&gt;
&amp;lt;code&amp;gt;-w&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--workdir&amp;lt;/code&amp;gt;는 컨테이너 내부의 작업 디렉터리를 지정한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  python:3.12 \&lt;br /&gt;
  python main.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Node.js 프로젝트에서 현재 디렉터리를 마운트하고 의존성을 설치한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  npm install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== -u, --user ===&lt;br /&gt;
&amp;lt;code&amp;gt;-u&amp;lt;/code&amp;gt; 또는 &amp;lt;code&amp;gt;--user&amp;lt;/code&amp;gt;는 컨테이너 내부 프로세스를 특정 사용자나 UID/GID로 실행한다. 바인드 마운트한 디렉터리에 루트 소유 파일이 생기는 문제를 줄일 때 유용하다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
현재 호스트 사용자의 UID/GID로 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -u &amp;quot;$(id -u):$(id -g)&amp;quot; \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  npm test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
컨테이너 내부의 &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; 사용자로 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -u node node:22 node -e &amp;quot;console.log(process.getuid())&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --entrypoint ===&lt;br /&gt;
&amp;lt;code&amp;gt;--entrypoint&amp;lt;/code&amp;gt;는 이미지에 정의된 기본 엔트리포인트를 재정의한다. 컨테이너가 즉시 종료되거나 기본 실행 명령을 우회해 디버깅해야 할 때 사용한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이미지의 기본 엔트리포인트 대신 셸을 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it --entrypoint sh nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
엔트리포인트를 &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;으로 바꾸고 버전을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm --entrypoint python python:3.12 --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --pull ===&lt;br /&gt;
&amp;lt;code&amp;gt;--pull&amp;lt;/code&amp;gt;은 컨테이너 실행 전에 이미지를 어떻게 가져올지 지정한다. CI/CD 환경에서는 최신 이미지를 보장하기 위해 &amp;lt;code&amp;gt;--pull always&amp;lt;/code&amp;gt;를 쓰는 경우가 있다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm --pull always alpine:latest cat /etc/os-release&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
주요 값은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 값 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;missing&amp;lt;/code&amp;gt;&lt;br /&gt;
| 로컬에 이미지가 없을 때만 가져온다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;always&amp;lt;/code&amp;gt;&lt;br /&gt;
| 실행할 때마다 레지스트리에서 이미지를 확인하고 가져온다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;never&amp;lt;/code&amp;gt;&lt;br /&gt;
| 이미지를 가져오지 않고 로컬 이미지로만 실행한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== --platform ===&lt;br /&gt;
&amp;lt;code&amp;gt;--platform&amp;lt;/code&amp;gt;은 실행할 이미지의 플랫폼을 지정한다. 멀티 아키텍처 이미지를 사용할 때 &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;linux/arm64&amp;lt;/code&amp;gt; 등을 명시할 수 있다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm --platform linux/amd64 alpine:latest uname -m&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apple Silicon 환경에서 AMD64 이미지를 테스트하는 예시는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm --platform linux/amd64 node:22 node -p &amp;quot;process.arch&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --cpus, --memory ===&lt;br /&gt;
&amp;lt;code&amp;gt;--cpus&amp;lt;/code&amp;gt;와 &amp;lt;code&amp;gt;--memory&amp;lt;/code&amp;gt;는 컨테이너가 사용할 수 있는 CPU와 메모리를 제한한다. 리소스 사용량을 제어하거나 장애 상황을 재현할 때 유용하다.&amp;lt;ref name=&amp;quot;resource&amp;quot;&amp;gt;Docker Docs, &amp;quot;Runtime options with Memory, CPUs, and GPUs&amp;quot;, https://docs.docker.com/engine/containers/resource_constraints/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPU 1개, 메모리 512MiB로 제한한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --cpus=&amp;quot;1.0&amp;quot; \&lt;br /&gt;
  --memory=&amp;quot;512m&amp;quot; \&lt;br /&gt;
  nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
메모리 제한을 걸고 Node.js 스크립트를 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --memory=&amp;quot;256m&amp;quot; \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  node -e &amp;quot;console.log(&#039;memory limited container&#039;)&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --mount ===&lt;br /&gt;
&amp;lt;code&amp;gt;--mount&amp;lt;/code&amp;gt;는 마운트 타입과 옵션을 명시적으로 지정하는 방식이다. &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt;보다 길지만, 복잡한 마운트 설정을 읽기 쉽게 표현할 수 있다.&amp;lt;ref name=&amp;quot;bind-mounts&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
바인드 마운트 예시:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --mount type=bind,source=&amp;quot;$PWD&amp;quot;,target=/app,readonly \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  alpine:latest \&lt;br /&gt;
  ls -al&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Docker 볼륨 마운트 예시:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker volume create app-cache&lt;br /&gt;
&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --mount type=volume,source=app-cache,target=/cache \&lt;br /&gt;
  alpine:latest \&lt;br /&gt;
  sh -c &amp;quot;echo cached &amp;gt; /cache/test.txt &amp;amp;&amp;amp; cat /cache/test.txt&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --add-host ===&lt;br /&gt;
&amp;lt;code&amp;gt;--add-host&amp;lt;/code&amp;gt;는 컨테이너 내부의 &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt;에 호스트명과 IP 주소를 추가한다. 로컬 개발 환경에서 임시 도메인 이름을 테스트할 때 유용하다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --add-host api.local:127.0.0.1 \&lt;br /&gt;
  alpine:latest \&lt;br /&gt;
  cat /etc/hosts&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Docker Desktop 등 일부 환경에서는 호스트 머신을 가리키는 이름으로 &amp;lt;code&amp;gt;host.docker.internal&amp;lt;/code&amp;gt;을 사용하는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --add-host host.docker.internal:host-gateway \&lt;br /&gt;
  alpine:latest \&lt;br /&gt;
  ping -c 1 host.docker.internal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== --privileged ===&lt;br /&gt;
&amp;lt;code&amp;gt;--privileged&amp;lt;/code&amp;gt;는 컨테이너에 확장된 권한을 부여한다. 장치 접근, 커널 기능 사용, Docker-in-Docker 같은 특수한 경우에 쓰이지만 보안 위험이 크므로 일반 애플리케이션 컨테이너에는 사용하지 않는 것이 좋다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it --privileged alpine:latest sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
운영 환경에서는 &amp;lt;code&amp;gt;--privileged&amp;lt;/code&amp;gt; 대신 필요한 capability나 장치만 제한적으로 부여하는 방식을 우선 검토한다.&lt;br /&gt;
&lt;br /&gt;
=== --cap-add, --cap-drop ===&lt;br /&gt;
&amp;lt;code&amp;gt;--cap-add&amp;lt;/code&amp;gt;와 &amp;lt;code&amp;gt;--cap-drop&amp;lt;/code&amp;gt;은 컨테이너의 Linux capability를 추가하거나 제거한다. 최소 권한 원칙을 적용할 때 사용한다.&amp;lt;ref name=&amp;quot;docker-run&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
모든 capability를 제거하고 필요한 권한만 추가하는 예시는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  --cap-drop ALL \&lt;br /&gt;
  --cap-add NET_BIND_SERVICE \&lt;br /&gt;
  nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네트워크 진단 도구 사용을 위해 &amp;lt;code&amp;gt;NET_ADMIN&amp;lt;/code&amp;gt;을 추가하는 예시는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  --cap-add NET_ADMIN \&lt;br /&gt;
  nicolaka/netshoot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 실전 예시 ==&lt;br /&gt;
&lt;br /&gt;
=== 임시 명령 실행 ===&lt;br /&gt;
컨테이너를 남기지 않고 명령만 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm alpine:latest echo &amp;quot;hello docker&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
현재 날짜를 컨테이너 안에서 출력한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm alpine:latest date&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 대화형 셸 실행 ===&lt;br /&gt;
Ubuntu 컨테이너 안에서 셸을 연다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it ubuntu:24.04 bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alpine 컨테이너 안에서 셸을 연다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it alpine:latest sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 현재 디렉터리에서 Python 실행 ===&lt;br /&gt;
현재 디렉터리를 컨테이너에 마운트하고 Python 파일을 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  python:3.12 \&lt;br /&gt;
  python main.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
패키지를 설치하고 테스트를 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  python:3.12 \&lt;br /&gt;
  sh -c &amp;quot;pip install -r requirements.txt &amp;amp;&amp;amp; pytest&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Node.js 프로젝트 실행 ===&lt;br /&gt;
현재 디렉터리를 마운트하고 Node.js 명령을 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  npm install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
테스트를 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  npm test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
개발 서버를 실행하고 포트를 연결한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  -p 3000:3000 \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  npm run dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx 웹 서버 실행 ===&lt;br /&gt;
Nginx를 백그라운드로 실행하고 호스트 8080번 포트로 공개한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name web \&lt;br /&gt;
  -p 8080:80 \&lt;br /&gt;
  nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정적 파일을 Nginx 기본 경로에 읽기 전용으로 마운트한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -d \&lt;br /&gt;
  --name static-web \&lt;br /&gt;
  -p 8080:80 \&lt;br /&gt;
  -v &amp;quot;$PWD/html&amp;quot;:/usr/share/nginx/html:ro \&lt;br /&gt;
  nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
로그를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logs -f static-web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MySQL 실행 ===&lt;br /&gt;
MySQL 컨테이너를 실행하고 데이터를 Docker 볼륨에 저장한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker volume create mysql-data&lt;br /&gt;
&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name mysql \&lt;br /&gt;
  -e MYSQL_ROOT_PASSWORD=secret \&lt;br /&gt;
  -e MYSQL_DATABASE=appdb \&lt;br /&gt;
  -v mysql-data:/var/lib/mysql \&lt;br /&gt;
  -p 3306:3306 \&lt;br /&gt;
  mysql:8.4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MySQL 클라이언트 컨테이너로 접속한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  --network container:mysql \&lt;br /&gt;
  mysql:8.4 \&lt;br /&gt;
  mysql -h 127.0.0.1 -uroot -psecret appdb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redis 실행 ===&lt;br /&gt;
Redis를 백그라운드로 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name redis \&lt;br /&gt;
  -p 6379:6379 \&lt;br /&gt;
  redis:7&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redis CLI로 접속한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  --network container:redis \&lt;br /&gt;
  redis:7 \&lt;br /&gt;
  redis-cli -h 127.0.0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 컨테이너 간 네트워크 연결 ===&lt;br /&gt;
사용자 정의 네트워크를 만들고 애플리케이션과 데이터베이스를 같은 네트워크에 배치한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker network create app-net&lt;br /&gt;
&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name db \&lt;br /&gt;
  --network app-net \&lt;br /&gt;
  -e POSTGRES_PASSWORD=secret \&lt;br /&gt;
  postgres:16&lt;br /&gt;
&lt;br /&gt;
docker run --rm -it \&lt;br /&gt;
  --name app \&lt;br /&gt;
  --network app-net \&lt;br /&gt;
  -e DATABASE_HOST=db \&lt;br /&gt;
  alpine:latest \&lt;br /&gt;
  sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사용자 정의 네트워크에서는 같은 네트워크에 속한 컨테이너가 컨테이너 이름으로 서로를 찾을 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 일회성 빌드 도구처럼 사용 ===&lt;br /&gt;
호스트에 Go를 설치하지 않고 Go 테스트를 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/src \&lt;br /&gt;
  -w /src \&lt;br /&gt;
  golang:1.23 \&lt;br /&gt;
  go test ./...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
호스트에 Maven을 설치하지 않고 Java 프로젝트를 빌드한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/workspace \&lt;br /&gt;
  -w /workspace \&lt;br /&gt;
  maven:3.9-eclipse-temurin-21 \&lt;br /&gt;
  mvn test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 파일 권한 문제 줄이기 ===&lt;br /&gt;
바인드 마운트한 디렉터리에 루트 소유 파일이 생기지 않도록 현재 사용자 UID/GID로 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm \&lt;br /&gt;
  -u &amp;quot;$(id -u):$(id -g)&amp;quot; \&lt;br /&gt;
  -v &amp;quot;$PWD&amp;quot;:/app \&lt;br /&gt;
  -w /app \&lt;br /&gt;
  node:22 \&lt;br /&gt;
  npm install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 이미지 기본 명령 확인 또는 우회 ===&lt;br /&gt;
이미지의 기본 명령 대신 셸을 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -it --entrypoint sh nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
컨테이너의 환경을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm --entrypoint env nginx:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 자주 쓰는 조합 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 목적 !! 명령 예시&lt;br /&gt;
|-&lt;br /&gt;
| 임시 셸&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run --rm -it ubuntu:24.04 bash&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 현재 디렉터리 마운트&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run --rm -v &amp;quot;$PWD&amp;quot;:/app -w /app alpine ls&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 웹 서버 실행&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run -d --name web -p 8080:80 nginx&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 환경 변수 전달&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run --rm -e APP_ENV=dev alpine env&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 볼륨으로 데이터 보존&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run -d -v mysql-data:/var/lib/mysql mysql:8.4&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 사용자 정의 네트워크 사용&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run --network app-net --name app my-app&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 현재 사용자 권한으로 실행&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run --rm -u &amp;quot;$(id -u):$(id -g)&amp;quot; -v &amp;quot;$PWD&amp;quot;:/app image command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 최신 이미지 확인 후 실행&lt;br /&gt;
| &amp;lt;code&amp;gt;docker run --rm --pull always alpine&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 주의사항 ==&lt;br /&gt;
* &amp;lt;code&amp;gt;docker run&amp;lt;/code&amp;gt;은 새 컨테이너를 생성한다. 기존 컨테이너를 다시 시작하려면 &amp;lt;code&amp;gt;docker start&amp;lt;/code&amp;gt;를 사용한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt;을 사용하면 컨테이너 종료 후 컨테이너 자체가 삭제되므로, 종료 후 상태 분석이 필요한 경우에는 사용하지 않는다.&lt;br /&gt;
* 바인드 마운트는 호스트 파일 시스템을 컨테이너에 노출하므로 경로와 권한을 신중히 지정해야 한다.&lt;br /&gt;
* 데이터베이스처럼 데이터 보존이 필요한 컨테이너는 컨테이너 내부 파일 시스템에만 의존하지 말고 Docker 볼륨을 사용한다.&lt;br /&gt;
* &amp;lt;code&amp;gt;-p 8080:80&amp;lt;/code&amp;gt;에서 앞의 &amp;lt;code&amp;gt;8080&amp;lt;/code&amp;gt;은 호스트 포트, 뒤의 &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt;은 컨테이너 포트이다.&lt;br /&gt;
* &amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt; 태그는 항상 같은 이미지를 의미하지 않을 수 있으므로 운영 환경에서는 명시적인 버전 태그를 사용하는 것이 좋다.&lt;br /&gt;
* &amp;lt;code&amp;gt;--privileged&amp;lt;/code&amp;gt;는 컨테이너 격리를 크게 약화할 수 있으므로 필요한 경우에만 제한적으로 사용한다.&lt;br /&gt;
* 민감한 값을 &amp;lt;code&amp;gt;-e PASSWORD=...&amp;lt;/code&amp;gt; 형태로 명령행에 직접 넣으면 기록에 남을 수 있으므로 운영 환경에서는 보안 저장소나 오케스트레이션 도구의 시크릿 기능을 고려한다.&lt;br /&gt;
&lt;br /&gt;
== 관련 명령어 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 명령어 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt;&lt;br /&gt;
| 실행 중인 컨테이너 목록을 확인한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker ps -a&amp;lt;/code&amp;gt;&lt;br /&gt;
| 정지된 컨테이너를 포함해 모든 컨테이너 목록을 확인한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker logs&amp;lt;/code&amp;gt;&lt;br /&gt;
| 컨테이너 로그를 확인한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker exec&amp;lt;/code&amp;gt;&lt;br /&gt;
| 실행 중인 컨테이너 안에서 새 명령을 실행한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker stop&amp;lt;/code&amp;gt;&lt;br /&gt;
| 실행 중인 컨테이너를 정지한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker start&amp;lt;/code&amp;gt;&lt;br /&gt;
| 정지된 컨테이너를 다시 시작한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker rm&amp;lt;/code&amp;gt;&lt;br /&gt;
| 정지된 컨테이너를 삭제한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker volume&amp;lt;/code&amp;gt;&lt;br /&gt;
| Docker 볼륨을 생성, 조회, 삭제한다.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;docker network&amp;lt;/code&amp;gt;&lt;br /&gt;
| Docker 네트워크를 생성, 조회, 삭제한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[도커]]&lt;br /&gt;
* [[도커파일]]&lt;br /&gt;
* [[컨테이너 저장소]]&lt;br /&gt;
* [[쿠버네티스]]&lt;br /&gt;
&lt;br /&gt;
== 각주 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[분류:Docker]]&lt;br /&gt;
[[분류:컨테이너]]&lt;br /&gt;
[[분류:개발도구]]&lt;/div&gt;</summary>
		<author><name>여전사</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%95%84%EB%A7%88%EC%A1%B4_ECR&amp;diff=60610</id>
		<title>아마존 ECR</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%95%84%EB%A7%88%EC%A1%B4_ECR&amp;diff=60610"/>
		<updated>2026-06-26T06:35:40Z</updated>

		<summary type="html">&lt;p&gt;여전사: 새 문서: Amazon ECR(Amazon Elastic Container Registry)은 AWS가 제공하는 완전관리형 컨테이너 이미지 레지스트리 서비스로, Docker 이미지, OCI(Open Container Initiative) 이미지 및 OCI 호환 아티팩트를 저장·배포·관리하는 데 사용된다.&amp;lt;ref name=&amp;quot;what-is-ecr&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;What is Amazon Elastic Container Registry?&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;  == 개요 =...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amazon ECR(Amazon Elastic Container Registry)은 [[AWS]]가 제공하는 완전관리형 컨테이너 이미지 레지스트리 서비스로, Docker 이미지, OCI(Open Container Initiative) 이미지 및 OCI 호환 아티팩트를 저장·배포·관리하는 데 사용된다.&amp;lt;ref name=&amp;quot;what-is-ecr&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;What is Amazon Elastic Container Registry?&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Amazon ECR은 컨테이너 기반 애플리케이션 배포 파이프라인에서 이미지 저장소 역할을 하는 [[AWS]] 서비스이다. 사용자는 [[Docker CLI]], [[AWS CLI]], [[AWS SDK]], [[CI/CD]] 도구 등을 이용해 컨테이너 이미지를 Amazon ECR 리포지토리에 푸시하고, [[Amazon ECS]], [[Amazon EKS]], [[AWS Lambda]], [[AWS App Runner]] 또는 온프레미스 실행 환경에서 이미지를 풀하여 사용할 수 있다.&amp;lt;ref name=&amp;quot;ecr-doc&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Amazon Elastic Container Registry Documentation&amp;quot;, https://docs.aws.amazon.com/ecr/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Amazon ECR은 기본적으로 계정과 리전에 연결된 프라이빗 레지스트리를 제공하며, 하나의 레지스트리 안에 여러 리포지토리를 생성할 수 있다. 각 리포지토리는 이미지 태그와 이미지 다이제스트를 기준으로 Docker 이미지, OCI 이미지, OCI 호환 아티팩트를 관리한다.&amp;lt;ref name=&amp;quot;private-registry&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Amazon ECR private registry&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;repositories&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Amazon ECR private repositories&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 주요 구성 요소 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구성 요소 !! 설명&lt;br /&gt;
|-&lt;br /&gt;
| 레지스트리&lt;br /&gt;
| [[AWS 계정]]과 [[AWS 리전]]에 연결된 컨테이너 이미지 저장 영역이다. 프라이빗 레지스트리는 계정별로 제공되며 여러 리포지토리를 포함할 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 리포지토리&lt;br /&gt;
| 특정 애플리케이션 또는 이미지 계열을 저장하는 논리적 단위이다. Docker 이미지, OCI 이미지, OCI 호환 아티팩트를 저장할 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 이미지&lt;br /&gt;
| 컨테이너 실행에 필요한 파일 시스템과 메타데이터를 포함한 산출물이다. 일반적으로 태그 또는 다이제스트로 식별한다.&lt;br /&gt;
|-&lt;br /&gt;
| 이미지 태그&lt;br /&gt;
| 사람이 읽기 쉬운 이미지 식별자이다. 예를 들어 &amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v1.0.0&amp;lt;/code&amp;gt; 같은 값이 사용된다.&lt;br /&gt;
|-&lt;br /&gt;
| 이미지 다이제스트&lt;br /&gt;
| 이미지 콘텐츠를 기준으로 생성되는 고유 식별자이다. 동일 태그가 변경될 수 있는 것과 달리 다이제스트는 특정 이미지 버전을 식별하는 데 유용하다.&lt;br /&gt;
|-&lt;br /&gt;
| 리포지토리 정책&lt;br /&gt;
| 리포지토리 단위로 접근 권한을 제어하는 리소스 기반 정책이다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 주요 기능 ==&lt;br /&gt;
* &#039;&#039;&#039;프라이빗 컨테이너 이미지 저장소&#039;&#039;&#039;: 조직 내부 또는 특정 [[AWS 계정]]에서 사용하는 컨테이너 이미지를 안전하게 저장한다.&lt;br /&gt;
* &#039;&#039;&#039;퍼블릭 레지스트리&#039;&#039;&#039;: [[Amazon ECR Public]]을 통해 공개 컨테이너 이미지를 배포할 수 있다.&amp;lt;ref name=&amp;quot;ecr-public&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;What Is Amazon Elastic Container Registry Public?&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/public/what-is-ecr.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[AWS IAM]] 기반 접근 제어&#039;&#039;&#039;: [[AWS IAM]] 사용자, 역할, 서비스, 다른 [[AWS 계정]]에 대해 푸시·풀·관리 권한을 세밀하게 부여할 수 있다.&amp;lt;ref name=&amp;quot;iam&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;How Amazon Elastic Container Registry works with IAM&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_service-with-iam.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;리포지토리 정책&#039;&#039;&#039;: 리포지토리 단위의 리소스 기반 정책을 설정해 특정 주체의 접근을 허용하거나 제한할 수 있다.&amp;lt;ref name=&amp;quot;repo-policy&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Private repository policies in Amazon ECR&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policies.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;취약점 스캔&#039;&#039;&#039;: 컨테이너 이미지의 소프트웨어 취약점을 식별한다. 기본 스캔과 [[Amazon Inspector]] 연동 기반의 향상된 스캔을 제공한다.&amp;lt;ref name=&amp;quot;scan&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Scan images for software vulnerabilities in Amazon ECR&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;수명 주기 정책&#039;&#039;&#039;: 오래되었거나 사용하지 않는 이미지를 조건에 따라 만료 또는 아카이브하여 저장소를 관리한다.&amp;lt;ref name=&amp;quot;lifecycle&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Automate the cleanup of images by using lifecycle policies in Amazon ECR&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;이미지 복제&#039;&#039;&#039;: 리전 간 또는 계정 간 프라이빗 이미지 복제를 지원한다.&amp;lt;ref name=&amp;quot;replication&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Private image replication in Amazon ECR&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/replication.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;풀 스루 캐시&#039;&#039;&#039;: 외부 업스트림 레지스트리의 이미지를 Amazon ECR 프라이빗 레지스트리로 캐시해 반복적인 이미지 풀을 단순화할 수 있다.&amp;lt;ref name=&amp;quot;cache&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Sync an upstream registry with an Amazon ECR private registry&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[AWS PrivateLink]] 연동&#039;&#039;&#039;: 인터페이스 [[VPC 엔드포인트]]를 사용해 [[Amazon VPC]] 내부에서 Amazon ECR API에 비공개로 접근할 수 있다.&amp;lt;ref name=&amp;quot;privatelink&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Amazon ECR interface VPC endpoints (AWS PrivateLink)&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 동작 방식 ==&lt;br /&gt;
일반적인 사용 흐름은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
# Amazon ECR 리포지토리를 생성한다.&lt;br /&gt;
# [[AWS CLI]] 또는 [[Docker CLI]]로 Amazon ECR 레지스트리에 인증한다.&lt;br /&gt;
# 로컬에서 빌드한 컨테이너 이미지에 Amazon ECR 리포지토리 주소를 태그로 지정한다.&lt;br /&gt;
# 이미지를 Amazon ECR 리포지토리에 푸시한다.&lt;br /&gt;
# [[Amazon ECS]], [[Amazon EKS]], [[AWS Lambda]], [[AWS App Runner]] 또는 배포 파이프라인에서 해당 이미지를 풀하여 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aws ecr get-login-password --region ap-northeast-2 \&lt;br /&gt;
  | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
docker build -t sample-app .&lt;br /&gt;
docker tag sample-app:latest 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/sample-app:latest&lt;br /&gt;
docker push 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/sample-app:latest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Amazon ECR에 인증하려면 일반적으로 &amp;lt;code&amp;gt;ecr:GetAuthorizationToken&amp;lt;/code&amp;gt; 권한이 필요하다. 인증 후에는 부여된 [[AWS IAM]] 권한과 리포지토리 정책에 따라 이미지 푸시, 풀, 삭제, 리포지토리 관리 작업을 수행한다.&amp;lt;ref name=&amp;quot;docker-pull&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Pulling an image to your local environment from an Amazon ECR private repository&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 보안 ==&lt;br /&gt;
Amazon ECR의 접근 제어는 [[AWS IAM]]과 리포지토리 정책을 중심으로 구성된다. [[AWS IAM]] 정책은 사용자나 역할이 Amazon ECR API를 호출할 수 있는 권한을 정의하고, 리포지토리 정책은 특정 리포지토리에 대한 리소스 기반 권한을 정의한다.&amp;lt;ref name=&amp;quot;iam&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;repo-policy&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이미지 취약점 관리는 Amazon ECR의 핵심 보안 기능 중 하나이다. 기본 스캔은 컨테이너 이미지의 알려진 취약점을 식별하는 데 사용되며, 향상된 스캔은 [[Amazon Inspector]]와 통합되어 운영체제 패키지와 프로그래밍 언어 패키지 취약점까지 분석할 수 있다.&amp;lt;ref name=&amp;quot;enhanced-scan&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Scan images for OS and programming language package vulnerabilities in Amazon ECR&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-scanning-enhanced.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네트워크 측면에서는 [[AWS PrivateLink]] 기반 인터페이스 [[VPC 엔드포인트]]를 구성해 인터넷 게이트웨이, NAT 디바이스, 가상 프라이빗 게이트웨이를 사용하지 않고 [[Amazon VPC]]에서 Amazon ECR API에 접근하도록 설계할 수 있다.&amp;lt;ref name=&amp;quot;privatelink&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 운영 관리 ==&lt;br /&gt;
Amazon ECR 저장소는 이미지가 누적되기 쉬우므로 운영 환경에서는 수명 주기 정책을 함께 사용하는 것이 일반적이다. 수명 주기 정책은 태그 상태, 이미지 개수, 이미지 나이, 마지막 풀 시점 등의 조건을 기준으로 이미지를 정리할 수 있으며, 정책 적용 전 미리보기 기능을 사용해 영향을 확인할 수 있다.&amp;lt;ref name=&amp;quot;lifecycle&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;lifecycle-preview&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Creating a lifecycle policy preview in Amazon ECR&amp;quot;, https://docs.aws.amazon.com/AmazonECR/latest/userguide/lpp_creation.html, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
멀티 리전 또는 다중 계정 환경에서는 이미지 복제를 사용해 배포 지연을 줄이고 장애 대응성을 높일 수 있다. Amazon ECR은 리전 간 복제와 계정 간 복제를 지원하며, 계정 간 복제의 경우 대상 계정의 레지스트리 권한 정책 설정이 필요하다.&amp;lt;ref name=&amp;quot;replication&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
풀 스루 캐시는 Docker Hub, GitLab Container Registry 등 외부 업스트림 레지스트리 이미지를 Amazon ECR을 통해 가져오고 캐시하는 기능이다. 캐시된 태그 이미지는 이후 풀 요청에서 업스트림 변경 여부를 확인해 갱신을 시도한다.&amp;lt;ref name=&amp;quot;cache&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 과금 ==&lt;br /&gt;
Amazon ECR은 주로 저장된 이미지 데이터 용량과 데이터 전송량을 기준으로 과금된다. 같은 리전 내에서 [[AWS]] 서비스가 Amazon ECR 이미지를 풀하는 경우와 리전 간 전송, 인터넷 전송 등은 과금 조건이 달라질 수 있으므로 운영 전 공식 요금표와 사용 리전을 확인해야 한다.&amp;lt;ref name=&amp;quot;pricing&amp;quot;&amp;gt;Amazon Web Services, &amp;quot;Amazon ECR Pricing&amp;quot;, https://aws.amazon.com/ecr/pricing/, 확인일: 2026-06-26.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 활용 사례 ==&lt;br /&gt;
* &#039;&#039;&#039;[[CI/CD]] 파이프라인&#039;&#039;&#039;: 빌드 서버에서 생성한 컨테이너 이미지를 Amazon ECR에 저장하고 배포 단계에서 동일 이미지를 사용한다.&lt;br /&gt;
* &#039;&#039;&#039;[[Amazon ECS]]·[[Amazon EKS]] 배포&#039;&#039;&#039;: [[Amazon ECS]] 태스크나 [[Amazon EKS]] 파드에서 Amazon ECR 이미지를 참조해 컨테이너를 실행한다.&lt;br /&gt;
* &#039;&#039;&#039;서버리스 컨테이너 배포&#039;&#039;&#039;: [[AWS Lambda]] 컨테이너 이미지 또는 [[AWS App Runner]] 서비스의 이미지 저장소로 활용한다.&lt;br /&gt;
* &#039;&#039;&#039;멀티 리전 배포&#039;&#039;&#039;: 이미지 복제를 이용해 여러 [[AWS 리전]]에 동일한 컨테이너 이미지를 배포한다.&lt;br /&gt;
* &#039;&#039;&#039;외부 이미지 캐시&#039;&#039;&#039;: 풀 스루 캐시를 이용해 외부 레지스트리 의존도를 낮추고 이미지 풀 경로를 표준화한다.&lt;br /&gt;
&lt;br /&gt;
== 장점과 한계 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분 !! 내용&lt;br /&gt;
|-&lt;br /&gt;
| 장점&lt;br /&gt;
| [[AWS IAM]], [[Amazon ECS]], [[Amazon EKS]], [[AWS Lambda]], [[AWS App Runner]] 등 [[AWS]] 서비스와 통합성이 높고, 관리형 서비스이므로 별도 레지스트리 서버 운영 부담이 작다.&lt;br /&gt;
|-&lt;br /&gt;
| 장점&lt;br /&gt;
| 취약점 스캔, 수명 주기 정책, 이미지 복제, 풀 스루 캐시, [[AWS PrivateLink]] 연동 등 운영 기능을 제공한다.&lt;br /&gt;
|-&lt;br /&gt;
| 한계&lt;br /&gt;
| [[AWS 계정]]과 [[AWS 리전]] 구조에 종속되므로 멀티 클라우드 또는 온프레미스 중심 환경에서는 접근 경로, 인증 방식, 비용 구조를 별도로 설계해야 한다.&lt;br /&gt;
|-&lt;br /&gt;
| 한계&lt;br /&gt;
| 저장 이미지가 계속 누적될 경우 비용이 증가할 수 있어 이미지 태그 전략, 수명 주기 정책, 저장소 권한 관리를 함께 설계해야 한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[FaaS]]&lt;br /&gt;
* [[코드형 인프라]]&lt;br /&gt;
&lt;br /&gt;
== 각주 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[분류:AWS]]&lt;br /&gt;
[[분류:클라우드]]&lt;br /&gt;
[[분류:컨테이너]]&lt;/div&gt;</summary>
		<author><name>여전사</name></author>
	</entry>
</feed>