본문 바로가기

STUDY/Docker & Kubernetes: 실전 가이드 -2022년판

(17)
9. 환경변수와 빌드인수 환경변수와 빌드인수 > docker build --build-arg > docker run --env 도커 이미지 빌드는 Dockerfile에 따라서 이루어지고, 도커 컨테이너의 실행은 도커 이미지에 따라서 이루어진다. 그런데 상황에따른 약간의 유연함은 항상 필요하다. 같은 Dockerffile로 빌드하더라도 상황에 맞게 일부 빌드 내용을 바꾸거나, 같은 이미지로 컨테이너를 실행하더라도 일부 설정을 다르게 해야할 수 있다. 이때 사용할 수 있는것이 환경변수와 빌드인수이다. 환경변수 // server.js ... app.listen(80); ... 위 코드는 nodejs로 작성된 웹서버이다. 마지막에 app.listen(80) 코드를 통해 80번 포트로 요청을 받아서 동작한다는 것을 알 수 있다. 이 소스..
8. 도커 데이터 관리3: 볼륨 관리 읽기 전용 볼륨 > docker run --name feedback-app -p 3000:80 --rm -v ${pwd}:/app:ro -v /app/node_modules -v feedback:/app/feedback -v /app/temp feedback-app 개발상의 편의를 위해 컨테이너와 호스트를 바인드 마운트로 연결할 수 있다. 호스트에서 소스를 편집한 내용이 컨테이너에 바로 반영되므로 개발 속도가 빨라진다. 이 경우에 호스트의 변경내용만 컨테이너로 전달되면 충분하다. 반대로 컨테이너에서 소스가 수정되어 호스트에 반영되는것은 문제가 될 수 있다. 이때 사용할 수 있는게 읽기전용 볼륨이다. -v로 정의한 볼륨 뒤에 :ro를 붙여주면 된다. 그리고 읽기전용으로 정의된 경로 하위에 컨테이너에서 쓰기..
7. 도커 데이터 관리2: 익명 볼륨, 지명된 볼륨, 바인드 마운트 도커 볼륨의 종류 도커 볼륨은 익명볼륨, 지명된 볼륨, 바인드 마운트 볼륨 3가지가 존재한다. 익명 볼륨은 -v {컨테이너 폴더 경로} 옵션으로 컨테이너를 실행하면 만들어진다. 볼륨으로 지정된 컨테이너 경로에 파일이 저장하려고 하면 컨테이너가 아니라 연결된 로컬 파일시스템에 해당 파일이 저장된다. 도커가 컨테이너의 폴더와 로컬 폴더를 연결하기때문에 개발자는 로컬 폴더가 어디인지는 알 수 없다. 또 컨테이너가 사라지면 해당 익명볼륨도 함께 사라진다. 지명된 볼륨은 -v {볼륨 이름}:{컨테이너 폴더 경로} 옵션으로 컨테이너를 실행하면 만들어진다. 익명 볼륨과 마찬가지로 컨테이너의 폴더와 로컬 폴더가 맵핑되고 개발자는 자세한 로컬 폴더의 위치를 알 수 없다. 하지만 컨테이너를 삭제해도 볼륨은 삭제되지않기 때..
6. 도커 데이터 관리1: 데이터 종류와 볼륨 데이터의 종류 서비스를 운영할 때 사용하는 데이터는 3개로 구분할 수 있다. 먼저 어플리케이션 데이터는 어플리케이션의 소스파일이나 실행파일, 실행을 위해 필요한 패키지 파일, 환경 설정 파일 등 어플리케이션 실행에 필요한 데이터를 말한다. 이러한 데이터들은 빌드할 때 도커 이미지에 포함시키는 것이 일반적이다. 그리고 도커 이미지는 읽기전용이므로 빌드된 이후 변경되지 않는다. 즉 어플리케이션 데이터는 이미지에 읽기전용으로 저장된다. 다음으로 임시데이터는 어플리케이션이 실행되는동안만 사용되는 데이터를 말한다. 사용자의 요청을 처리하는 동안 만들어지는 임시 파일을 예로 들 수 있다. 이러한 데이터는 컨테이너의 메모리나 파일시스템에 저장되고 컨테이너가 종료되면 사라진다. 즉 임시데이터는 컨테이너에 저장되고 읽기..
5. Docker Hub로 이미지 push/pull, 사용하기 도커 이미지 공유하기 도커의 이미지에는 어플리케이션 파일과 시스템 설정, 도구, 패키지와 같은 실행에 필요한 모든 것이 갖추어져있는 소프트웨어 패키지이다. 만들어진 도커 이미지는 동료들이나 서버에 공유하여 사용한다. 이때 도커를 공유하는 방식은 두가지 생각해 볼 수 있다. 먼저 Dockerfile 소스를 공유하는 것이다. Dockerfile을 공유하고 이를 빌드하면 이미지가 만들어지기 때문에 이미지를 공유하는 것과 비슷한 효과이다. 하지만 Dockerfile을 빌드하는 과정이 추가적으로 필요하고, 빌드를 위해 필요한 로컬 파일이나 소스가 있다면 함께 공유해야한다는 단점이 있다. 그래서 두번째 방법인 도커 이미지를 공유하는 것이 일반적이다. 도커 이미지를 공유하면 빌드할 필요없이 바로 사용할 수 있고 부가..
4. Docker 이미지/컨테이너 관리하기2 docker rm, rmi > docker ps -a > docker rm {container_id} > docker rm {container_id1} {container_id2} {container_id3} .... > docker ps -a docker run 명령어는 새로 컨테이너를 만들면서 동작하기때문에 docker ps -a로 도커 컨테이너 리스트를 보면 많은 컨테이너가 존재하는걸 확인할 수 있다. 하지만 더이상 사용하지 않는 컨테이너가 계속 남아있는건 자원의 낭비이기 때문에 삭제해주어야 하고 이때 사용하는 명령어가 docker rm이다. docker rm은 컨테이너를 삭제하는 명령어인데, 실행중인 컨테이너는 삭제하지 못하기 때문에 실행중인 컨테이너도 지우고 싶으면 docker stop으로 먼저..
3. Docker 이미지/컨테이너 관리하기1 --help > docker --help ... ps List containers ... > docker ps 지금까지 docker run 으로 이미지를 컨테이너로 실행하고, 실행중인 컨테이너를 docker stop으로 중지시킨것처럼 docker에는 많은 명령어가 존재한다. 도커에는 수많은 명령어와 옵션이 존재하는데 이를 모두 외울수는 없다. 이때 쓸 수 있는것이 --help이다. --help를 명령어와 함께 실행하면 사용할 수 있는 명령어와 옵션을 알 수 있다. docker --help를 통해 컨테이러 리스트를 볼 수 있는 docker ps를 발견하고 실행하였다. > docker ps --help ... -a, --all Show all containers (default shows just runni..
2. Docker 이미지와 컨테이너: 이미지 빌드하기, 도커 이미지 주의사항, 도커 이미지 레이어 Dockerfile과 이미지, 컨테이너 앞에서 도커 컨테이너란 어플리케이션 실행파일과 실행에 필요한 시스템 설정, 도구, 패키지를 모두 포함하고 있는 소프트웨어 유닛이라고 말했었다. 이러한 도커 컨테이너를 만들기 위해서는 여러 과정을 거쳐야 한다. 먼저 Dockerfile을 만들어야 한다. Dockerfile은 필요한 리눅스 환경을 만들기 위해 필요한 파일이나 명령어가 정의되어있는 설계서이다. 설계서인 Dockerfile을 빌드하면 도커 이미지가 만들어진다. 도커 이미지는 리눅스 환경에서 동작할 어플리케이션 실행파일과 실행에 필요한 시스템 설정, 도구, 패키지의 묶음 파일이다. 마지막으로 파일 상태인 도커 이미지를 자원을 할당하여 실행시킨것이 컨테이너이다. NodeJS 앱을 도커로 띄워보자 도커로 Nod..