[TOAST Study] 6. 도커 이미지 생성

이번에 수행할 과제는 만들어주신 ubuntu 18.04 베이스 이미지를 실행한 컨테이너에 여러 어플리케이션을 설치하여 새로운 이미지로 만들어 다른 os를 사용하는 인스턴스 (centOS, ubuntu 다른 버전 등) 에서 docker를 이용하여 이미지를 받아와 내가 설치한 소프트웨어를 실행해보는 작업이다.

전달받은 파일은 Dockerfile과 이미지를 생성하는 쉘 스크립트 파일 'start_build_n_run.sh'파일, entrypoint를 설정하는 'entrypoint.sh' 파일 이다.
Dockerfile 이란, Docker 이미지 설정 파일로 이 파일에 설정된 내용대로 이미지를 생성한다.


start_build_n_run.sh 쉘 스크립트 파일은 실행하면 도커 이미지 파일을 빌드하고 컨테이너로 실행하는 파일이다.

Entrypoint 는 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행한다. 즉 docker run 명령으로 컨테이너를 생성했을 때나, docker start 명령으로 컨테이너를 시작할 때 실행된다. 

  살펴보면 자동으로 xrdp (원격 접속) 서비스를 시작하고 있는 것을 볼 수 있다.

이미지를 정상적으로 생성하고 컨테이너로 실행해보았다. 컨테이너 생성 옵션은
docker run -it --name test -p 13389:3389 simc26/test_image:1.0
-i : interactive / -t : Pseudo-tty 옵션이 합쳐진 것이 -it 옵션으로, 사용시 Bash 셸에 입력 및 출력을 할 수 있다.
--name : 컨테이너의 이름을 지정할 수 있는 옵션이다. 지정하지 않으면 Docker가 자동으로 랜덤 이름을 생성하여 저장한다.
-p : 호스트 포트와 컨테이너 포트를 연결하는 옵션이다. 형식은 '호스트 포트:컨테이너포트', 즉 나는 내 서버의 13389 포트와 컨테이너의 3389 포트를 연결한 셈이다. 토스트 서버의 보안그룹에서 13389 포트는 개방해놓은 상태였고, 3389로 설정한 이유는 Dockerfile에서 포트는 3389로 설정하는 것처럼 보이는 코드가 있었기 때문이었다. 하지만 원격접속에 실패하여 /etc/xrdp/xrdp.ini 파일에 포트 번호를 확인해보니 13389로 설정되어있었다.
따라서
1. xrdp.ini 파일의 포트 번호를 3389로 수정
2. 컨테이너를 삭제하고 다시 run 하고 이때 -p 옵션을 13389:13389로 주는 것
두가지 해결 방법이 있었다.

나중에 알고보니 이전에 build n run 쉘 스크립터 파일을 실행 하는 방식이
./start_build_n_run.sh [포트번호] [이미지 이름] [컨테이너이름] 이었다.
내가 이전에 빌드할 때 지정한 포트번호를 착각하고 컨테이너를 잘못 만든 것이었다.

수정 후 정상적으로 원격접속에 성공했다.

초반 인스턴스 생성시 설치했던 어플리케이션들을 차례대로 설치하고, 설치 할 때마다 commit 명령으로 컨테이너의 변경사항을 이미지로 생성했다.
docker commit -a "사용자이름" -m "변경사항" [컨테이너 이름] [이미지 이름]
이미지 이름으로 태그만 1.0 - > 2.0 변경해주면 도커를 이용하여 버전관리를 할 수 있다.
하지만 commit 방식은 최근 실무에서는 잘 쓰이지 않는다고 한다. Dockerfile의 베이스 이미지를 바꿔 새 이미지를 빌드하는 방식이 버전관리에 사용되는 것으로 보인다.
하지만 Dockerfile 작성 문법을 공부하기에 앞서 commit 명령어도 사용해 보고자 나는 컨테이너 내에 소프트웨어 설치하는 방식으로 과제를 진행했다.

이클립스, vs code, gcc, jdk(8) 설치를 끝낸 test_image:5.0 파일을 내 도커 허브 계정에 push 했다.


다른 운영체제에서도 이미지가 정상 작동하는지 확인하기 위해 centOS로 새로운 인스턴스를 생성했다. 


새로만든 인스턴스에서 도커허브에 로그인하여 내 이미지를 PULL 한다.
port 옵션 13389:13389 로 컨테이너를 run 했다. 따라서 앞서 발생했던 포트 불일치 오류는 이번에는 발생하지 않았다.


centos 인스턴스의 13389 포트로 원격 접속하여 확인한 ubuntu gui 화면과 설치해뒀던 eclipse, vs code가 설치되어있는 것을 확인할 수 있었다.

No comments:

Powered by Blogger.