Docker 29

[Docker] 4-2. 컨테이너 실행

docker container run : 컨테이너를 생성하고 실행하는 커맨드 docker image pull docker container create docker container start위 3가지 기능을 하나로 합친 것과 같다. 이미지를 pull 하지 않았다면 이미지를 pull하고 나서 이후의 작업을 진행한다. 주요 옵션 옵션 형식 내용 --name 컨테이너이름 컨테이너 이름 지정 -p 호스트port번호:컨테이너port번호 컨테이너의 port 번호를 호스트의 port 번호로 지정 -v 호스트저장위치:컨테이너저장위치 볼륨을 mount --net=네트워크이름 컨테이너를 정해놓은 네트워크에 연결 -e 환경변수이름=값 컨테이너에 필요한 환경변수의 값을 설정 -d 백그라운드로 실행하도록 설정 -i 표준 입력..

Docker 2023.05.20

[Docker] 4-1. 컨테이너 실행

도커에서 정의한 커맨드 라인 명령어들 명령어 큰 구조 docker 상위 커맨드 하위 커맨드 옵션 ex) docker container exec -it ~~ docker container run vs docker run의 차이점 도커 1.13부터 커맨트가 재편되면서 상위 커맨드와 하위 커맨드의 조합 형태로 일원화되었다. 이전에는 docker run이라고만 입력해야 했지만 상위 커맨드 + 하위 커맨드 형식으로 수정되면서 docker container run으로 입력해도 똑같은 기능을 수행한다. 즉, docker run이 이전 버전의 커맨드 이고 docker container run이 최신 버전의 커맨드이다. 물론, 이전 버전과의 호환성을 유지하기 위해서 이전 버전의 커맨드도 실행가능하지만 최신 버전의 커맨드..

Docker 2023.05.20

[Docker] 2-3. 도커 컨테이너의 생애주기와 데이터 저장

일회용품 도커 컨테이너 컨테이너는 쉽게 만들 수 있다. 그래서 컨테이너 하나를 업데이트하면서 계속 사용하는 것 보다는 업데이트된 SW가 들어있는 새로운 컨테이너를 사용하는 게 더 좋다. 즉, 새 버전이 나오면 새 컨테이너로 갈아타면 된다. 컨테이너는 일반적으로 여려 개가 동시에 동작하는 상황이 많이 나타난다. 이러한 여러 개의 컨테이너를 일일이 업데이트하고 유지보수 할 때 마다 많은 수고가 필요하다. 때문에 오래된 컨테이너를 버리고 새로운 이미지로 부터 새로운 컨테이너를 만들어 갈아타는 방식을 사용한다. 이와 같이 컨테이너를 만들고(create), 실행하고(run & start), 종료하고(stop), 폐기한(remove)한 다음 컨테이너를 다시 만드는 일련의 과정을 컨테이너의 생명 주기(LifeCycl..

Docker 2023.05.18

[Docker] 2-2. 도커 허브, 이미지, 컨테이너

이미지와 컨테이너 컨테이너를 생성하기 위해서는 이미지가 필요하다. 이미지: 컨테이너를 만들어내는 설계도 로봇을 원하는 아이에게 로봇을 만들어내는 틀은 아무 소용이 없다. 마찬가지로 이미지 역시 이미지 자체로는 쓸모가 없다. 이미지를 가지고 만들어낸 컨테이너가 중요하다. 때문에 실제로 사용하는 건 컨테이너이다. 이미지를 그대로 쓸 일은 없다. 그래서 하나의 이미지를 가지고 여러 개의 컨테이너를 만들어낼 수도 있다. 컨테이너로 이미지 만드는 것도 가능 컨테이너로 이미지를 만들 경우 어떤 장점이 있을까. 컨테이너로 이미지를 만든다는 건 이미 만들어낸 컨테이너를 수정해서 새로운 이미지를 만드는 과정이다. 그렇게 새로운 이미지를 만들어내면 수정된 컨테이너를 여러 개 만들 수 있다. 도커 엔진 간에 이동 가능 여기..

Docker 2023.05.17

[Docker] 2-1. 도커의 동작 원리

도커의 구조에 대해 좀 더 자세히 살펴보자. 일반적으로 도커와 컨테이너는 서버에서 사용된다. 간단하게 말하면 서버 컴퓨터의 OS가 Linux일 때 Linux 위에 도커 엔진을 설치하고 도커 엔진 위에 컨테이너를 위치시키는 구조로 이뤄져 있다. 컨테이너 안에는 OS 비슷한 것이 들어있음 컨테이너는 어떤 구조를 갖고 있을까 모든 컨테이너에는 Linux 운영체제 비슷한 무언가가 들어있다. 비슷한 무언가라고 말하는 이유는 진짜 OS가 아니기 때문이다. 아예 비어있는 컨테이너를 만들어서 원하는 구성을 할 수도 있지만 이는 좀 더 숙련된 다음에 진행하도록 하자. 도커 엔진 아래 & 컨테이너 내부에 Linux 운영체제 비슷한 것이 있다. 이 점이 도커의 가장 큰 특징 중 하나다. 원래 OS는 커널(kernel)과 커..

Docker 2023.05.17

[Docker] 1-2. 서버와 도커

도커와 연관되는 부분을 중심으로 서버가 무엇인지 알아보자. 서버의 두 가지 의미 도커는 서버에서 사용하는 것이 주 목적인 SW이다. 때문에 서버에 대한 기본적인 지식은 알고 있어야 한다. 서버란 무엇인가? 단어 그대로 해석하면 어떤 서비스(service)를 제공(serve)하는 것을 말한다. 개발 현장에서는 서버라는 용어를 1) 기능적 의미의 서버 2) 물리적 컴퓨터로서의 서버 이 두 가지를 의미한다. 기능적 의미의 서버 흔히 얘기하는 '웹 서버에 올려줘', '메일 서버가 죽었어'에서 말하는 서버는 기능적 의미의 서버를 가리킨다. 웹 서버는 웹 기능을 제공하는 서버이고 메일 서버는 메일 기능을 제공하는 서버이다. 물리적 컴퓨터로서의 서버 = 어딘가에 실제로 존재하는 컴퓨터 서..

