Lsiron

Docker 기초부터 배포까지 - python, django(elice) 본문

배포/docker

Docker 기초부터 배포까지 - python, django(elice)

Lsiron 2024. 7. 4. 17:11

Docker는 소프트웨어 컨테이너화 플랫폼으로, 애플리케이션을 그 종속성과 함께 패키징하여 일관된 환경에서 실행할 수 있도록 돕는 도구이다. Docker를 사용하면 개발, 테스트, 프로덕션 환경에서 일관된 성능을 유지할 수 있으며, 배포 과정을 단순화하고 효율화할 수 있다.

 

즉, Docker란 환경설정을 편리하게 해주는 도구이다.

 


Docker는 소프트웨어 개발, 배포, 운영의 모든 단계에서 많은 이점을 제공한다.

 

일관된 환경 제공, 리소스 효율성, 빠른 배포 및 롤백, 확장성, 마이크로서비스 아키텍처 지원, CI/CD 통합, 플랫폼 독립성, 개발자 생산성 향상, 보안 격리 등 다양한 필요성을 충족시키며, 이는 Docker를 현대 소프트웨어 개발 및 운영의 필수 도구로 만들었다.

 

Docker를 도입하면 소프트웨어 개발 및 배포 과정이 단순화되고, 더 높은 품질의 소프트웨어를 더 빠르게 제공할 수 있다.

 

Docker를 시작하기 전에 먼저 vi 기초부터 진행 해보자.

 

vi 기초

$ mkdir practice_01

명령어로 폴더를 하나 만들어준다.

 

$ cd practice_01

명령어로 practice_01폴더에 들어가준다.

 

$ vi README.md

명령어를 입력한다. 아래 사진처럼 나온다.

 

vi는 insert 모드와 normal 모드가 있다.

 

i

를 누르면 insert 모드가 된다.

 

아무거나 입력하고 esc를 누른다.

 

:w

를 입력하고 enter를 누르면 저장이 된다.

 

:q

를 입력하고 enter를 눌러서 밖으로 다시 나온다.

 

$ cat README.md

명령어를 입력해서 내용을 확인한다.

 

$ vi elicer.txt

명령어를 입력한다.

 

:wq

를 입력한다. (저장하고 나가기)

 

$ ls

명령어를 입력하고

 

$ cat elicer.txt

명령어를 입력한다. 파일은 있는데 내용은 없다. => 빈 파일을 생성하는 경우

 

$ mkdir practice_02

명령어를 입력하고 폴더 하나를 더 만든다.

 

$ cd practice_02

명령어를 입력하고 폴더로 이동한다.

 

$ vi 01.py

명령어를 입력하고 파일을 하나 만든다.

 

i

를 눌러서 insert 모드로 들어간다.

 

아래 사진과 같이 입력한다

 

esc

누르고

 

:wq

를 입력해서 나와준다.  

 

$ cat 01.py

명령어를 입력하고 내용을 확인한다

 

$ python 01.py

명령어를 입력하고 파일을 실행시킨다.

 

$ vi 02.py

명령어로 파일을 하나 만든다.

 

i

를 눌러서 insert 모드로 들어간다.

 

아래 사진과 같이 입력한다.

 

esc

를 누르고

 

:wq

를 입력해서 밖으로 나온다.

 

$ python 02.py

명령어로 파일을 실행시킨다.

아래 사진처럼 나온다.

 

$ cd ~

명령어를 입력하여 home으로 온다.

 

$ vi .bashrc

명령어를 입력한다.

 

shift + g

를 눌러서 맨 밑으로 내려온다. ( 파일의 아래 맨 끝으로 가는 단축키이다. )

 

shift + 4

를 눌러서 맨 끝으로 간다. ( 줄의 우측 맨 끝으로 가는 단축키이다. )

 

a

를 눌러주고 insert 모드로 들어간다. ( 커서가 있는 방향에서 insert모드가 시작된다. )

 

:q!

를 입력하고 enter를 눌러주자 :q!는 저장안하고 나가기이다.

 

$ mkdir practice_03

명령어를 입력하고 폴더 하나를 더 만든다.

 

$ cd practice_03

명령어를 입력하고 폴더로 이동한다.

 

$ vi practice_03/01.py

