We will find a way, we always have.

-interstellar

DevOps/도커 11

[도커] 바인드 마운트(Bind Mounts)

도커 이미지가 생성될 때, 이들 폴더의 스냅샷만 복사하기 때문에 생성된 후 html 파일을 변경하여도 이미지나 컨테이너에 변경사항이 반영이 되지 않는다. 이는 개발에 있어 치명적이다. 새로운 변경사항이 생겼을 때 항상 모든 것을 다시 시작해야하기 때문이다. 이런 문제점을 해결해주는 것이 바로 바인드 마운트이다. 소스 코드를 바인드 마운트에 넣으면 컨테이너는 이를 인식하여소스 코드를 실제로 스냅샷에서 복사하는 것이 아니라 바인딩 마운트에 복사한다. 그래서 컨테이너는 항상 최신 코드를 엑세스 할 수 있게 된다. 바인드 마운트는 영구적이고 편집 가능한 데이터에 적합하다. 볼륨은 영구적이긴 하지만 호스트 머신에서의 저장 위치를 모르기에 편집은 불가능하다. 바인드 마운트 실행은 터미널에서 가능하다. 이렇게 절대 ..

DevOps/도커 2022.09.02

[도커] 볼륨

도커에는 볼륨이라는 내장 기능이 있는데 이는 데이터를 유지하도록 돕는다. 볼륨은 컨테이너가 종료된 경우에도 지속되며 계속 존재하는데, 만약 컨테이너에 볼륨을 추가하면 컨테이너가 종료되어도 볼륨에 데이터가 남는다. 볼륨은 호스트머신의 폴더인데 도커 컨테이너 내부의 폴더에 매핑된다. 도커의 COPY는 복사시킬 경로와 파일의 스냅샷을 갖고 이것들을 이미지에 복사하는게 전부이며 일회성 스냅샷일 뿐이다. 컨테이너 내부의 폴더를 호스트 머신 상의 컨테이너 외부 폴더와 연결시킬 수 있다. 그렇다면 이 두폴더의 변경사항은 다른 폴더에 반영되는데, 만약 호스트 머신에 파일을 추가한다면 컨테이너 내부에서 액세스할 수 있고 컨테이너가 매핑된 경로에 파일을 추가하면 컨테이너 외부, 즉 호스트 머신에서도 사용할 수 있다. 볼륨..

DevOps/도커 2022.09.02

[도커] 데이터의 종류

Data?!! 데이터의 종류는 크게 세가지로 나눌 수 있다. Application Temporary App Data Permanent App Data 1번째 Application은 코드나 환경을 의미한다. 개발자가 작성한 코드, 이미지, 빌드한 컨테이너가 여기에 포함되고 이것들은 Read-Only 상태로 이미지에 저장된다. 2번은 임시적인 데이터인데 인풋 박스에 사용자가 입력중인 데이터가 여기에 포함된다. 이 데이터는 읽고 쓰기가 가능하다. 컨테이너에 저장된다. 마지막 3번째는 영구적인 데이터인데 사용자의 계정같은 데이터가 여기에 속한다. 읽고 쓰기가 가능하고 영구적이며 컨테이너와 볼륨에 저장된다. 위와 같은 도커 파일을 생성하고 (도커 파일 제외한 소스코드는 강의에서 제공되었음) 터미널에 다음과 같이 ..

DevOps/도커 2022.08.26

[도커] 파일 복사와 이름 지정

도커로 파일을 복사하려면 다음과 같은 명령어를 입력한다. docker ps docker cp [폴더명]/. [name]:/[파일명] 파일명은 ps 를 통해 얻을 수 있다. 그리고 카피할 파일은 로컬 파일 안에 있어야만 한다. 컨테이너를 실행시키면 자동으로 이름이 할당되는데 (like 직박구리) 이 이름을 지정하려면 다음과 같은 명령어를 사용하면 된다. docker run -p 3000:80 -d --rm --name [NAME] [ID] 이제 실행시키고 중지시킬 때 조금 수월해졌다. 도커 파일은 name:tag 형식으로 되어있는데 tag 부분에 버전등을 지정할 수 있다. FROM node:12 # node 버전 12 docker build -t [NAME]:[TAG] 이런식으로 태그를 지정할 수도 있다.

DevOps/도커 2022.08.19

[도커] 이미지 검사

