ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker란? + build process
    Docker 2021. 2. 19. 20:13

    도커 

    • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징 => 배포, 관리 단순화
    • 컨테이너를 구축, 배포, 복사하고 다른 환경에서 유연하게 사용가능
    • 컨테이너를 위한 플랫폼 셋
    • Docker is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers

    도커 이미지

    • 프로그램, 소스코드, 라이브러리 등 파일을 묶어주고, 컨테이너 안에서 특정 프로세스를 실행하기 위해 필요한 모든 파일, 설정값을 가지고 있음
    • 하나의 이미지로 여러 컨테이너 생성 가능
    • 깃헙와 유사한 도커헙을 통해 버전 관리 및 배포 가능

    레이어 기반

    • 이미지는 여러개의 읽기 전용 레이어로 구성되어 있고 파일이 추가/수정되면 새로운 레이어 생성됨
    • 예) 우분투 이미지가 레이어a,b,c로 구성되어 있다면, nginx는 레이어a,b,c+nginx가 됨
    • 예) 웹앱 이미지가 nginx 기반이라면 웹앱 소스가 변경된 경우 레이어abc,nginx는 그대로이기 때문에 변경된 소스의 레이어만 다운받으면 되므로 효율적으로 이미지 관리 및 공간 관리가 됨

    컨테이너 

    • 이미지를 실행한 상태

    도커파일 빌드하기

    FROM alpine
    
    RUN apk add --update redis
    
    CMD ["redis-server"]

    1. docker build .

    Sending build context to Docker daemon  2.048kB
    Step 1/3 : FROM alpine   ### dockerhub 에서 image pull
    latest: Pulling from library/alpine
    ba3557a56b15: Pull complete
    Digest: sha256:a75afd8b57e7f34e4dad8d65e2c7ba2e1975c795ce1ee22fa34f8cf46f96a3be
    Status: Downloaded newer image for alpine:latest
     ---> 28f6e2705743 ### temp image
    Step 2/3 : RUN apk add --update redis
     ---> Running in e0f434a36974 ### temp image id 28f6e2705743 에서 temp container에 redis 설치
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
    (1/1) Installing redis (6.0.10-r0)
    Executing redis-6.0.10-r0.pre-install
    Executing redis-6.0.10-r0.post-install
    Executing busybox-1.32.1-r3.trigger
    OK: 8 MiB in 15 packages
    Removing intermediate container e0f434a36974 ### temp container id e0f434a36974 삭제
     ---> ba9bb61d7d7b  ### temp image
    Step 3/3 : CMD ["redis-server"]
     ---> Running in 8916ee365413 ### temp container id 8916ee365413 생성
    Removing intermediate container 8916ee365413 ### temp container id 8916ee365413 삭제
     ---> f719e09ac4fe ### image 생성
    Successfully built f719e09ac4fe

    2. 두번째 빌드 - 캐시 사용 - 생성된 이미지 id 동일함

    Sending build context to Docker daemon  2.048kB
    Step 1/3 : FROM alpine
     ---> 28f6e2705743
    Step 2/3 : RUN apk add --update redis
     ---> Using cache
     ---> ba9bb61d7d7b
    Step 3/3 : CMD ["redis-server"]
     ---> Using cache
     ---> f719e09ac4fe
    Successfully built f719e09ac4fe

    3. Dockerfile 수정

    FROM alpine
    
    RUN apk add --update redis
    RUN apk add --update gcc ### 추가된 부분
    
    CMD ["redis-server"]

    4. 추가(변경)된 부분부터 설치 또는 실행(Cache x) 변경되고 새로운 이미지 생성됨(Image ID 변경) 

    $ docker build .

    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM alpine
     ---> 28f6e2705743
    Step 2/4 : RUN apk add --update redis
     ---> Using cache
     ---> ba9bb61d7d7b
    Step 3/4 : RUN apk add --update gcc
     ---> Running in a7ea50ee4a0d
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
    (1/11) Installing libgcc (10.2.1_pre1-r3)
    (2/11) Installing libstdc++ (10.2.1_pre1-r3)
    (3/11) Installing binutils (2.35.1-r1)
    (4/11) Installing libgomp (10.2.1_pre1-r3)
    (5/11) Installing libatomic (10.2.1_pre1-r3)
    (6/11) Installing libgphobos (10.2.1_pre1-r3)
    (7/11) Installing gmp (6.2.1-r0)
    (8/11) Installing isl22 (0.22-r0)
    (9/11) Installing mpfr4 (4.1.0-r0)
    (10/11) Installing mpc1 (1.2.0-r0)
    (11/11) Installing gcc (10.2.1_pre1-r3)
    Executing busybox-1.32.1-r3.trigger
    OK: 118 MiB in 26 packages
    Removing intermediate container a7ea50ee4a0d
     ---> 5170956d5689
    Step 4/4 : CMD ["redis-server"]
     ---> Running in b595b6faece4
    Removing intermediate container b595b6faece4
     ---> d15f90c4757a
    Successfully built d15f90c4757a
Designed by Tistory.