관리 메뉴

A seeker after truth

데센프 4주차 본문

수업 필기/Docker, Kubernetes(20-1) - 공개글!

데센프 4주차

dr.meteor 2020. 4. 6. 12:27

 7. 도커 허브 & 파일

 

6. Dockerfile을 사용한다는 것이 Infrastructure as Code와 무슨 관계가 있는지를, Dockerfile에 사용하는 주요 문법을 활용하여 설명하시오.

A) (아래 잇는 문법 열거 몇개 하면서) 이런게 없었다면 일일이 환경을 구축하고, 프로그래밍하고, 실행하고 명령을 내려야할 일을 IaaC의 표상이라 할 수 있는 yaml 파일에 ~런 문법을 통해 작성한 뒤 이미지를 만들고 컨테이너를 실행하는 과정을 거치면 이 모든 일련의 과정을 한번에 할 수 있게 된다.

 

당신 오늘 수업에서 읽으라했던 리딩 아티클 중에서 두번째꺼 읽으셈

7: 우분투 이미지가 있긴 한데, 도커에선 우분투도 무거운 편 그래서 이보다 더 작고 가벼운 알파인이란 것을 더 많이 쓴다(가운데)

 

11~ 도커 이미지를 만들어주는 것이 도커 파일.이라는 설명. 다 아는 내용

 

12: 우분투 가져오고 파이썬 파일 올리는 내용 .

from: 도커로부터 우분투 최신 버전 갖고옴

maintainer: 이걸 작성한 사람

run: 가져온 우분투 안으로 들어가서 여기 써있는 명령어 실행

비슷하게 오른쪽처럼 할 수도 있음. 내가 만든 프로그램인 app.py를 실행하라는 명령

entrypoint:

 

13: 우분투 운체를 갖고와서 내가 만든 프로그램을 그 우분투 위에서 돌아가도록 이미지를 만든다고 했다

내가 만든 프로그램은 소스코드나 실행파일

copy지금 이미지를 만드는 와중에 도커 명령을 수행하고 있는 개발자 컴의 디렉토리. 여기 있는 파일을 도커 이미지 안으로 밀어 넣으라는 것. 그래서 copy . /app 이란, 내 현재 디렉토리에 있는 파일들을 우분투 이미지의 루트 디렉토리 밑에 app 밑에 copy 하라는 것. 아 뭐야... 아는 거잖아...

make는 파일이 굉장히 많을 때 컴파일러에게 작업을 시키기 위해 만든 작은 명세서=메이크파일

이런 메이크 파일같은게 있을 경우 우분투의 make 명령을 이용해 만들어달라는 말.

cmd우분투 안의 명령을 실행해달라는 말. 내가 만들어서 업로드한 프로그램 중에 app.py를 실행하라는 말

따라서 이 프로그램은 우분투에서 내가 만든 웹, 파썬 프로그램을 수천/수만 대 컴에서 돌리고 싶은 마음으로 만든 도커 파일

 

14: 현업에선 뭘 하겠는가? 노드제이에스 이미지 '위에' 우리가 짠 프로그램을 '넣은' 이미지를 러닝하거나, 알파인 리눅스 위에 우리가 만든 어플리케이션을 넣어서 실행. 그래서 여기서, 위에서 아래로 내려오면서 우리가 주로 하는 것은 레이어 6에 해당하는 것. 이미 이 노드제이에스 이미지 안에는 알파인 리눅스 등이 다 들어가 있음

카피 등을 통해 내가 만든 프로그램을 넣고 이미지를 배포하면 됨

 

16: termination -> term . 글고 여기 나온 이 글은 유닉/리눅스 운체의 기본적인 어플리케이션 프로세스의 라이프 사이클과 매우 비숫

 

17: 디테일 버전

 

18

docker pull ubuntu : 허브에서 이미지 갖고 옴

docker build

docker container ls -aq

ls를 하게되면 앞쪽 status 현재 러닝하고 있는 걸 보여줌

docker system df

docker stats

docker image rm -f(강제) $(docker image ls -a -q) 이러면 $ 안에 있는 걸 입력 삼으라는 이야기 

이미지도 지우고 컨테이너도 멈추고...

하지만 잘 이해는 안되는 군

뭘 하다 너무지저분해서 다 지워버리겠다 하면 쓰는게 docker system prune!

docker container run -it -d --rm (이게 작업 마치면 자동으로 지워주는 것. 일일이 지우기 귀찮으니까)

docker exec -it alpineos /bin/bash <-안으로 들어가보는 것

 

 

 

8. pushing and pulling

6: 도커파일 코드 설명

from: 처음부터 생판 이미지를 만드는 게 아니고 근간이 되는 이미지를 가져와서 사용.

echo: 그냥 화면에 뿌림. 특별한 의미는 없음

workdir: 내가 시키는 일은 이 위치에서, 이 위에서 돌아갈 거다.

cmd: 그곳에서수행해야 할 명령을 준 것

expose 80: 프로그램은 외부와 통신하기 위해 컴 안에서 자신의 어플리케이션 주소값을 가져야 하는데 그걸 포트넘버라고 한다. 그래서 이 프로그램은 80번 사용하면 접속 가능하다고 하는 것

docker build --tag(내가 만드는 이미지의 이름 지정) myubuntu:1.0 . <- Dockerfile 이라고 직접 적지 않고 점 하나로 끝낸다. 이 위치에 있는 도커 파일을 빌드한다는 의미에서.

-d: 서버 백그라운드로 뒤에 둥둥 띄워줘

-p: port address translation....? network address translation란 개념도 있고. 다 이 강의 안에 나온다는데 왜 난 기억이 없? 매우 중요하고 반드시 이해해야 하는 개념

컨테이너는 완벽한 가상 머신처럼 동작. 80번 포트를 쓰는 프로그램이 엔진엑스. 바깥에선 이제 구멍을 뚫어야 함. 바깥에서 ㅊ안으로 들어가야 해서. 외부에서 보는 포트 넘버를 번역... 

지금 서버를 띄운 것이니, 직접 들어가봐야. 그래서 localhost:4000 들어갈건데 왜 4000이냐? 프로그램은 80번 위에서 돌아가고 있지만, 포트 주소 번역 기능에 의해 4000으로 들어가면 80으로 번역해주고 연결해주는 기능 떄문

자원 얼마나 쓰는지 알아보기 위해 system stats로 들어가보면, 씨피유 0.04% 정도 쓰고, 새로고침해도 잠시 0.7로 올라갔다 도로 0.04로 떨어짐. 메모리도 4메가 먹는 중. 그만큼 라이트 웨이트하다! 가상 머신으로 띄우면 씨피유 코어 1~2개 먹고 메모리 1기가 넘게 먹고... 그러는데 . configuration 도 다 잡아야 하고

 

나머지 파썬, 자스, 텐서플로 해보란 의미에서 실습 자료 실어주심.\

 

아... 도커 자체 명령어인 rm, rmi 로는 모든 이미지를 삭제하는 기능이 없구나 그래서 저번에 rmi -f $(docker image ls -aq) 이거 알려주신거라고 함

 

docker system df 이거 내가 완전 좋아하는 기능임 이거 이미지, 컨테이너, 캐시 등의 개수랑 용량 말해줌. 나 지금 이미지 2.21 기가나 된다 ㅁㅊ...