DevOps/Docker

    [Docker] Docker Compose로 WordPress 배포하기

    Docker의 IaC인 Docker Compose를 이용하여 WordPress를 배포해보자 환경 구성 먼저 실습을 진행할 디렉토리를 생성한다. $ mkdir wp $ cd wp 다음으로 WordPress를 생성 및 구성하는 docker-compose.yaml을 작성한다. docker-compose.yaml version: "3" services: wp-db: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: P@ssw0rd MYSQL_DATABASE: wordpress MYSQL_USER: wpadm MYSQL_PASSWORD: P@ssw0rd volumes: - wp-db-vol:/var/lib/mysql networks: - wp-..

    [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에만 존재하는 개념으로, 가상환경..

    [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..

    [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 : 예시 $..

    [Docker] Docker 이미지 레이어(Layer)

    Docker image가 레이어(Layer)를 가지는 이유를 먼저 설명하자면, 바로 데이터 저장의 효율성과 빌드 시간의 단축을 가지기 위함이다 docker run 를 통해 이미지로 컨테이너를 생성하면 기존의 이미지 레이어들 위에 conatiner layer 가 생성된다. 즉, commit 할 때마다 새로운 내용을 레이어에 쌓아가는 것이다. 기존 이미지의 레이어는 Read-Only(변경 불가)이고, 기존 레이어 위에 새로 생성된 레이어는 Read-Write(변경 가능)이며, 이미지 레이어는 삭제되지 않지만 컨테이너 레이어는 해당 컨테이너가 종료될 경우 같이 소멸된다 아래 그림에서 볼수 있듯이, 이미지에서 컨테이너를 생성할 때 읽기 전용 레이어 위에 쓰기 가능한 레이어를 추가하게 된다. image 출처 만약..

728x90