명령어를 입력하고 i를 눌러서 아래와 같이 입력한다.

 

:w 를 입력한 뒤 저장해주고

 

:e practice_03/02.py 를 입력해준다. (:e 명령어는 바로 파일로 이동해서 입력하는 창으로 들어간다)

 

아래 사진과 같이 입력해보자.

 

vm 기초가 끝났다.

 

이제 본격적으로 Docker 기초를 실행해보자

 

먼저 구글 클라우드에서 인스턴스를 하나 만들어주자.

 

리전은 서울로 하고 머신유형은 standarde2-standard-2(ram 8기가)를 선택해주자.

 

부팅 디스크는 운영체제는 ubuntu 그리고 버전은 ubuntu 22.04 LTS 로 선택해 주고, 크기는 30GB로 설정해주자.

(10GB는 너무 작음)

 

 

마지막으로 HTTP와 HTTPS 트래픽을 허용해주자.

 

인스턴스를 생성이 완료됐으면

 

SSH 옆 화살표를 눌러주고 브라우저 창에서 열기를 눌러주자.

 

이제 터미널 창이 열렸다.


docker 명령어의 경우 네트워크과 관련된 작업 및 로우레벨 작업이 있을 수 있어서 유저권한으로 도커 명령어 진행시 sudo가 동반되어야한다.

 

그러나 처음 도커 명령어 배우는데 계속 sudo 를 입력하기 힘들기 때문에 root로 진행을 해보자.

 

$ sudo su 

