Docker Image와 Container 만들기 [Docker]

Pturt·2024년 7월 2일

Docker

목록 보기
2/2
post-thumbnail

*도커를 설치했음을 가정하고 진행함


터미널에서 docker --version 또는 docker --v 명령어를 통해 설치 여부, 버전 확인 가능

1. 컴퓨터 내의 도커 이미지 검색

컴퓨터에 로컬로 설치되어 있는 도커 이미지를 검색

docker images [옵션][레포지토리 이름]

images 옵션

docker images -a, --all  : 모든 이미지 표시

docker images --digests : digest 표시. digest는 이미지의 고유 해시값을 나타냄.

docker images --no-trunc : 모든 결과 표시

docker images -q, --quiet : 이미지 ID만 표시


우분투 ID
우분투 레포지토리 이미지의 ID 값만 표시한 결과

2. 베이스로 사용할 이미지 검색

Docker Hub Web 또는 터미널에서 배포되어있는 베이스 이미지를 검색

docker search [옵션] 검색어 [필터]

search 옵션

docker search 검색어 --limit : 출력할 개수 지정

docker search 검색어 --no-trunc=false : 이미지 설명을 생략하지 않고 모든 결과를 다 표시

search 필터

docker search 검색어 --filter is-automated=false : Automated Build만 표시

docker search 검색어 --filter stars=n : star 수가 n개 이상인 결과만 표시 

docker search 검색어 --filter is-official=true : 공식 배포 이미지만 표시


star가 100 이상인 우분투 이미지 1개를 출력

우분투 이미지 10개를 이미지 설명까지 포함해서 출력

3. 도커 이미지를 다운로드

검색한 이미지 중 개발에 사용할 도커 이미지를 가져옴

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

태그란 도커 이미지의 특정 버전을 지정해주는 명령어이다.

pull 옵션

ex) docker pull ubuntu:24.04
docker pull -a 이미지명 : 모든 태그의 이미지를 다운로드
docker pull 이미지명:latest : 최신 버전의 이미지 다운로드. 태그를 지정하지 않아도 latest태그가 자동으로 적용된다.
  • search와 다르게 pull에서는 옵션이 항상 명령어 뒤, 이미지명 앞에 사용되어야 함.

4. 도커 파일, 이미지 생성

Dockerfile은 도커 이미지를 만들기 위한 설정 파일. Dockerfile의 정보를 바탕으로 build명령어를 통해 도커 이미지를 생성함.

pull 명령어로 불러온 이미지를 베이스로 동작 방식과 세부 설정을 명시할 Dockerfile을 생성함.
일반적으로 프로젝트의 루트 디렉토리에 생성하지만 다중 서비스 프로젝트에서 서비스마다 별도의 환경이 필요하다면 각 서비스 디렉토리에 Dockerfile을 생성해준다.

my-project/
├── Dockerfile
├── src/ 
│   ├── main.py
│   └── utils.py
├── requirements.txt
└── README.md

도커파일 기본 구조

FROM [이미지이름][:태그]  : 베이스 이미지 지정  

RUN [명령어]  : 명령 실행

WORKDIR [작업 디렉토리]

COPY [파일] : 파일 복사

CMD [실행파일/스크립트] : 컨테이너 실행 명령

EXPOSE [포트번호] : 개방할 포트 번호
 
ENV [환경변수]

생성한 도커 파일로 새 도커 이미지 생성

docker build -t/--tag 생성할 이미지명 [Dockerfile 위치]

ex)docker build --tag dockerTest .  / docker build . -t dockerTest  
현재 위치 Dockerfile로 이름이 dockerTest인 이미지 생성


이미지가 생성되었음을 확인

5. 컨테이너 생성

만들어진 도커 파일을 기반으로 컨테이너를 생성. run 명령어는 pull, create, start, attach의 역할을 한번에 수행한다.

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

run 옵션

docker run -d 이미지명 : daemon으로 컨테이너를 실행 (백그라운드에서 실행됨)

docker run -it 이미지명 : 컨테이너를 실행하고 진입했을 때 CLI입출력을 사용함

docker run -rm 이미지명 : 컨테이너가 종료되면 컨테이너를 제거

docker run -p [호스트 포트번호]:[컨테이너 포트번호] 이미지명 : 호스트와 컨테이너의 포트를 연결(포트포워딩)

컨테이너를 실행한 이후에 현재 실행중인 컨테이너를 확인할 수 있음

docker ps [옵션]

ps 옵션

docker ps -a : 실행중이 아니어도 존재하는 모든 컨테이너 정보를 출력

6. 컨테이너 내부 조작

CLI환경을 통해 코드를 시작하고 프로그램을 조작할 수 있다.

docker restart [컨테이너 이름/컨테이너 ID]

컨테이너를 재시작한다.

docker exec [컨테이너명/컨테이너 ID][명령어]

컨테이너를 실행한 환경에서 다른 프로세스를 실행할 수 있도록 함.
이미 실행된 환경을 디버깅하는 용도로 사용.

ex) docker exec dockerTest pwd/ls/ps 

docker exec -it [컨테이너명] bash : bash환경에서 컨테이너를 탐색하도록 셸 실행

docker exec -it --workdir /실행위치 [컨테이너명] bash : 프로세스가 실행되는 위치 변경

docker exec -it -e /--end-file [환경변수] bash : 환경변수를 추가로 지정

exit

컨테이너 내부 쉘에서 빠져 나오면서 컨테이너를 종료한다.

7. 컨테이너 중지 및 삭제

컨테이너 사용을 중단한다

docker stop

컨테이너를 삭제한다

docker rm [컨테이너명]/[컨테이너ID]
docker rm `docker ps -a -q` : 모든 컨테이너 삭제

8. 도커 이미지 삭제

도커 이미지를 삭제한다

docker rmi [옵션][이미지ID]

profile
애송이 개발자

0개의 댓글