Docker 29

[Docker] 7-3. 도커 컴포즈 파일 내용

도커 컴포즈 공식문서 도커 컴포즈 정의 파일 내용 살펴보기 도커 컴포즈는 정의 파일을 그대로 실행하기 때문에 컴포즈 파일(docker-compose.yml)이 반드시 필요하다. 작성방법은 간단하다. ex) 아파치 컨테이너의 컴포즈 파일 version: "3" services: apa000ex2: # 컨테이너 이름 image: httpd # 사용할 이미지 ports: - 8080:80 # 매핑할 포트 (호스트포트:컨테이너포트) restart: always # 위에 있는 컴포즈 파일은 아래의 명령어랑 동일한 의미를 갖는다. docker run --name apa000ex2 -d -p 8080:80 httpd # 여기서 detach 모드는 docker-compose up을 실행할 때 옵션으로 -d를 붙여주면 ..

Docker 2023.05.30

[Docker] 7-2. 도커 컴포즈 설치 및 사용법

도커 컴포즈 공식문서 도커 컴포즈 설치 도커 컴포즈는 별도로 설치해야 하는 SW다. 하지만, 도커 컴포즈의 사용법은 도커 엔진과 큰 차이가 없어서 별개의 SW라는 점을 신경쓰지 않아도 된다. 커맨드만 다를 뿐 거의 같은 SW나 마찬가지다. cf) Windows, macOS에서 사용하는 도커 데스크톱은 도커 컴포즈가 함께 설치되어 있어서 따로 설치할 필요는 없다. Linux에서는 도커 컴포즈, python3, python3-pip 패키지를 설치해줘야 한다. 도커 컴포즈는 파이썬으로 작성한 프로그램이기 때문이다. sudo apt install -y python3 python3-pip sudo pip3 install docker-compose 도커 컴포즈 사용법 도커 컴포즈를 사용하려면 Dockerfile 스..

Docker 2023.05.30

[Docker] 7-1. 도커 컴포즈란?

간단하게 도커 컴포즈에 대해서 살펴보겠다. 도커 컴포즈는 도커 명령어를 정의 파일에 기술해 실행하는 도구다. Dockerfile과 비슷한데, 어떤 차이점이 있는지도 살펴보자. 도커 컴포즈 공식문서 도커 컴포즈란? 워드프레스처럼 여러 개의 컨테이너로 구성된 시스템을 실행하고 싶을 때 일일이 명령어를 입력하면서 실행하는 건 꽤나 귀찮은 일이다. 인자, 옵션 뿐만 아니라 볼륨, 네트워크 까지 설정해줘야 하기 때문이다. 뿐만 아니라 컨테이너들을 삭제할 때 마다 일일이 확인해가며 지우는 것도 귀찮다. 이렇듯 시스템 구축과 관련된 명령어를 하나의 텍스트 파일에 기재해서 명령어 한번에 시스템 전체를 실행 ⇒ 종료 ⇒ 폐기까지 한번에 하도록 도와주는 도구가 도커 컴포즈이다. 도커 컴포즈의 구조 도커 컴포즈는 시스템 구..

Docker 2023.05.30

[Docker] 6-6 도커 허브 등록 및 로그인

이번에는 다른 사람에게 이미지를 공유하는 방법에 대해 알아본다. 이미지를 내려받는 곳 지금까지 내려받았던 이미지는 도커 허브에 저장된 것이다. 만약 직접 만든 이미지를 다른 사람들에게 공유하고 싶다면 도커 허브에 이미지를 올리면 된다. 또는 비공개로 사용하는 도커 허브 같은 장소도 만들 수 있다. 도커 허브와 도커 레지스트리 도커 레지스트리란 이미지를 배포하는 장소를 의미한다. 공개/비공개 여부와 상관없이 이미지가 배포되는 곳은 모두 도커 레지스트리이다. 도커 레지스트리는 기업이나 개인도 운영할 수 있으므로 전 세계적으로 많은 도커 레지스트리가 존재한다. 다만, 외부에 공개되어 있지 않다면 도커 레지스트리에 접속할 수 없기 때문에 거기에 있는 이미지를 사용할 수 없다. 도커 허브는 Docker 제작사에서..

Docker 2023.05.29

[Docker] 6-5. 컨테이너 개조

컨테이너 개조란? 도커를 실제로 사용하는 현장에서는 사내에서 개발한 시스템을 운영하는 경우가 많다. 또는 공식 배포되는 SW를 수정해야 할 필요가 종종 있다. 대단한 수정은 아니지만 설정 파일을 매번 작성하기는 귀찮기 때문이다. 컨테이너 개조하는 방법 2가지 방법이 있다. 대부분 이 2가지 방법을 같이 사용한다. 1) 이전에 다뤘던 파일복사와 마운트를 이용한 방법 2) 컨테이너에서 Linux 명령어를 실행하는 방법. SW를 설치하거나 설정을 변경할 수 있다. 컨테이너에서 명령어를 실행할 때 shell이 필요하다 컨테이너에서 리눅스 명령어를 실행하려면 리눅스에서 사용자의 명령을 전달해주는 프로그램인 shell이 있어야 한다. 여러 가지 shell이 있지만 가장 일반적으로 사용되는 bash를 기준으로 살펴볼..

Docker 2023.05.29

