프로그래밍 117

[도커] 9. 도커 이미지 만들기

이번시간엔 좀 더 복잡한 이미지를 만들어 Dockerfile 작성을 실습해볼 예정이다. 우선 nginx를 이용해 웹 서버를 여는 이미지를 만들어보려고 한다. FROM ubuntu:20.04 MAINTAINER riroan LABEL version="0.1" RUN apt-get update RUN apt-get install nginx -y RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf ENTRYPOINT ["nginx"] EXPOSE 80 docker build --tag mynginx:0.1 . 이렇게 나오면 성공적으로 빌드한 것이다. 우선 Step이 8/8에서 끝났는데 이는 레이어가 8개임을 의미한다. 레이어는 대문자 명령어의 개수이기 때문에 8개가 나왔다..

[도커] 8. Dockerfile 요소

지난시간에 가장 간단한 Dockerfile를 빌드해 이미지를 만들었다. 이제 Dockerfile에 어떤 내용을 써야하는지 알아보려고 한다. - FROM 기반 이미지 로드 FROM ubuntu:20.04 - MAINTAINER 개발자정보 입력(잘 사용하지 않는다. 대신 LABEL사용 추천) MAINTAINER riroan - LABEL 이미지 정보 입력 LABEL version="1.0" description="this is my image" - RUN FROM에서 로드한 이미지에서 실행할 명령이나 스크립트 RUN 명령어 사용 시 사용자와의 인터렉션이 있으면 안된다.(ex : 설치시 y/n누르는 부분) # shell 에서 RUN echo hello world # shell 없을 때 RUN ["echo", ..

[도커] 7. 가장 간단한 이미지 만들기

이번시간에 도커를 사용해서 가장 간단한 이미지를 만들어 빌드해볼것이다. 만들 내용은 우분투 이미지에 hello world 를 출력하는 이미지를 만들것이다. 우선 빈 폴더를 하나 만들어서 안에 Dockerfile라는 이름의 파일을 생성한다. (스펠링이 맞아야 한다!) 이후 Dockerfile를 편집기로 열어서 아래 내용을 작성한다. FROM ubuntu ENTRYPOINT ["echo", "hello, docker"] 스크립트 내용은 차차 알아갈 것이다. Dockerfile이 있는 폴더에서 다음 명령어를 이용해 빌드를 시작한다. docker build . 현재 위치를 빌드할 것이기 때문에 .를 입력했다. 만약 빌드하려는 도커파일이 다른 위치에 있다면 해당 위치를 .대신에 써주면 된다. 이미지가 두개 생겼는..

[도커] special. VScode에서 ssh 접속하기

