토이 프로젝트를 하기에 앞서, 생각만 하고 있던 Docker로 프로젝트 환경 설정을 해 놓고 써먹으려고 한다.
설정하려는 프로젝트 환경은 아래와 같다.
1) React/Enact 개발 환경 설정
- React/Enact 서버 실행 시, 외부로 컨테이너를 노출시켜야 한다.
이는 컨테이너를 만들 때 -p 옵션을 사용하여 노출시킬 수 있으며,
Container Port 쪽에 React/Enact Node 서버의 포트를 적어 주면 된다.
(-p [HOST IP:PORT]:[CONTAINER PORT])
* 참조 : https://imkh.dev/docker-expose-ports
1. Docker 설치
- 각 OS 환경에 맞는 Docker를 설치한다. (https://www.docker.com/products/docker-desktop/)
우분투
1) 도커 실행상태 확인
sudo systemctl status docker
2) 도커 실행
sudo docker run hello-world
3) 도커 데몬이 실행되어 있지 않을 때
https://help.iwinv.kr/manual/read.html?idx=906
2. 우분투 이미지 설치
나는 우분투 이미지를 기반으로 하여 프로젝트를 개발하려고 한다.
docker 명령어 실행할 때, root 권한이 아니면 오류가 나는 경우가 있으니 가급적이면 root 권한으로 실행하자.
아래 명령어를 실행하면, Docker Hub에서 자동으로 가장 최신의 이미지를 가져와 설치해 준다.
docker pull ubuntu
3. 설치된 우분투 이미지 확인
우분투 이미지가 잘 설치되었는지 확인한다.
docker image ls
docker images
4. 이미지를 이용해 컨테이너 만들고 접속하기
위에서 설치한 이미지를 이용해 컨테이너를 만들고 접속하는 과정이다.
docker run -it \ # 가상 터미널을 열어 키보드로 표준 입력을 전달할 수 있는 옵션
-d \ # 백그라운드에서 실행
-p 80:80 \ # 포트 설정
-v (호스트 경로:컨테이너 경로) \ # bind_mount (호스트 OS 폴더 마운트)
--name my_container \ # 컨테이너 이름
my_image_name:tag \ # 사용할 이미지명(tag 없으면 latest로 처리)
bash
(ex) docker run -v ./dockerwork:/work --name test_container -itd ubuntu
docker exec -it (컨테이너 이름 or ID) /bin/bash
※ 현재 존재하는 docker 이미지 확인
docker image ls
docker images
※ 현재 존재하는 docker 컨테이너 확인
docker container ls
※ 기본적인 것이 설치되어 있지 않을 때 실행
apt-get update
apt-get install apt-file
apt-file update
※ 외부 폴더와 연결할 때, 해당 외부 폴더의 권한을 풀어 두어야 한다.
※ docker container 관련 명령어 : https://blog.naver.com/finway/220974632766
5. 컨테이너 수정 후 commit하고 push하기
컨테이너에서 환경을 설정한 후 해당 상태를 이미지로 만들고 commit 하는 과정이다.
1) commit 하기
docker commit [OPTIONS] 컨테이너 이름 [REPOSITORY[:TAG]]
(ex) docker commit -a "(author 이름)" -m "(커밋 메시지)" test-container commit_test:latest
2) 이후 docker images 명령어로 이미지가 생성된 것을 확인할 수 있다.
3) Docker Hub에 배포하기 위해 로그인한다.
docker login
※ 맥에서 Docker 로그인이 안 되는 경우 해결 : https://qkqhxla1.tistory.com/1123
※ docker 이미지명/태그명 변경 : docker image tag <기존의 이미지명>:<기존의 태그명> <새로운 이미지명>:<새로운 태그명>
4) Docker Hub에 commit 해 둔 이미지를 push 한다.
docker image push dockerID/Image name:tag
※ push할 때, 이미지 이름의 형식이 "(docker ID)/이미지 이름" 형식이어야 한다. 아니면 push가 되지 않는다.
https://velog.io/@eunsilson/Docker-Docker-Hub-push-%EC%8B%A4%ED%8C%A8-requested-access-to-the-resource-is-denied
6. Docker 이미지 가져오기
docker image pull 이미지 이름
7. 도커 레이어 분석 툴 - dive
※ 설치한 도구 목록
1) vi/vim : apt-get install vim
2) nano : apt-get install nano
3) git : apt-get install git
4) tig : apt-get install tig
5) node/npm
- apt update
- apt install nodejs npm
6) curl 설치
- apt update
- apt upgrade
- apt install curl
7) n (단, n으로 node 버전을 내려받기 위해서는 curl이나 wget 필요)
- npm install -g n
※ n 설치 후 업데이트 시 install 경로와 active 경로가 다른 경우
https://velog.io/@younoah/n-path 참조 또는 hash -r/rehash 명령어 입력
8) enact 설치 : npm install -g @enact/cli
※ 참조 링크