[Docker] 6-4. 컨테이너로 이미지 만들기

이번 절에서는 컨테이너로 이미지를 만드는 방법에 대해 살펴본다. 이 방법은 컨테이너를 다른 환경에서 복제하기 위해 사용되며 서버 엔지니어에게는 필수적이다. 컨테이너를 이미지로 만드는 방법 지금까지는 공식적으로 제공되는 이미지만을 사용했다. 하지만, 이미 존재하는 컨테이너를 이용하면 누구나 쉽게 이미지를 만들 수 있다.(이미지를 처음부터 만드는 건 어렵다) 컨테이너를 가지고 나만의 이미지를 만들어서 똑같은 구성의 컨테이너를 대량으로 만들 수 있고 그렇게 만들어낸 컨테이너들을 다른 컴퓨터 또는 서버에 이동시킬 수도 있다. 이동시킨다는 의미는... 실제로 컨테이너를 다른 컴퓨터 또는 서버에 복사한다기보다는 원하는 컨테이너를 이미지로 바꾸고 그 이미지를 가지고 컨테이너를 만드는 걸 '이동한다'라고..

Docker 2023.05.28

[Docker] 6-3. 볼륨 마운트

이번에는 마운트에 대해 정리한다. 볼륨(volume)을 마운트(mount)하면 컨테이너의 일부를 호스트 컴퓨터의 일부와 같이 다룰 수 있어서 편리하다. 차근차근 알아보자. 볼륨과 마운트 볼륨 : 스토리지의 한 영역을 분할한 것. 간단히 말하면 하드디스크나 SSD를 분할한 하나의 영역. 마운트 : 연결하다라는 의미로 대상을 연결해서 OS 또는 SW 관리하에 두는 일을 의미. USB를 컴퓨터에 꽂는 걸 생각하면 된다. 컨테이너를 사용하려면 스토리지 영역을 마운트해야 한다. 왜냐하면 필요한 데이터가 해당 스토리지에 있기 때문이다. 컨테이너는 사용되고 나서 삭제되는 일이 많기 때문에 컨테이너 안에 데이터가 있다면 컨테이너가 삭제되면서 데이터도 함께 사라진다. 그래서 컨테이너의 외부에데이터를 저장해놔야 한다. 다..

Docker 2023.05.28

[Docker] 6-2. 컨테이너와 호스트 간에 파일 복사

아주 기본적인 도커 사용법을 익혔다. 지금부터는 도커 사용법의 응용편에 들어간다. 나는 서버 엔지니어로 일할 것이기 때문에 도커를 깊게 공부해야 한다. 지금까지 알아본 입문서의 내용 뿐만 아니라 더욱 깊은 내용을 다룬 책이나 공식 참조문서를 읽어야 한다. 파일 복사 이번 절에서는 컨테이너와 호스트 사이에 파일을 복사하는 방법을 배워보도록 하자. 시스템은 프로그램 뿐만 아니라 프로그래밍 언어의 런타임, 웹 서버, 데이터베이스 등이 함께 구성되어 있다. 이러한 구성 요소는 시스템이 동작하는데 필요하지만 그 외에도 화면을 구성하는 이미지, 입력받은 데이터 본체 등이 있을 수 있다. ex) Wordpress ⇒ HTML, CSS 파일 등등 이러한 파일들은 wordpress 상의 조작을 통해 서버에 저장되지만 때..

Docker 2023.05.23

[Docker] 5-1. 실습 (워드프레스 & MySQL)

여러 개의 컨테이너를 다루는 연습을 위해서 워드프레스 사이트를 구축해 볼 것이다. 워드프레스는 워드프레스 컨테이너와 MySQL 컨테이너로 구성된다. 과정 1) 네트워크 생성 2) MySQL 컨테이너 생성 3) 워드프레스 컨테이너 생성 4) 컨테이너 및 네트워크 확인 5) 마무리 1. 네트워크 생성 wordpress000net1이라는 이름의 네트워크를 생성 PS C:\Users\PC> docker network create wordpress000net1 92da64ddd7a99e2f7fe07029a9650c14c85f6f86577c2ee12ae876d5afe87971 PS C:\Users\PC> docker network ls NETWORK ID NAME DRIVER SCOPE e2567159a4d0 br..

Docker 2023.05.22

[Docker] 4-4. 컨테이너의 통신

컨테이너와 통신할 때 웹 브라우저를 통해서 컨테이너에 접근하려면 외부와 접속하기 위한 설정이 필요하다. 이를 위해서 포트(port)를 설정한다. ex) 아파치(Apahce) ⇒ 서버에서 정해둔 포트(80번 포트)에서 웹 사이트에 접근을 기다리고 접근해오면 요청에 따라 웹 사이트의 페이지를 제공 하지만, 컨테이너 내부에서 실행 중인 아파치는 외부와 직접 연결되지 않았기 때문에 외부에서 접근할 수 없다. 그래서 컨테이너를 실행 중인 물리적 컴퓨터가 외부의 접근을 대신 받아 전달할 수 있도록 설정한다. 예를 들어, -p 8080:80과 같이 설정했다면 컨테이너를 실행중인 물리적 컴퓨터의 8080번 포트와 컨테이너의 80번 포트를 연결한 것이다. (물론, 이때, 8080번 포트는 다른 SW가 사용하는 포트와 겹..

Docker 2023.05.20