생성한 이미지를 이제 확인해보자 docker images 해당 명령어 입력시 이미지ID, 사이즈 등등 이미지에 대한 정보가 출력된다. 이제 이런 이미지들의 정보를 파악하고 싶다면 아래의 명령어를 사용해주면 된다. docker image inspect [IMAGE ID] 도커의 버전, 사용중인 운영체제, 풀ID 등, 쌓인 레이어 등등 이미지가 어떻게 구성되어 있는지 확인할 수 있다.

DevOps/도커 2022.08.17

[도커] 이미지 & 컨테이너 삭제

docker ps -a 하면 많은 컨테이너가 뜰 것이다. 이제 이것들이 나타자니 않게 깔끔히 지워보자. docker images 를 통해 설치된 이미지를 확인하고 docker rmi [IMAGE ID] 를 통해 삭제한다. 실행되고 있는 이미지는 삭제할 수 없다. 만약 실행되고 있지 않은 이미지를 전부 지우고 싶다면 docker image prune 을 사용하면 된다. 공백으로 여러 아이디를 동시에 입력하여 지울 수 있다. 추가로 --rm을 사용하여 컨테이너가 중지되면 자동으로 제거할 수도 있다. 매우 유용하니 자주 사용하길 docker run -p 3000:80 -d --rm [IMAGE ID]

DevOps/도커 2022.08.12

[도커] 파이썬과 인터렉티브

도커와 파이썬을 연결해보는 실습을 하였다. 그동안 노드로만 하다가 파이썬을 보니 매일 중국어 듣다가 한국어 들은 것처럼 매우 기뻤다...ㅎ from random import randint min_ = int(input('please enter min ')) max_ = int(input('please enter max ')) if (max_ < min_): print('Invalind input - shuttind down') else: rnd_num = randint(min_, max_) print(rnd_num) 이제 파이썬을 도커화해보자. FROM python WORKDIR /app COPY . /app CMD ["python", "rng.py"] 도커 터미널에서 이미지 빌드하고 컨테이너를 실행시킨..

DevOps/도커 2022.08.12

[도커] Attached 모드 & Detached 모드

docker --help - 사용가능한 명령어들을 설명해줌 docker ps - 현재 실행중인 컨테이너 리스트를 확인할 수 있음 docker ps -a - 더 이상 실행되지 않는 중지된 컨테이너 포함하여 보여줌 docker start [컨테이너 name] - 중지된 즉 더이상 실행되지 않은 컨테이너 다시 실행시킴. 변경사항이 없어 다시 이미지부터 빌드할 필요가 없을 때 ps -a을 사용해 이름 찾아 사용 run과 다르게 터미널에서 우리를 차단하지는 않음 start로 시작하는 경우 Detached 모드 디폴트 (터미널 차단 X) run으로 시작하는 경우 Attached 모드 디폴트 (터미널 차단 O) 터미널이 차단됐다는 이야기는 지들이 할말이 있다는 얘기 name 앞에 -d 를 붙여 Detached 모드로..

DevOps/도커 2022.08.12

[도커] 이미지와 컨테이너

이미지는 읽기/쓰기 엑세스 권한이 있는 인스턴스를 실행하는 컨테이너의 "블루프린트"이다. 이미지를 통해 컨테이너가 서로 독립적으로 존재함과 동시에 동일한 이미지를 기반으로 할 수 있다. 컨테이너는 이미지를 기반으로 하는 격리된 소프트웨어 유닛이다. 이미지의 실행중인 인스턴스이다. 도커 실습 코드 # 자체 명령어 자체 이미지를 빌드할 때 실행할 명령어 # 이미지 설정을 위한 도커의 명령 # 이미지를 기반으로 컨테이너 실행 FROM node # 모든 수행을 app 파일 안에서 진행하라는 의미 WORKDIR /app # 첫번째 . 모든 파일 의미, 두번째 .는 그 파일을 저장해야하는 이미지 내부의 경로 # Host file system image/ container file system # app에 저장됨 만..

DevOps/도커 2022.08.12

[도커] 도커 첫 발걸음

도커 설치를 위해 WSL 2와 우분투를 추가적으로 설치했다. 운영체제 마다 또 윈도우 버전 마다 설치 방법이 달랐는데,, 도커의 장점 중 하나가 환경과 버전차이로 인한 문제해결이라고 알고있는데 이미 도커 설치부터 번거로웠다..ㅎ 도커 실습 코드 # app.mjs import express from 'express'; import connectToDatabase from './helpers.mjs' const app = express(); app.get('/', (req, res) => { res.send('Hi there!'); }); await connectToDatabase(); app.listen(3000); 아래와 같은 명령어를 도커 터미널에서 실행할 수 있다. 반드시 도커파일이 있는 경로인 터미..

DevOps/도커 2022.08.12