Docker/Docker Docker의 명령어 정리

김진겸·2023년 1월 17일
0

내가 오늘 Docker에대해서 배운것들을 정리해본다.(2023.01.17)
Docker가 보완한점, dockerfile작성방법과 사용하기위해 알아야할 docker명령어와 포트연결문제와 해결방법을 알아보자
목차
1.Docker가 보완해낸 점
2.dockerfile작성방법
3.docker 명령어
4.포트포워딩

  • Docker가 보완해낸 점

docker는 개발환경요소들이 설치된 모습을 이미지로 저장하는데 이를 docker hub에 이미지로 올리고 다운받을수 있다. git hub처럼 올리고 다운받고 가능하다.
docker는 가상머신과 비슷하지만 가상머신보다 빠르고 효율적이다 이유는 불필요한 운영체제를 제외시켰기 때문이다.
예전에는 협업을 위해 컴퓨터의 개발환경을 모두 동일하게 맞췄어야 했는데 그러기 위해 다같은 노트북으로 바꾸거나 가상컴퓨터를 설치했다.
다같은 운영체제로 만들지만 버전이 다 다를수 있기에 버전도 맞춰야한다.
버전까지 다 맞춰서 깔고 정해진 설치 리스트까지 깔았다. 이때는 개발환경을 만드는데 1주일이 걸리고 개발환경 설치 리스트를 따로 만들어 두었다고 한다.
하지만!!! 컴퓨터를 두번 켜야하고 너무 느리다.!!!
용량을 많이 먹고 너무 느리다는 문제가 생긴다. 이를 보완해주는게 docker이다.
(가상컴퓨터에서는 컴퓨터안의 컴퓨터를 만든것이므로 하나의 컴퓨터에 두게임 게임을 실행 시킬 수 있다.)
(이걸가상머신(VM)버츄얼 머신 이라 한다.)

mac의 핵심부분은 리눅스와 비슷하다. 리눅스와 공통된 부모를 가지고 있다.
하지만 윈도우는 리눅스랑 너무 다른데 이를 보완해주는게 WSL2(windox serve system for linux)이다. 이를 설치해야한다.

도커는 기본적으로 리눅스이고 부팅등 운영체제의 핵심기능(커널)은 공유하는 가상머신이다.
os전체를 설치하지 않아도되기에 빠르고 가벼우며 미리 컴퓨터에 설치해놓을 수 있고 깔린 도커를 줄 수 도 있다.
굉장히 효율적이다. 컴퓨터를 마치 파일처럼 주고받고 설치할수 도 있다.
node와 Mysql등 프로그램이 이미설치된걸 설치할 수 있다는 얘기이다.
window를 사용하든 mac을 사용하든 linux로 통일되기에 충돌이없고 이미 설치될 파일이 셋팅되어 내가 할필요가 없다.

)docker 업로드 docker push
)docker 설치 docker pull

  • Dockerfile작성방법
    Dockerfile을 참고하여 가상 컴퓨터를 만들게 된다. 그럼 Dockerfile을 어떻게 작성하는지 알아보자.
    FROM node:14
    //운영체제 및 프로그램 설치(이미 리눅스,node,npm,yarn까지 모두 깔려있는 컴퓨터 다운로드 하는 방식)
    
    RUN mkdir myfolder 
    //아래에서 COPY할때, 자동으로 만들어주므로 굳이 필요없음
    
    COPY ./package.json /myfolder/
    //./package.json 는 현재폴더위치에서 존재하는 package.json을 myfolder에 복사한다
    
    COPY ./yarn.lock /myfolder/
    //윗줄과 같은 맥락이다.
    
    WORKDIR /myfolder/
    // 마우스 커서를 myfolder에 깜빡 거리게 한다는 의미이다. docker를 실행시키고 나면 터미널에서의 작업공가을 myfolder로 지정해준다.
    
    RUN yarn install
    // yarn install을 한다는 의미인데 도커파일을 실행시키면 yarn install을 한다는 의미이다.
    이부분까지 실행해서 최종이미지로 저장한다.
    
    CMD yarn start:dev
    // 복서해서 이미지로구운 package.json에서 서버를 실행시키는 명령어가 start:dev이다. 그래서 도커에서 서버를 실행시키려면 도커 컴퓨터에 접속하고 yarn start:dev로 서버를 실행시켜주면 된다. 
    
    CMD명령어는 실행시켜서 최종이미지에 저장하지 않는다. 그리고 CMD는 RUN과 달리마지막으로 한번만 실행시킬수 있다.

