목록DevOps/docker (24)
나의 잡다한 노트 및 메모
컨테이너 이미지를 저장하고 배포하기 위해 Registry와 Repository를 사용한다. Registry는 도커 이미지를 저장하는 서버이다. Repository는 레지스트리 내에서 특정 이미지의 버전들을 관리하는 단위이다. 각 레포지토리는 여러 버전(태그)을 저장한다. 예를 들어, nginx 라는 레포지토리 안에는 nginx:latest, nginx:1.19, nginx:1.18 등과 같은 여러 버전의 이미지가 있을 수 있다. Registry에는 하나 이상의 Docker Repository를 포함할 수 있다. 이미지를 저장하고 관리하며, 이미지의 push 및 pull 요청을 처리한다. Docker hub가 유명한 공용 Registry이다. 우리가 도커 명령어로 pull을 해올 때 여기서 이미지를 다운받..
docker를 자주 사용하다보니 dangling image들이 존재한다.dangling은 none:none 처럼 이름도 태그도 달려있지 않은 이미지이다.이게 생기는 원인은 이미지 빌드를 하는데 기존 이미지 이름과 태그가 동일할 경우, 기존 이미지가 이렇게 바뀌게 된다. 쓰지 않으므로 삭제하면 된다. docker images를 통해 확인할 수 있다.(만약 none 으로 된 image들이 있다면)docker image prune 를 해주자. 이렇게 되면 가동중인 컨테이너의 이미지를 제외하고 안쓰이는 것들을 삭제할 수 있다.docker images -f "dangling=true" 로 none들이 어떤게 있는지 확인할 수 있다. dangling 이미지들을 정리해도 용량이 크게 확보되지 않을 수 있다.docke..
먼저, swarm 실습을 위해서는 여러 호스트가 필요하다. vm을 사용하는 방법도 있고, 하나의 컴퓨터만 사용해야한다면 docker in docker(DinD)라는 이미지가 있는데 도커 컨테이너안에서 컨테이너를 또 만드는 방식을 통해 여러 호스트를 만든 것처럼 할 수 있다. 나는 aws도 연습할 겸 Auto scaling을 활용하여 3개의 인스턴스를 만들고 보안그룹으로 포트를 열어놓은 뒤 실습을 진행하였다. swarm 관련해서 열어두어야 할 포트는 2377, 7947, 4789 포트이다. 3개의 인스턴스가 같은 vpc에 있고 같은 서브넷에 있으므로 내부ip를 통하여 연결하였다. swarm에는 매니저노드, 워커노드가 존재한다. 매니저노드의 역할은 worker 노드들을 관리하는 역할이다.좀 더 정확히 말하..
docker 네트워크는 컨테이너가 서로 통신하고, 외부 네트워크와 통신할 수 있는 방법을 제공한다. 여러 네트워크 유형이 존재한다. - bridge 기본적인 도커 컨테이너의 네트워크이다. 도커 호스트와 컨테이너 간의 사설 내부 네트워크를 제공하며, 컨테이너가 서로 통신할 수 있게 해준다. NAT를 활용해 호스트 IP를 가지고 외부와 통신할 수도 있다. - none 이걸 사용하면 컨테이너에는 네트워크가 존재하지 않게 된다. - host 컨테이너가 호스트의 네트워크 스택을 직접 사용할 수 있게 된다. 따라서 호스트의 IP 주소와 포트번호를 사용할 수 있고 네트워크 환경을 공유한다. - overlay 다중 호스트에서 실행되는 컨테이너의 경우에 자주 사용된다고 한다. 연관된 개념이 docker swarm과 오케..
네트워크 실습에서 Dockerfile로 이미지를 빌드하는 것을 해야한다. 그래서 관련 내용을 정리해서 포스팅하려한다. 금방 까먹을 것 같다. Dockerfile Docker 이미지를 빌드하기 위한 설정파일. 즉, 이미지를 만드는 스크립트(설정파일)이다. 여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 나열된 명령문을 차례대로 수행하여 이미지를 생성한다. 장점에 대해 찾아보니... - 장점 1. 이미지가 어떻게 만들어졌는지를 기록한다. 개발자라면 이미지가 설치 되기 위한 과정은 어떤지, 중간에 어떤 과정을 수정해야하는지를 알아야 하는 경우가 있다. 2. 배포에 용이하다. 이미지는 몇 기가씩 할 수 있는데 그걸 배포하기보다는 그 이미지를 만들 수 있는 Dockerfile만 배포한다면 매우 ..
# Docker port mapping이 필요한 이유 docker 컨테이너 내의 application과 외부와 통신하기 위해 필요하다. 컨테이너는 기본적으로 격리된 환경에서 실행되기 때문에 외부와 소통하기 위해선 안쓰는 특정 포트를 매핑해야 외부와 통신이 된다. 수업에서 배웠던 것처럼 8080포트를 80포트와 맵핑시키면 외부에서 8080포트를 이용해 들어온 데이터들이 docker 컨테이너 내부에서 80포트로 바꿔주고 nginx 서버는 80포트에 온 데이터를 받아 처리하고 응답을 보내는 과정이 생기고 응답을 보낼땐 8080포트를 이용해 사용자에게 전달된다. # volume mapping이 필요한 이유 volume mapping이라는 개념이 잘 이해되지 않아 살펴보니 컨테이너의 파일 시스템과 호스트의 파일 ..
이 글은 계속 수정해 나갈듯 합니다. 틀리다면 지적 부탁드립니다. 도커파일 : 서버의 소프트웨어 구성, 환경설정 정보들을 코드로 바꿔놓은 파일 이미지: 도커파일을 빌드해서 생긴 결과물. 서버에 관한 설정들과 프로그램들이 패키지처럼 한 번에 포장된 것. 도커허브 사이트를 가면 여러 이미지가 있어서 그곳에서 편하게 관련 이미지들을 pull 할 수 있다. 쉽게 생각해서 템플릿 이라고 생각하면 된다. 컨테이너 : 이미지를 실행시킨 격리된 프로세스. 이미지가 클래스 같은 개념이고 컨테이너는 클래스의 인스턴스 같은 느낌이라고 생각하자. docker image : 로컬에 저장된 docker 이미지 목록을 보여준다 docker pull [image-name] : 원격 레지스트리(Docker hub)에서 이미지를 다운로..
조교님께서 요새 도커같은 가상화는 꼭 알고 있어야한다고 말씀하셔서 왜 굳이 도커를 써야하는지 궁금증이 생겼다. 그래서 웹서핑을 하던 도중 좋은 글을 봤고 실무에서 어떤 느낌으로 도커가 쓰이는지 이해하게 됐다. https://www.44bits.io/ko/post/why-should-i-use-docker-container 나와 같은 궁금증이 있으시다면 보시면 좋을 것 같다. 글을 읽고 도커를 쓰는 이유를 정리해보았다. 실무를 하다보면 여러 서버가 만들어지다보니 눈송이 서버들이 생긴다. 똑같은 일을 목적으로 만들었어도 사소하게 다른 부분들이 생기면 스노우볼이 굴러가서 A 서버에선 잘 돌아가는게 B 서버에선 안돌아가게 되는 미치고 팔짝 뛸 노릇이 생긴다고 한다. 이런 문제를 해결하기 위해 A 서버를 도커파일..