Infra/Docker

Dockerfile로부터 도커 이미지 생성 / 컨테이너 실행 명령어 정리

jimmy_AI 2024. 2. 28. 23:44
반응형

프로그램을 도커로 실행하기 위해 필요한 도커파일을 작성한 뒤에

Dockerfile로 부터 도커 이미지를 생성하고 컨테이너를 실행하는 과정이 필요합니다.

이 글에서는 이 과정들에 필요한 명령어들을 간략하게 정리해보도록 하겠습니다.

 

 

Step 1. 도커 이미지 생성(docker build)

컨테이너 실행을 위해서는 먼저 docker image 생성이 필요합니다.

이를 위해서는 docker build 명령어가 수행되어야 하며, 명령어의 포맷은 다음과 같습니다.

docker build -t [이미지명]:[태그] [Dockerfile 위치]

 

-t [이미지명]:[태그]는 생성될 이미지의 이름과 태그를 지정합니다.

태그는 선택 사항이며, 생략할 경우 latest가 기본값으로 지정됩니다.

 

[Dockerfile 위치]는 Dockerfile이 위치한 디렉토리 경로입니다.

도커 파일이 위치한 디렉토리에서 실행할 경우에는 .를 사용합니다.

 

예를 들어, 현재 디렉토리에 있는 Dockerfile로부터 myapp이라는 이름의 이미지를

v1 태그와 함께 빌드하려면 다음과 같이 명령어를 실행해주시면 됩니다.

docker build -t myapp:v1 .

 

반응형

 

Step 2. 도커 컨테이너 실행(docker run)

위의 빌드 과정이 완료되면, 해당 docker image를 바탕으로 컨테이너를 실행할 수 있습니다.

컨테이너를 실행하기 위한 기본 명령어 형식은 다음과 같습니다.

docker run [옵션] [이미지명]:[태그]

 

[옵션]에는 컨테이너 실행과 관련된 다양한 설정을 정할 수 있습니다.

 

[이미지명]:[태그]는 실행할 이미지의 이름과 태그를 지정합니다.

위에서 빌드했던 이미지명과 태그를 기준으로 지정해주시면 됩니다.

 

 

[옵션]의 다양한 종류

-d, --detach

컨테이너를 백그라운드에서 실행합니다. 실행 시 컨테이너 ID가 출력됩니다.

 

-p, --publish [호스트 포트]:[컨테이너 포트]

호스트와 컨테이너 간의 포트 매핑을 설정합니다.

외부에서 컨테이너의 서비스에 접근할 수 있게 합니다.

 

--name [이름]
컨테이너에 이름을 지정하는 옵션입니다.

나중에 컨테이너를 쉽게 식별하고 관리할 수 있다는 장점이 있습니다.

-e, --env [환경변수=값]
컨테이너 내에서 사용할 환경변수를 수동으로 설정할 수 있습니다.

여러 개의 환경변수를 설정할 때는 -e 옵션을 여러 번 사용합니다.

--env-file [파일 경로]
환경변수를 .env 등의 파일로부터 읽어와 컨테이너에 적용합니다.

파일 내 각 라인은 환경변수=값 형식을 따릅니다.

-v, --volume [호스트 디렉토리]:[컨테이너 디렉토리]
호스트와 컨테이너 간에 볼륨(디렉토리나 파일)을 공유합니다.

데이터의 영구 저장이나 데이터 공유에 사용됩니다.

--rm
컨테이너가 정상적으로 종료되면 자동으로 해당 컨테이너를 삭제합니다.

임시 컨테이너 실행에 유용한 옵션입니다.

--network [네트워크]
컨테이너를 특정 네트워크에 연결합니다.

도커 네트워킹을 통해 컨테이너 간 통신이나 외부 네트워크 설정을 할 때 사용됩니다.

 

-it
컨테이너의 가상 터미널을 할당합니다.

이는 컨테이너 내부에서 쉘을 직접 실행하고 싶을 때 유용합니다.

 

예를 들어, 위에서 만든 myapp:v1 이미지를 백그라운드에서 실행하고,

호스트의 8080 포트와 컨테이너의 80 포트를 매핑하려면 다음과 같이 명령어를 실행하면 됩니다.

docker run -d -p 8080:80 myapp:v1

 

또 다른 예시로, 다음 명령어도 살펴보도록 하겠습니다.

docker run -d --name mycontainer --env-file ./.env myapp:v1

 

위의 명령어는 현재 디렉토리의 .env 파일을 환경 변수로 넣어 실행하고,

이름을 mycontainer로 지정하며, 백그라운드에서 실행한 명령어 예시입니다.