주의:
.dockerignore파일을 만들고 여기에 node_modules넣어줘야 한다.
그이유는!!!! 로컬에서는 각자의 컴퓨터 환경에서 설치된 node_modules 폴더로 모듈을 관리해줬기에,
서로 다른 개발환경이 만들어질수 있다. 그래서 가상 컴퓨터에서는 서로 다른 환경에 간섭 받지 않도록 모듈들을 설치를 해줘야합니다. .dockerignore파일로 node_modules를 무시해주면 이파일이 복사되지 않는다.
packge.json을 복사했고 이에따라 yarn install을 하기에 모두 같은 개발환경을 만들 수 있다.

  • docker 명령어
    Brew install,Apt install,Apt-get~등, Ubuntu 명령어 사용해야한다.
    오늘 사용했던 것들을 알아보자.

도커실행
1.도커파일이 있는 폴더로 들어가서 터미널을 연다
2. docker build .으로 도커를 빌드한다.
3. docker images 로빌드하여 만들어진 이미지를 조회한다. 이미지의 아이디를 확인할 수 있다.
4. docker run IMAGE ID를 입력하여 도커를 실행한다.
실행하면 해당 이미지를 실행시켜서 컨테이너를 실행시켜준다. 이미지와 컨테이너의 차이를 집고 가자.
빌드하면 이미지가 만들어지고 극이미지를 실행시키면 컨테이너를 실행시킨다는 의미이다.
요약:컨테니어는 이미지로 실행시킨 컴퓨터이다.
도커 내부 접속
1.실행중인 터미널은 그대로 두고 새로운 터미널을 띄워준다. 이때 해당 폴더에서 일하는지 확인해줘야 한다.
2. docker ps로 현재프로세스를 확인해본다. 도커가 얼마나 있는지 알려달라는 의미이다. 현재 컨테이너들의 정보를 알수 있다.
3. dockerexec -it 컨테이너_아이디/bin/bash 로 컨테이너 내부에 들어갈수 있다.
4. exit로 터미널을 종료 시킬수 있다.
+5.docker rmi docker images -q 실행중인 이미지 제외하고 나머지 이미지 삭제

도커종료
docker ps -a -q :모든 것을 가져온다.
docker rm ps -a -q:모든 것을 지운다. 백틱을 사용했기에 백티으로 감싼 부분을 먼저 실행한다.
도커는 안정적으로 작동하므로 실행 중인 컨테이너는 지우지 않는다.
docker system prune -a: 실행중인 컨테이너느 제외하고 정지된 컨테이너를 모두지운다.
docker stop 컨테이너_아이디: 해당 컴테이너를 종료시킨다.

  • 포트 포워딩
    포트 포워딩의 문제가 발생하는 이유를 알아보자.내컴퓨터안에서 프론트엔드에서 포트번호3000으로 요청을 보냈다. 백엔드 서버의 포트번호가 3000이고 켜져있다면 요청을 받고 응답을 보낼것이다. 그런데 도커내에서 실행중인 컴퓨터의 포트번호가 3000이고 내 컴퓨터의 프론트앤드에서 포트번호3000으로 요청을 보냈다면 요청을 받을수 없다!!!!
    왜냐면!!! 내컴퓨터 내에서는 백엔드 서버가 켜진것이 없기에 요청을보낼 수 없다. 요청을 해보지만 서버를 찾을 수가 없는것이다.!!

이를 해결해주려고 가상 컴퓨터의 포트와 내컴퓨터의 포트를 연결해준다. 이게 포트포워딩이다.
이방법은 도커의 가상컴퓨터를 켜줄때 해야한다. 명령어는 다음과 같다.
명령어: docker run -p 내컴퓨터포트:도커 컴퓨터 포트 이미지_아이디 이렇게 입력하면 가상컴퓨터와 내컴퓨터의 포트를 연결할 수 있다.

내가 할 수 있는것을 하자. 과분한 목표를 설정하지 말고 내가 한걸음 나아갈 수 있는 목표를 꾸준히 세우고 달성하고를 꾸준히 반복하자.
부족한 부분은 공부를 거듭해나가면서 수정하자. 완벽이라는 허상을 바라지 말자. 계속 밀고 나가자.

profile
성장에 목마른 입문자입니다!

0개의 댓글