명령어를 입력하여 root로 바꿔주자. (바꿔주면 $ 에서 # 으로 바뀜)

 

# cd ~

명령어를 입력하여 root의 home으로 가보자.

 

# apt update && apt upgrade 

명령어를 입력하여 패키지 업데이트 및 업그레이드를 해주자.

 

 

이제 docker를 설치 할 차례이다.

 

https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com

 

1. 위 사이트로 가서 아래 명령어대로 입력 해주자.

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

 

 

2. 아래 명령어를 입력해준다.

 

# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update

 

3. 아래 명령어를 그대로 복사해서 입력해준다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

 

4. 잘 설치 됐는지 확인 하려면 아래 명령어를 그대로 복사해서 입력해준다.

sudo docker run hello-world

 

 

자, 이제 docker가 성공적으로 설치되었다.

 

# mkdir installs 

명령어를 통해 폴더를 하나 만들어주자.

 

#cd installs

명령어를 통해 폴더로 들어가주자. 이제 파이썬 버전관리 툴인 conda를 설치해보자.

 

https://www.anaconda.com/download/success

 

Download Now | Anaconda

Anaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.

www.anaconda.com

위 사이트로 들어가서 해당 사양에 맞는 링크로 우클릭을 눌러서 링크 주소복사를 눌러주자.

 

# wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh

명령어를 입력해서 conda를 설치해주자.

 

# sh A

를 입력하고 tab을 눌러주면

# sh Anaconda3-2024.06-1-Linux-x86_64.sh 

로 바로 입력이 된다 enter 를 눌러준다.

 

# q

를 입력하고 enter를 누른 뒤, More이 뜨면 계속 enter를 눌러주자.

 

license를 동의하냐는 말이 나오면 yes를 입력하고 enter를 누르면 설치가 된다.

 

# sudo su root

명령어를 통해 다시 돌아와준다. ( 맨 앞이 (base) 로 바뀜 )

 

# conda env list

명령어를 입력해주자.

 

# conda search python

명령어를 입력해주자.

 

# conda create -n general python=3.10.14

명령어를 입력해주고나서

 

y를 입력하여 설치해준다.

 

# conda activate general

명령어를 입력해주자. ( 맨 앞이 (general) 로 바뀜 )

 

이제 우리는 general 이라는 환경을 만들었다!


# conda env list

명령어로 conda를 확인해주자.

# docker ps

명령어로 docker를 확인해주자.

 

# mkdir things

명령어로 폴더를 하나 만들어주고

 

# cd things

명령어로 폴더 안으로 들어가서

 

# mkdir myweb

명령어로 폴더를 만들어주고

 

# cd myweb

명령어로 폴더 안으로 들어가주자


# pip install django

명령어를 입력해서 django를 설치해주자

# django-admin startproject elice .

명령어를 입력해서 django 프로젝트를 실행해주자.( elice뒤에 . 온점 필수로 입력)

 

# apt install tree

명령어로 tree를 설치해주자.

 

# tree

명령어로 한번 확인 해보자.

 

# vi elice/settings.py

명령어를 입력하고 

 

 

ALLOWED_HOSTS = [] 를
ALLOWED_HOSTS = ["*"] 로 바꿔주자.

 

저장하고 나와서

 

# python manage.py runserver 0.0.0.0:8000

명령어를 입력해주자.

 

이제 구글 클라우드로 돌아와서 접속을 해보자.

 

접속이 안된다. 포트를 열어주지 않아서 그렇다.

 

VM을 클릭해주자.

 

네트워크 인터페이스 란을 가서 default 를 클릭해주자.

왼쪽 사이드 바의 방화벽에 들어가주자.

 

방화벽 규칙 만들기를 눌러주자.

타겟은 네트워크의 모든 인스턴스를 선택해주고,

IPv4 의 범위는 0.0.0.0/0 으로 입력해주자.

프로토콜 및 포트는 tcp를 설정해주고 port는 8000 으로 입력하자.

 

다시 터미널로 돌아와서

# python manage.py runserver 0.0.0.0:8000

명령어를 입력해보자.

 

http://외부 IP 주소:8000/ 로 접속하면 서버가 열린다!

 

이제 docker를 실행해보자.

 

# cd ~

명령어를 통해 다시 home으로 돌아오자.

 

#  sudo docker run hello-world

명령어로 hello world 를 찍어보자.

 

위와 같이 결과가 나오는데 이는

1. image 가 있나 확인
2. image를 pulll
3. image -> container 생성

과정을 거쳤다.

 

# docker image ls

명령어를 통해 image를 확인해보자.

 

위와 같이 결과가 나온다.

 

# docker container ls -a

그러면 명령어를 통해 컨테이너를 한번 확인해보자.

 

# docker container rm [container id]

명령어를 통해 container를 지워보자.

 

# docker image ls -a

명령어를 통해 이미지 리스트를 확인하고

 

# docker pull hello-world

명령어를 통해 hello-world 이미지를 가져오자.

 

# docker image ls

명령어를 통해 이미지 리스트를 확인하고

 

# docker container create hello-world

명령어를 통해 컨테이너를 하나 만들어주자.

 

# docker image rm [image id]

명령어를 통해 이미지를 지워보자.

 

# docker container rm [container id]

명령어를 통해 다시 컨테이너를 지워보자.

 

이미지 생성과 컨테이너 생성 및 삭제 연습도 해 보았다.

 

이제 네트워크 명령어를 사용할 수 있는 툴을 설치해보자

 

# apt install net-tools

명령어를 통해 설치를 해준다.

 

# ifconfig

명령어를 통해 네트워크를 확인 해준다.

 

도커 환경에서 작업을 하고 싶다 -> -it

 

# docker container run -it ubuntu

 

이 도커 우분투 안에서 우리가 작업할 수 있게 세팅을 해보자.

 

# apt update && apt upgrade

명령어를 통해 업데이트와 업그레이드를 해주자.

 

# apt install vim

명령어를 통해 vi를 설치해주자.

 

# exit 

명령어를 통해 나가주자.

 

# docker container ls -a

명령어를 통해 컨테이너를 확인 해 주자.

 

# docker container commit [container id] myubuntu(이름 아무거나 해도 상관없음)

명령어를 통해 컨테이너를 이미지로 만들어보자 (커밋을 하면 이미지로 간다)

 

# docker image ls

명령어를 통해 이미지를 확인해보자.

 

# docker run -it myubuntu

명령어를 통해 이미지를 실행해보자.

 

# vi

명령어를 입력하면 실행이 된다.

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

dockerhub 사이트로 가서 가입해보자.

 

# exit

명령어를 통해 밖으로 나간다.

 

# docker login

명령어를 통해 username과 password를 입력해주고 login을 해준다.

 

# docker image ls

명령어를 통해 이미지 리스트를 확인한다.

 

# docker tag myubunty:latest lsiron/myubuntu:0.1

명령어를 통해 이름을 바꿔주고

 

# docker push lsiron/myubunty:0.1

명령어를 통해 push를 해준다.