Docker image, Dockerfile I

dazzi·2024년 1월 17일
0

Docker

목록 보기
4/6
post-thumbnail

https://hub.docker.com/

- GitHub 나 Bigbucket과 같은 소스관리 툴과 연계하여 코드를 빌드하는 기능이나 실행 가능한 애플리케이션의 이미지를 관리하는 Docker의 공식 리포지토리 서비스
docker search <image_name> 원하는 이미지를 검색
OFFICIAL 공식 이미지
AUTOMATED 특정 유저가 만든 이미지

💭레지스트리?

- 레지스트리 서버의 IP 주소 또는 도메인 이름 (default dockerhub)

저장소(registry) 하나 이상의 컨테이너 이미지를 저장하는 장소. official한 repository이름은 library
이미지(image) 컨테이너의 기본이 되는 이미지
태그(tag) 이미지의 버전을 기록. 생략하면 도커 엔진은 이미지의 태그를 latest로 인식.

Image

pull

- 도커 이미지는 기본적으로 공식적인 Docker hub 등 Docker Registry로부터 Docker 이미지를 다운로드 한다.

docker pull <image_name>

images

- 이미지 확인

docker images

# no-trunc: 결과 필드 정보를 자르지 않고 모두 출력
docker images --no-trunc
REPOSITORY    TAG       IMAGE ID                                                                  CREATED        SIZE
hello-world   latest    sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a   8 months ago   13.3kB

# --quite, -q 이미지 ID만 출력
docker images -q
d2c94e258dcb

# 이미지 확인
[root@hwi ~]# docker image inspect nginx
[
    {
        "Id": "sha256:0e901e68141fd02f237cf63eb842529f8a9500636a9419e3cf4fb986b8fe3d5d",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
  ....

docker image tag 이미지 레포지토리:태그(버전)

도커 이미지 생성

- 기존의 imgae id 가 바뀜

docker (container) commit

# --author, -a 작성자 설정 / --message, -m 메시지 지정
# docker commit -m "message" [containerFrom] [REPO/IMG:TAG]
# 커밋으로 이미지 생성
docker commit -a "dazzi" -m "modify: index.html" myweb01 dazzi/myweb:1.0
> sha256:2fd80466d9e4dfc576a2478bfc17af4fed41461c1353da1921c109abaf27dc95

# 생성한 이미지 확인
docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
dazzi/myweb     1.0       2fd80466d9e4   19 seconds ago   168MB

인터넷이 되지 않는다면?

export import
- 인터넷이 되지 않는 폐쇄망에서 이미지를 전달하기 위해서는, USB로 압축파일로 전달

# 파일 시스템 형태로 아카이브
docker export [Container name] > [tarName.tar] 				# container -> tar
cat [tarName.tar] | docker image import - [REPO/IMG:TAG] 	# tar -> image

# 이미지 레이어 형태로 아카이브
docker image save -o [tarName.tar]	# image -> tar
docker image load -i save.tar 		# tar -> image

도커 이미지 빌드 (Docker Image Build)

- Dockerfile 은 Docker 에서 인프라 구성을 기술한 파일

FROM 운영체제 이미지
RUN	 실행할 명렁어
CMD  컨테이너 명령 실행

문법

명령설명
FROM베이스 이미지 지정
RUN명령 실행
CMD컨테이너 명령 실행
LABEL라벨 설정
EXPOSE포트 노출
ENV환경 변수
ADD파일/디렉토리 추가
COPY파일 복사
ENTRYPOINT컨테이너 실행 명령
VOLUME볼륨 마운트
USER사용자 지정
WORKDIR작업 디렉토리
ARGDockerfile 안의 변수
ONBUILD빌드 완료 후 실행되는 명령
STOPSIGNAL종료 시그널 설정
HEALTHCHECK컨테이너의 상태 체크
SHELL기본 쉘 설정

예시

[ec2-user@hwi dockerfile_dir]$ cat -n Dockerfile.1
         1  # 1. 베이스 이미지로부터 시작
         2  FROM ubuntu
         3  
         4  # 2. 패키지 업데이트 및 Nginx 설치
         5  RUN apt-get update && apt-get install -y -q nginx
         6  
         7  # 3. 호스트의 index.html 파일을 컨테이너 내의 /var/www/html/ 경로로 복사
         8  COPY index.html /var/www/html/
         9  
        10  # 4. 컨테이너가 시작될 때 실행할 기본 명령어 설정
        11  CMD ["nginx", "-g", "daemon off;"]

dockerfile을 이해하기 위해선 Image Layer을 이해해야 한다.

컨테이너는 HostOS에 컨테이너를 만들고 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아서 별도의 서버처럼 만들 수 있게 한 것이다.

이미지 전송시간을 줄이기 위해 Read-only image layer 를 공유한다.
컨테이너도 레이어를 쌓아서 만든다고 생각하면 된다.

현재 OS로 사용하는 base image는 read-only 이다.
여기에 파일을 추가한다면 그 위에 레이어가 쌓인다.
upper layer를 하게 되면 Read, Write이고 그 이후 image2 는 전체가 read-only가 된다.
이렇게 명령어가 하나씩 실행될 때마다 add files로 upper layer(프로그램 설치)가 반복된다.
그렇게 image3가 만들어지면 전체가 다시 read-only가 된다.

𝙌. 명령어가 많아진다면?
메모리가 많아진다!

방법 이미지 내부 임시 파일 삭제하기

출처: https://tech.cloudmt.co.kr/2022/06/29/도커와-컨테이너의-이해-3-3-docker-image-dockerfile-docker-compose/

0개의 댓글

관련 채용 정보