다음시간부터 Dockerfile을 작성해서 이미지를 빌드할건데 현재는 putty를 이용하여 EC2인스턴스에 ssh접속을 했지만 cli에디터(nano, vim)를 사용하기 불편하므로 vscode를 사용해 작성하고자 한다. 우선 visual studio code에 확장(extension)으로 가서 remote ssh확장을 설치한다. 그 후 ssh 접속에 필요한 설정을 작성해야 한다. 단축키 Ctrl + Shift + P를 누른 후 Open SSH Configuration File...를 클릭한다. 그 후 ssh config파일위치를 선택하면 되는데 대부분 C:\User\{계정}\.ssh 안쪽에 있다. 그 후 아래 형식과 같이 작성한다. Host {구분이 가능한 이름} HostName {접속하려는 서버의 IP..

[도커] special. AWS 보안

현재 도커 관련 포스팅을 위해 AWS EC2에서 도커를 사용하고 있다. 여기에서 간략하게 보안에 대한 이야기를 해보고자 한다. EC2 인스턴스를 만들다보면 위 사진처럼 보안그룹을 구성하는 단계가 나온다. 초보자들은 이게 뭔지 잘 몰라서 그냥 넘어갈 수 있고 이전단계에서 검토 및 시작을 직접 눌렀다면 지나칠 수 있었을 것이다. 하지만 이 단계가 중요한 역할을 한다. 지금 보면 포트범위 22에 소스 0.0.0.0/0 으로 설정되어 있는데 이는 인스턴스에 접속할 22번 ssh포트를 모든 사람이 접속할 수 있게 설정해 놓겠다는 것이다. 실제로 예를 보이기 위해 이렇게 놓고 인스턴스를 생성했다. 그랬더니... sudo lastb 수많은 사람이 나의 인스턴스에 접속 시도한 기록을 확인할 수 있다.(실제로 아이피를 ..

[도커] 6. 도커 명령어 2

이번시간엔 도커를 실행시킬때 사용되는 여러가지 옵션들에 대해 살펴볼것이다. docker run을 사용해서 우분투 이미지를 다운받아 컨테이너화해서 실행시켰다. 우선 ubuntu:latest 라는 문구가 눈에 띈다. 그냥 이미지 이름만 입력하여 다운받으면 자동적으로 최신버전의 이미지를 다운받는다.(latest version) 특정 버전의 이미지를 다운 받기 위해서는 "{이미지이름}:{버전}"형식으로 입력하면 된다. 지난시간과 마찬가지로 우분투가 시작하자마자 끝났기때문에 docker ps 에는 나오지 않고 docker ps -a에 나오는 모습을 볼 수 있다. 이를 방지하기 위해 아래의 명령어를 입력한다. docker run -it ubuntu 이는 우분투 컨테이너와 직접 상호작용을 한다는 의미이다. 이제 우분..

[알고리즘] 이분탐색

배열에서 특정한 수를 찾으려면 어떻게 할까? 앞에서부터 하나씩 찾아보면 될 것이다. arr = [9,3,7,5,6,2,0] x = 3 for i in arr: if x == i: print("찾았다") 최악의 경우는 배열 끝에서 찾은 경우이므로 $O(n)$만큼 시간이 걸릴 것이다. 만약 배열이 정렬되어 있다면 더 빠른 시간 안에 찾을 수 있다. 만약 배열이 arr = [1,3,5,7,8,9,10]이 있다고 하자. 이 배열에서 8이 있는지 찾고 싶다. 그럼 위 코드를 사용하여 찾는다면 찾는데 5번의 탐색이 필요하다. 하지만 정렬이 되어 있으니 다른 방법을 사용해보자. 우선 배열의 가운데 값을 선택한다. 만약 선택한 값이 찾는 값이라면 그대로 반환하고 아니라면 찾는 수보다 큰지 작은지 판별한다. 정렬이 되어..

[도커] 5. 도커 명령어 1

지난시간에 docker run 명령을 통해 hello-world컨테이너를 실행시켰다. run 명령어는 로컬에 이미지가 있는지 확인하고 없으면 원격 저장소에서 다운받고 컨테이너를 만들고 실행까지 시켜준다. 사실 run은 pull, create, start명령어로 분해할 수 있다. docker pull ubuntu pull명령어로 우분투 이미지를 다운만 받게 되었다. 다운받은 이미지를 확인하려면 다음 명령어를 입력한다. docker images 방금 다운받은 우분투 이미지가 들어왔다. 이제 이미지를 컨테이너화 해야한다. docker create ubuntu docker ps -a ps -a는 컨테이너 목록을 보는 명령어이다. 컨테이너를 보면 여러가지 요소가 있다. CONTAINER ID : 컨테이너 고유 I..

[도커] 4. Hello Docker

프로그래밍 세계에서는 언어든 라이브러리든 Hello world를 출력하는 것부터 시작한다. 이번 시간에 도커를 사용해서 Hello world를 실행해보도록 한다. 실행방법은 간단하다. docker run hello-world 이 화면이 나오면 성공한 것이다. 실행 과정을 크게 3부분으로 나눠보았다. 빨간 부분은 hello-world 이미지를 로컬에서 찾을 수 없어서 다운받겠다는 내용이다. 파란 부분은 실제 다운받는 과정이며 pull complete앞에 있는 2db... 로 이루어진 문자가 레이어를 나타낸다. 다운 후 유효성 검증을 거친다. 노란 부분은 다운이 완료된 이미지를 실행하여 보여주는 부분이다. 다운받은 이미지를 확인하기 위해 다음 명령어를 입력한다. docker images 방금 다운받은 hel..

[도커] 3. 도커 구조

시대가 지날수록 배포유형이 달라지고 있다. 처음에는 하나의 os에서 직접 앱을 여러개 작동 시키는 방법이었고, 이를 가상화 하여 VM상에서 배포하는 방식을 거쳐 컨테이너 기반의 배포방식으로 발전하였다. 초기 배포방식은 App 하나가 다운되면 시스템 전체가 다운되는 문제가 있었다. 그래서 하드웨어를 가상으로 분할하여 별도의 OS에서 작동하는 VM방식으로 배포를 진행해왔다. 이 경우 8코어 cpu를 2코어 cpu 4개로 나누는 것처럼 사용하는데 이런경우 VM을 4개만 실행해도 자원 점유에 문제가 생긴다. 그래서 컨테이너 기반의 배포방식이 떠오르게 되었다. Host의 자원을 사용하며 여력이 된다면 컨테이너를 많이 띄울 수 있고 하나의 컨테이너는 다른 컨테이너에 영향을 미치지 않는다. 마이크로서비스를 지향하는 ..