본문 바로가기

AI/Data Engineer

docker

docker?

https://aws.amazon.com/ko/docker/

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다. 
위키백과

 

도커는 리눅스 컨테이너를 기반으로 특정 소프트웨어를 실행하기 위해 필요한 서비스를 패키징하고 배포하기 위해 사용하는 프로그램이다. 하나의 프로그램을 작업하기 위해 여러 사람이 협업을 한다 가정하면, 모든 사람의 컴퓨터 환경을 맞추는 것은 쉽지 않은 일이기 때문에 docker 컨테이너를 활용하여 어느 컴퓨터에서든 해당 프로그램이 구동할 수 있도록 하기 위해서 사용한다. 도커 컨테이너를 통해 개발되는 프로그램은 하나의 이미지로 패킹되기 때문에 개발자가 환경 설정에 크게 신경을 쓰지 않아도 된다.

 

 

https://diginomica.com/docker-loses-first-mover-advantage-kubernetes

 

컨테이너는 도커보다 더 큰 개념으로 하나의 소프트웨어 개발에 필요한 라이브러리, 어플리케이션을 모아서 별도의 서버처럼 구성한 것을 말한다.

 

도커의 작동 과정은 아래와 같다.

 

1. 코드 개발

2. dockerfile 생성

3. docker image 생성

4. container orchestrator를 통한 배포

5. container run

6. container image  push

 

-> 도커는 각 프로그램들이 설치된 모습을 어느 컴퓨터에서든 작동할 수 있도록 이미지로 박제하고 이를 컨테이너라는 공간에 저장하여 배포한다.

 

즉, 도커를 사용하는 이유는 실행환경 확보, 코드를 통한 실행 환경 구축, 실행 환경과 어플리케이션 일체화로 이식성 향상이 있다.

 

도커 파일 : 서버 구성을 문서화 한 것

도커 이미지 : 컨테이너를 구성하는 파일 시스템과 실행할 어플리케이션 설정을 하나로 합침

도커 컨테이너 : 생성한 도커 이미지를 기반으로 어플리케이션이 실행되는 상태

 

도커 사용하기 *docker/whalesay

docker image pull docker/whalesay:latest

도커 이미지를 가져온다.

 

docker images #이미지 확인

docker rmi 이미지id #이미지 삭제

docker rmi -f 이미지 id #이미지 삭제하면서 컨테이너도 삭제

이미지 리스트 출력

 

docker container run --name groot docker/whalesay:latest coway hi!

도커 컨테이너 실행

 

 

docker container ps -a #모든 컨테이너 리스트 출력

docker container rm groot #해당 컨테이너 삭제

docker container rm [groot], [groot1] #여러 컨테이너 삭제

docker container rm 'docker ps -a -q' #모든 컨테이너 삭제

 

 

이미지 받아오기, 컨테이너 실행하기, 컨테이너 관련 리소스 지우기 한번에 실행

docker container run -it --rm danielkraic/asciiquarium:latest

-it : 컨테이너의 표준 입력과 로컬 컴퓨터 키보드 입력 연결

- rm : 컨테이너 종료할 때 컨테이너 삭제

졸귀ㅜㅜㅜ

위의 코드로 컨테이너를 실행함과 동시에 리소스를 지워줬기 때문에 컨테이너를 조회해도 나오지 않는다!

 

이미지는 지워주기!

 

*도커 명령어*

 

#이미지 불러오기

docker pull <이미지 이름>:<태그>

 

#이미지 조회

docker images

 

#컨테이너 실행

docker run <옵션><이미지이름:태그><실행할 파일>


# -i -t -it

i(interactive), t(Pseudo-tty)옵션은 사용자와 컨테이너 간 인터렉션이 필요할 때 사요하는 옵션. 실행된 bash shell에 입출력 할 수 있음

 

#컨테이너 조회

docker container ls

 

#이미지 삭제

docker image rmi <이미지이름>

 

#컨테이너 삭제

docker container rm <컨테이너 이름>

 

#컨테이너 전체 삭제

docker container rm 'docker -ps -a -a'

 

docker 실습하기

!얄코 가장 쉽게 배우는 도커를 따라 실습했습니다.

 

실습할 폴더를 만들어 준 후에 vscode로 열어주고 해당 폴더에 git clone

git clone https://gitlab.com/yalco/practice-docker.git

 

node 이미지와 새로운 컨테이너가 생성되었다.

docker exec -it gallant_sammet bash

-> gallant_sammet이라는 임의로 지정된 이름의 컨테이너 내부에 진입하여 bash shell을 실행한다.

 

컨테이너 내부를 통해 가상의 리눅스 환경에 진입했다.

내가 어떤 os에서 컨테이너를 돌리던 리눅스 가상환경의 형태로 돌아간다!

 

 

프로그램  내에 있는 frontend 폴더에 진입하여 frontent -img라는 이미지를 생성한다.

docker build -t frontent-img .

frontent-img가 생겼음!

 

docker run --name frontend-con -v $(pwd):/home/node/app -p 8080:8080 frontent-img  

-v : 도커에서 volume이란 컨테이너와 특정 폴더를 공유하는 것을 의미

-pwd : 현 위치 출력

-$(pwd) :/home/node/app : 지금 위치한 폴더 안의 내용들이 컨테이너의 home/node/app 폴더에 들어간다는 의미

-p : 포트

 

-> 8080번으로 서버가 열렸다는 표시

 

localhost:8080 으로 접속해보면 위와 같은 화면이 나온다.

 

 

docker stop $(docker ps -aq)

 

해당 프로젝트에는 frontend, database, backend 세가지의 컨테이너가 존재한다.

 

매 container마다 위의 과정을 통해 실행시킬 수 있지만, docker compose를 사용하면 한번에 3개의 컨테이너를 실행시킬 수 있다. 

 

docker-compose.yml 파일을 생성하여 각각의 컨테이너를 run할 때 필요한 옵션을 입력해주고, docker-compose up을 통해 실행시킨다.

 

 

나는 database 컨테이너의 mysql 설치하는 과정에서 오류가 생기는 것 같다 ^_^

이제 오류가 뜰 때 마다 내 잘못인지 m1 맥북의 호환성 문제인지 의심이 생ㄱ....ㅣ,,,,

 

 

 

 

 

reference

tech.osci.kr/2020/03/03/91690167/

ndb796.tistory.com/90

junlab.tistory.com/216

 

'AI > Data Engineer' 카테고리의 다른 글

Web crawling  (0) 2021.03.21
database : SQL  (0) 2021.03.14