1. 도커 이미지
도커 이미지는
- 프로그램을 실행하는데 필요한 설정과 소프트웨어 종속성(프로그래밍 언어 런타임 및 기타 소프트웨어 라이브러리의 특정 버전 등)을 가지고 있다.
- 여러개의 레이어로 되어있다.
도커 이미지는 여러개의 레이어가 쌓여서 만들어진다. 베이스 이미지는 이미지의 기반이 되는 부분이다.
이미지에 무언가가 추가 되면(변경 사항이 생기게 되면) 레이어가 추가되게 되는데, 이를 레이어 캐싱이라고 한다.
2. 도커 이미지 만들기
도커 이미지는 도커 파일을 사용하거나 커밋을 사용하면 만들 수 있다.
🔽 예제
container name: python-os
image name: centos:7
python package install 후 /app dir에 마운트
working dir, volume 모두 /app
container 실행하면 python 으로 'Hello World!' 실행하기
(1) commit
echo 'print("Hello World!")' > test.py
docker run --itd --name python-os centos:7
docker exec python-os yum -y install python
docker exec python-os mkdir /app
docker cp test.py python-os:/app
docker commit --change "CMD ['/usr/bin/python', 'test.py']"
--change "VOLUME /app" --change "WORKDIR /app" python-os python_test:v1
docker run --name test1 python_test:v1
프로세스를 처음부터 하나씩 설명해보면
- echo 명령어를 사용해서 "Hello World!"를 출력하는 test.py 파일을 생성한다.
- centos:7 이미지(베이스 이미지)를 사용해서 python-os 라는 이름의 컨테이너를 실행하기
- python-os 라는 이름의 컨테이너에서 yum -y install python 실행(python 설치)
- python-os 라는 이름의 컨테이너에 /app 폴더 생성
- test.py 파일을 python-os 의 /app 폴더로 복사
- python-os 컨테이너를 위의 조건 대로 변경하고(CMD, VOLUME, WORKDIR), python_test:v1로 저장
참고로 centos:7 에서 :7 은 태그를 붙인 것으로 이미지 레이어는 <이미지 이름>:<태그> 형식이다. 태그를 붙이지 않으면 자동으로 가장 최신 이미지가 다운로드 된다.
(2) Dockerfile
vi Dockerfile
FROM centos:7
RUN yum -y install python
RUN mkdir /app
COPY test.py /app/test.py
CMD ["/usr/bin/python", "/app/test.py"]
VOLUME /app
WORKDIR /app
docker build -t python_teset:v2 .
docker run --name test2 python_test:v2
FROM 은 베이스 이미지를 명시하는 부분으로 절대로 빠지면 안된다. Dockerfile에서 필수적인 부분이 하나 있다면 FROM 이다. 전체 프로세스는 위의 commit과 같다. 다른 부분은 docker build 명령어를 사용해서 Dockerfile을 빌드하는 부분 뿐이다.
* 주의
베이스 이미지에서 다른 종속성 추가 등 변경 사항이 있을 때는 임시 컨테이너를 만든 후, 그를 토대로 새로운 이미지를 만든다. 이미지를 만들고 나서 임시 컨테이너를 지우는 것을 까먹지 말자!
도커 이미지 이름을 정할 때 사용하는 옵션 '-t' 규칙
docker build -t <도커 ID>/<저장소/프로젝트 이름>:<버전>
'DevOps > Docker' 카테고리의 다른 글
[Docker] VM vs Container (0) | 2023.12.16 |
---|---|
[도커]도커에서 레디스 사용하기 (0) | 2021.06.13 |
[도커]docker image rm vs docker rmi (0) | 2021.06.04 |
[도커]헷갈리는 기본 명령어(create, start, run, stop, rm) (1) | 2021.06.02 |
[도커]네트워킹 (0) | 2021.06.02 |