카테고리 없음

10월 29일 docker 사용법

seongjin08 2021. 10. 29. 17:38

먼저 데스크탑에 docker을 다운로드한다.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

윈도우는 파워쉘에서 맥은 터미널에서 docker 가 잘 깔렸는지 명령어를 쳐서 확인해 본다

docker 를 쓰기 위해서는 본인이 편한 IDE 와 git 을 설치해야 한다.

 

실습을 위해 IDE 를 켜고 터미널에 

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

으로 실습 예제을 다운 받는다.

 

내컴퓨터에 nodejs 가 깔려있지 않다고 가정하고 javascript를 실행하기위해

docker을 사용한다.

터미널에  

docker run -it node

어떤 명령어든 permission 관련 오류가 뜨면 앞에 sudo 를 붙여 명령어를 쳐준다.

sudo docker run -it node

 

이처럼 커서가 변한다.

docker 개발에 필요한 거의 모든 환경을 이미지 형식으로 가지고 있기때문에 

개발자가 사용하기 편한 환경을 만들어준다.

run -it node 는 먼저 내 컴퓨터에 node 가 있는지 체크하고 없으면 다운받은후 

바로 실행시켜준다.

-it

은 run 명령어 옵션으로 사용되며 이 컨테이너 를 연다음 그 환경안에서 cli로 사용하겠다는거

 

 

 

다운만 받고 싶다면 

docker pull [이미지명]:[태그]

ex). docker pull python:3

이같이 쳐주면 된다.

 

내 컴퓨터에 내 도커 이미지 보기

docker images

 

이미지로 컨테이너 생성하기

docker create [옵션] [이미지명]:[태그]

ex) docker create -it python

 

만들어진 컨테이너 시작하기(이미지에 cmd 로 지전해놓은 작업시키기)

docker start [컨케이너 id 또는 이름]

 

컨테이너로 들어가기 (컨테이너 내 cli 이용하기)

dcker attach [컨테이너 id 또는 이름]

 

 

docker ps

를 치면 컨테이너를 확인할수 있다.

 

docker exec -it [컨테이너명] bash

 

컨테이너 내부를 통해 가상의 리눅스 환경으로 들어간것이다

그렇다고 리눅스가 다 들어가있는것은 아니다!

여기서 리눅스는 docker desktop 으로 구현 되어 있는 것이다.

 

어떤 os 에서 작업하든 docker에 가상환경에서 돌아감으로 편리하다.

 

docker ps -a 

를 입력하면 작업중이지 않더라도 모든 컨테이너를 확인할수 있다.

 

 

동작중인 컨테이너 재시작

docker restart [컨테이너 id 또는 이름]

 

도커 컨테이너의 내부 쉘에서 빠져나오기 (컨테인너를 종료)

exit  또는 Ctrl+D

 

도커 컨테이너의 내부 쉘에서 빠져나오기 (컨테이너를 종료하지 않음)

Ctrl+P,Q

 

컨테이너 삭제 

dockser rm [컨테이너 id 또는 이름]

모든 컨테이너 삭제

docker rm `docker ps -a -q`

이미지 삭제 

docker rmi [옵션] [이미지 id]

컨테이너가 있을시 강제 삭제 -f 옵션 사용

 

모든 컨테이너와 이미지 등 도커 요소 중지 및 삭제 

모든 컨테이너 중지

docker stop ${docker ps -aq}

사용되지 않는 모든 도커 요소 (컨테이너 ,이미지 ,네트워크,볼륨 등) 삭제

docker system prune -a

 

도커파일 이미지 생성

(Dockerfile 파일이 있는 디렉토리 기준, 마지막의 .이 상대주소)

docker build -t [이미지명]

도커 컴포즈 실행

(dicker-compose 파일이 있는 디렉토리 기준)

docker-compose up

 

 

run 명령어는 이미지를 생성하는 과정에서 실행할 명령어

 

workdir 는 이미지 내 에서 명령어를 실행할 (현 위치로 잡을 ) 디렉토리 설정

 

cmd 컨테이너 실행시 실행할 명령어 

 

frontend 파일 위치에서 

docker build -t jin-img .

실해시켜주면 

node 가 없을시 설치후 http-server를 다운받아 입힌후

http-server를 /home/node/app 에서 실행 시켜주는것이다.

 

docker images

를 입력하면 만들어지 이미지를 확인 할 수있다.

 

                                [컨테이너 명]                                                                       [이미지명]

docker run --name frontend-con ${pwd}:/home/node/app -p 8080 :8080 jin-img

 

 

 

이번에는 데이터 베이스를  작업해보자

 

ENV 는 환경변수를 미리지정하는 것이다.

실전에서는 따로 다른파일에서 관리하자!

 

COPY 명령어는 ./scripts/ 안에 파일을 /docker-entrypoint-initdb.d/ 안으로 복사한다는것이다.

컨테이너 를 실행할때 안에 query 문을 같이 실행 시키는 것이다.

 

 

 

docker build -t database-img . 

 

build 시 m1 칩일 겨우 에러가 날것이다.

 

FROM 부분을 --platform=linux/x86_64 mysql:5.7. 로 설정해주어야 이미지 빌드가 된다.

 

docker run --name database-con -v 3306:3306 db-img

 

이렇게 하나씩 돌리기 번거롭고 각각의 컨테이너가 연결해서 사용하지 못함으로

이렇게 상위폴더에 docker-compose 파일을 만들어서 설정을 하고 한번에 돌릴 수 있다.

각 componet에 build 위치와 ports 를 정해주고 volumes 이필요한 부분을 설정해준 후 

 

 

docker-compose up 

 

명령어를 쳐주면 빌드가 된 후 연결되어 작동한다.