Docker 2023.05.16

[Docker] 1-1. 도커란 무엇인가

1. 도커란 무엇인가 도커란? 한마디로 정의하면 데이터 또는 프로그램을 격리시키는 기능을 제공하는 SW 이 기능은 주로 서버에서 사용된다. 마치 개인용 컴퓨터에서 여러 가지 프로그램이 동작하듯 서버에서도 여러 가지 SW들이 함께 동작한다. 도커는 이렇게 다양한 프로그램과 데이터를 각각 독립된 환경으로 격리하는 기능을 제공한다. 뿐만 아니라 다른 사람들에게 똑같은 작업 환경을 전달하는 기능도 제공한다. 컨테이너와 도커 엔진 개인용 컴퓨터 또는 서버 상의 환경을 마치 코스트코에서 판매하는 조립형 창고 같은 작은 방으로 분할한다고 생각해보자. 그 창고에 데이터나 프로그램을 둔다. 이때, 조립형 창고를 컨테이너(container)라고 하고 이러한 컨테이너들을 다루는 기능을 제공하는 SW가 도커(Docker)이다..

Docker 2023.05.15

[Docker Error] Bind for 0.0.0.0:8080 failed: port is already allocated

도커 컨테이너를 시작(docker start / docker restart) 할 때 마다 항상 마주한 문제였다. 문제의 이유는 해석 그대로다. 내가 사용하려는 포트가 이미 할당되어 있다는 것 이전에는 이미 사용하고 있던 포트들을 일일이 kill 하는 방식으로 문제를 해결했었지만 그때만 해결될 뿐 다음날 또 도커 컨테이너를 시작할 때 똑같은 문제가 발생해서 항상 귀찮았다. 다행히 좀 더 근본적인 문제의 원인과 해결책을 정리해놓은 사이트를 찾았다. 생각해보면 당연한 얘기였다. 문제의 원인 이미 host machine에서 사용하고 있던 포트를 컨테이너에서 사용하려고 할 때 발생하는 문제 예를 들면, 이미 다른 컨테이너가 8080 포트를 사용하고 있기 때문에 새로 시작하려는 컨테이너가 8080 포트를 사용하지 ..

Docker 2023.05.04

Docker 작업 순서

Dockerfile을 설정한다. (Dockerfile은 docker의 이미지 설정 파일이다) 작성한 Dockerfile을 바탕으로 이미지를 생성한다. (docker build ) 생성한 이미지로 컨테이너를 생성하고 실행한다. (docker run) 이후에는 원하는 대로 컨테이너를 시작(start 또는 restart)하거나 접근(attach, exec)하면서 이용한다. 물론 각 단계에서 명령어, 옵션을 어떻게 사용하고 Dockefile에서 어떤 설정을 통해 이미지를 생성했는지에 따라 다르지만 교재들이 보여주는 큰 틀은 위와 비슷한 것 같다.

Docker 2023.04.18