Dockerfile overviewLearn about Dockerfiles and how to use them with Docker Images to build and package your softwaredocs.docker.com Docker는 Dockerfile에서 명령어를 읽어 이미지를 빌드한다. Dockerfile은 소스코드를 빌드하기 위한 명령어가들어 있는 텍스트 파일이다. Dockerfile에 사용되는 명령어`FROM ` : 이미지의 기준이 되는 것을 정의`RUN ` : 현재 이미지 위의 새 레이어에서 모든 명령을 실행하고 결과를 커밋.`WORKDIR `: `RUN`, `CMD`, `ENTRYPOINT`, `COPY`, `ADD` 명령어에 대한 작업 디렉터리를 설정'`COPY `: ``..
전체 글

Docker 사용 시 마주할 용어docker image(이미지) : Docker 격리 정의 단위Dockerfile: Docker 격리 정의 서술 (Instruction)Docker Container(컨테이너): Docker 격리 동작 단위 = 격리된 공간에서 실행중인 Docker 이미지Docker Engine(= API + CLI + Docker Deamon) : Docker 이미지를 구동 및 관리하기 위한 엔진Docker Engine 위에 이미지를 올리고 Run 구동 시 독립적인 Docker Container 실행Host 호스트 = Node 노드 = Instance 인스턴스 = Server 서버: Docker Engine 구동Host는 다수의 Container를 갖는다.Node는 다수의 Containe..

CacheImprove your build speed with effective use of the build cachedocs.docker.com Docker Image 는 매 Instruction 마다 layer로 구성되며 이 중간 과정을 Cache해 놓는다. How the Build Cache works도커 빌드 캐시를 이해하면 더 빠른 이미지를 생성하는 도커 파일을 작성할 수 있다. 아래 예시는 C 언어로 작성된 작은 도커 파일이다.# syntax=docker/dockerfile:1FROM ubuntu:latestRUN apt-get update && apt-get install -y build-essentialsCOPY main.c Makefile /src/WORKDIR /src/RUN make..

CD: AWS EC2 생성 후 내부 접속하여 CI 로 만든 Docker 이미지 실행개발자 대신 Github Action이 직접 EC2에 접근하여 도커 이미지를 컨테이너로 실행아래 과정을 거쳐서 Github Action을 자동화 해줘야한다.1. github action 에게 접근하고 조작할 수 있는 권한주기 -> IAM 을 통해서 부여2. github action 이 EC2 서버에 들어가기 위한 방화벽 설정3. EC2 shell 에 접근하기 위해 key pair 사용하지 않고 IAM 으로 접근해서 image pull, run 자동화1. AWS IAM 설정: Github Actions 가 EC2 에 접근할 계정 생성IAM: AWS 서비스에 대한 접근 권한을 가진 사용자를 생성하는 서비스Github Acti..

문제Docker 이미지를 github action에서 생성 후 자동으로 Docker Hub에 올리도록 자동화를 하였다.그리고 Ec2에서 이미지를 pull하려니까 접근 권한 거부 에러가 떳다. 해결`/var/run/docker.sock` 에 권한을 부여해주면된다.sudo chmod 666 /var/run/docker.sock 이미지가 잘 받아와지는걸 확인할 수 있다.

Docker 격리 정의 시 : 단일 / 다중 이미지 정의하나의 OS 위 다양한 컨테이너를 조합하여 어플리케이션 구동 가능어플리케이션 = 컨테이너 조합 (컨테이너는 격리된 공간에서 프로세스가 동작하는 기술)단일 컨테이너 어플리케이션 관리: Dockerfile 통한 단일 이미지 구성 및 구동다중 컨테이너 어플리케이션 관리: Docker-Compose 통한 다수 이미지 구성 및 구동Docker Compose 내 다중 컨테이너 사이에서의 network 도커 안에서 컨테이너끼리 network 통신하기 위해 (1) User-defined Bridge, (2) Hostname 2가지가 있음. docker-compose.yml 파일 내 `ports:` 옵션만 준 경우 Spring 에서 MySQL 사용시 어떤 포트 사용..

Docker 왜 사용하는가?1. 일관성 보장2. 다중 컨테이너 지원1. 일관성 보장어플리케이션이 어떤 머신에서도 정상 및 동일 동작하기 위해서는 어플리케이션이 구동되는데 필요한 모든 것들이 아래의 환경과 버전 등이 맞아야한다. -> 이를 일관성이라고 한다.Application 파일환경 변수런타임 환경, 버전서드파티 라이브러리Cut down OS 격리 (Isolation) & 일관성 (Consistency)격리 : 로컬(인스턴스)의 환경과 분리된 도커 환경으로 로컬 환경을 오염 / 충돌하지 않음일관성 : 다양한 로컬(인스턴스)에서도 도커로 일관된 어플리케이션 구동 가능도커가 없다면 로컬(인스턴스)의 환경과 + App 구동을 위한 환경이 충돌하고 이리저리 섞인다.도커가 있다면 로컬(인스턴스)의 환경과 + A..

충돌난 상황featrue/signup-test-api 브랜치에서 로컬에서 작업후 커밋remot에서 featrue/signup-test-api 브랜치의 내용이 변경이후 로컬에서 pull을 하려니까 위 사진과 같이 pull이 되지 않았다. 새로운 커밋을 남기지 않고 pull 할 수 있는 방법인 `rebase` 를 사용해서 문제 해결. 해결 과정git pull 에서 에러가 난 브랜치에서 아래 명령어 실행해서 원격에 수정된 최신 코드를 로컬의 `ref/remotes/origin/{branch_name}`에 받아온다.git fetch 아래 명령을 실행해서 원격 코드 위에 다시 로컬 코드들을 순서대로 쌓는다(커밋)git rebase origin/{branch_name}

pinary[i] = i 자리 이친수를 만들 수 있는 경우의 수pinary[i]는 i-1 자리 이친수 패턴을 그대로 적용할 수 있다.그리고 위 사진을 잘 보면 i 자리 이친수는 i-2 자리 이친수 패턴이 적용된 i -1 자리 이친수에 2가지 경우 (0, 1)가 가능하다. 예를 들어서 i = 5 라고 하면,10000, 1000110101, 10100빨간색으로 칠한 부분이 i = 3 자리인 이친수이다.pinary[i] 는 pinary[i-1]의 경우의 수를 그대로 가져가고, 추가로 pinary[i-2]의 경우의 수가 추가된다. 결국 pinary[i] = pinary[i-1] + pinary[i-2] 가 성립