전체 글
[Docker] Docker Compose의 사용
Docker Compose는 Docker의 IaC와 같은 것으로, yaml 코드를 통해 컨테이너를 어떻게 실행할 지 정의하는 것이다. docker-compose 는 옛 명령어로, docker compose가 최근에 생긴 명령어이고, 옵션에서 몇가지 차이가 있다. 디렉토리 구성 먼저 실습을 실행할 디렉토리를 만들자. 본 글에서는 총 3개의 실습을 진행할 예정인데, 각각 example1 exampl2 exmple3 디렉토리에서 진행할 예정이다. $ mkdir compose 📋 실습1 $ mkdir example1 $ cd compose/example1 Docker Compose 파일은 docker-compose.yaml 또는 docker-compose.yml 로 정해져있다. 아래와 같이 docker-comp..
[Docker] Docker Hub에 이미지 업로드하기
이미지는 웹 인터페이스에서 올리지 못하고, 반드시 명령어로만 올릴 수 있다. Docker Hub 에 이미지를 push하기 위해서는 docker login 명령을 통해 로그인 해야한다. (인증을 받아야한다.) $ docker login Login Succeeded 가 나와야 로그인에 성공한 것이다. 로그인하면 인증정보가 홈 디렉토리의 ./docker/config.json 에 저장된다. 이미지를 빌드할 때는 홈 디렉토리의 파일이 올라갈 수 있기 때문에 홈 디렉토리에서 하면 안되고, root에서 해도 안된다. 로컬에 있는 이미지를 아무거나 docker push 해보자 $ docker push pyhello:v1 The push refers to repository [docker.io/library/pyhell..
[Docker] Docker에 node.js 배포하기
📌Index 간단한 Node.js 작성해보기 Node.js web app으로 Docker image 만들기 Node.js란 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 이러한 node.js를 docker에 배포해보자. ✔️ 간단한 Node.js 작성해보기 먼저 node.js 를 사용하기 위해 저장소를 추가하고 패키지를 설치하자 여기서는 버전16을 사용할 예정이다. $ curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs 다음으로 실습을 진행할 환경(디렉토리)를 구성하자. $ mkdir -p node/web $ cd node/web Get..
[Docker] Docker에 Go 배포하기
📌Index 환경 구성 Go 기초 실습 Web Application 만들기 Go App으로 Docker image 만들기 Docker에 Gin 배포하기 Go 란 구글(google)에서 개발한 언어로, 간결하고 신뢰성 있으며 효율적인 소프트웨어를 손쉽게 만들기 위한 오픈소스 프로그래밍 언어이다. GoLang은 간결한 의존성 해석 알고리즘을 통해서 다른 컴파일 언어에 비해 빌드가 빠르다는 장점이 있다. ✔️ 환경 구성 먼저 실습을 진행할 환경을 구성하자 디렉토리 만들기 $ mkdir golang $ mkdir hello $ cd /golang/hello golang 설치하기 $ sudo apt install golang go module 만들기 Golang에서 module은 Django에서의 App과 비슷한..
[Docker] Docker에 Django App 배포하기
📌Index 환경 구성 Django Default Home Page 띄워보기 Polls app 배포하기 .dockerignorefile이란? Django App으로 Docker 이미지 만들기 장고(Django)란 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크(web application framework)이다. 풀 스택 프레임워크이며, Python을 통해 작성한다. ✔️ 환경 구성 tutorial에 따라 진행해보자 가상 환경 만들기 가상 환경을 사용하는 이유와 설명에 대해서는 여기에서 확인할 수 있다. $ mkdir ~/python/hello-django $ cd ~/python/hello-django 가상프로젝트/프로젝트를 생성 $ python3 -m venv venv 가상 환경 활성화 ..
[Docker] Docker에 Flask App 배포하기
📌Index 환경 구성 Application 만들기 Freeze Flask App으로 Docker 이미지 만들기 Flask란 마이크로 서비스 웹 프레임워크로 간단한 웹 사이트, 혹은 간단한 API 서버를 만드는 데에 특화되어있다. (python 3.7 이상 필요) ✔️ 환경 구성 Flask 환경 구성을 위해 아래의 3가지를 설치하자 python3 python3-pip python3-venv pip 는 파이썬 패키지를 설치하고 관리하는 도구이다. pip 는 python2의 패키지 관리자 pip3는 python3의 패키지 관리자 $ sudo apt install python3-pip python3-venv 가상 환경 가상환경(virtual environment)는 Python에만 존재하는 개념으로, 가상환경..
[Linux] Alpine Linux란?
Alpine Linux : BusyBox + APK(패키지 관리자) BusyBox는 리눅스 커널와 핵심 바이너리와 라이브러리만 포함 yum과 같은 패키지 관리자가 없어서, 소스코드 실행 파일을 직접 빌드해야함 일반적으로 임베디드 장치에 사용하기 위해 만듬 BusyBox 의 불편함을 해결하기 위해 만든 것이 바로 Alpine Linux이다. 단, Alpine Linux는 bash shell이 없고, 기본적으로 본 shell만 가지고 있다. $ docker run -it alpine:3 bash docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting c..
[Docker] Python 스크립트를 실행하는 Docker 이미지 빌드하기
📌Index python:3.9-buster 이미지 사용하기 python:3.9-slim-buster 이미지 사용하기 python:3.9-alpine 이미지 사용하기 먼저 아래의 3가지 python 이미지를 pulling 하자 : Debian + Python3 python:3.9-buster : 대부분의 필요한 패키지가 설치된 것 python:3.9-slim-buster : 표준 라이브러리를 제외하고 전부 제외된 것 python:3.9-alpine : BusyBox Linux + apk 패키지 관리자 $ docker image ls | grep python python 3.9-buster 2081325398fc 2 weeks ago 889MB python 3.9-slim-buster 975c845dddf..
[Docker] Dockerfile의 caching 문제 방지하기
Dockerfile을 통해 도커 이미지를 빌드할 때, Dockerfile의 레이어(Layer)와 캐싱(caching) 문제로 패키지 관련 이슈가 발생할 수 있다. 앞서 이미지 레이어에 대해서 설명할 때, 이미지 레이어 캐싱을 통해 얻을 수 있는 장점은 데이터 저장의 효율성과 재사용에 의한 빌드 시간 단축이라고 설명한 바 있다. Dockerfile에 정의된 명령어와 이전 명령어들이 같다면 동일한 레이어로 판단하기 때문에 다시 다운로드 받지 않으며, 캐싱되어있는 부분을 가져온다. 결과적으로 데이터 저장의 효율성과 빌드 시간 단축이라는 효과를 얻을 수 있는 것이다. 공식 홈페이지 문서의 Dockerfile 작성 안내에서도 다음과 같이 설명하고 있다. A Docker image consists of read-o..
[Linux] shell 변수(variable) : 매개변수
shell 에서 변수를 선언할 때는 다른 프로그래밍 언어와 마찬가지로 = 을 사용한다. 쉘에서 스크립트로 매개변수를 보내줄 수도 있는데, 규칙은 아래와 같다 $0 : 현재 쉘 스크립트의 이름 $# : 위치 매개변수의 총 개수 $* : 모든 위치 매개변수 $@ : 큰 따옴표를 사용하였을 때를 제외하고는 $*와 동일한 의미 $1 ... ${10} : 사용가능한 위치 매개변수 a.sh 을 다음과 같이 작성하였다. #!/bin/sh echo "\$MSG = $MSG" echo "\$@ = $@" echo "\$0 = $0" echo "\$1 = $1" 실행할 수 있는 권한을 부여하고, shell script를 실행시켜보자. $ chmod +x a.sh $ ./a.sh $0은 shell script의 이름이 할당..
[Docker] 도커 파일(Dockerfile)
📌Index Dockerfile이란? Dockerfile 지시어 ✔️ Dockerfile이란? Dockerfile reference | Docker Documentation VagrantFile 처럼 파일 이름은 Dockerfile로 정해져있고, 이미지를 어떻게 만들 지에 대한 정의를 한다. Dockerfile은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 하나의 파일로, 빌드하면 자동으로 이미지가 생성되므로 애플리케이션 빌드 및 배포를 자동화할 수 있게 된다. build docker build 명령어를 실행하면, Dockerfile에 정의된 대로 이미지를 빌드하게 되고, Dockerfile이 있는 디렉토리에서 진행해야한다. 이때, / 루트 디렉토리에서 진행하지 않는 것을..
[Docker] docker export와 import
📌Index Docker export Docker import ✔️ docker export docker save와 유사 : save는 image를 tar archive로 만들기 export는 container를 tar archive로 만들기 docker export -o 예시 $ docker export 3d -o httpd.tar $ ls centos7.tar hello-world.tar httpd.tar zsh-completions $ mkdir httpd $ tar xf httpd.tar $ cd httpd ✔️ docker import tar 파일을 이미지로 가져오기 하나의 레이어로 가져오기 때문에 멀티 레이어의 이미지, 컨테이너를 하나로 만들 때 자주 사용 docker import : 예시 $..