Docker 기본이미지로 Custom Image 만들기(tag,commit)

앞서 docker에 대한 설명, 그리고 간단한 튜토리얼까지 진행해봤습니다.

이번에는 Docker 컨테이너로 다른 Ubuntu를 설치하고 직접 서비스까지 설치해보면서 Custom 이미지도 만들어보도록 하겠습ㅂ니다.

Ubuntu 이미지 확인

https://hub.docker.com/_/ubuntu

기본적인 Ubuntu 이미지에 대한 정보입니다.
설치할때 태그를 변경하게되면 꼭 최신버전이 아니라 다른버전으로 설치할 수 도있습니다.

특정 버전에서 동작해야하는 도커 이미지라면 이렇게 뒤에 태그를 달아서 이미지를 구분해서 사용할 수 있습니다.

기본적으로 ubuntu image를 pull하게되면 default로 latest버전을 받게되는데

아래처럼 docker pull ubuntu:bionic 으로 특정 태그를 지정해주면
최신 버전이 아닌 18.04 우분투 버전을 받게됩니다.

이미지를 확인해보면 이렇게 구분되어있는걸 확인할 수 있습니다.

Ubuntu 컨테이너 만들어보기

이제 위 이미지들을 가지고 컨테이너를 만들어보겠습니다.

기본적으로 도커를 생성하는 명령어인 create가 있지만 만들고 보통 바로 동작시키기 때문에 저는 run으로했습니다. run과 create만 바꿔주면 됩니다,
docker run --name ubuntu-20 -d -i -t --restart always ubuntu

위 명령어가 다소 복잡해 보인다면 하나씩 정리해보겠습니다.
–name : 컨테이너에 이름 설정
-d : 데몬형식으로 백그라운드 동작
-i : 상호 입출력
-t : tty를 활성화하여 bash쉘 활성화
–restart always : 도커 실행시 자동으로 시작되도록 설정
ubuntu : 사용될 이미지

이렇게 생성했으면 컨테이너가 동작하는지 확인해봐야할텐데
docker ps 명령어로 확인 가능합니다.

도커 컨테이너 내부에 진입하기

앞서 컨테이너를 생성할때 -it 옵션을 주었기 때문에 도커 내부에도 진입해서 쉘 사용이 가능합니다. 아래 명령어로 컨테이너에 진입할 수 있습니다.

docker attach [컨테이너 이름]

컨테이너 내부에서 OS 버전을 확인해봤습니다.

컨테이너에서 나올때는 exit

비교를 위해서 ubuntu-18버전을 추가 생성해서 보여드리겠습니다.
위에 했던대로 생성하고 attach 명령어로 진입한 상태입니다.

Ubuntu 컨테이너에 nginx 설치하고 테스트하기

위 Ubuntu-18 컨테이너에 진입해서 nginx를 설치하고 테스트해보겠습니다.
먼저 내부 진입 후 apt update && apt upgrade -y 로 패키지를 최신업데이트해줍니다.

그리고 apt install nginx로 nginx를 설치하겠습니다.

설치후에 service nginx start 명령어로 nginx를 실행시켜줍니다.

설치후에 동작하는지 확인하려면 net-tools가 필요한데 apt install net-tools로 설치해줍시다.
컨테이너 내부에서는 80포트로 잘 오픈되있습니다.

exit로 나가서 컨테이너 외부로 나가서 netstat 명령어를 다시해보겠습니다

여기에는 80번 포트가 오픈되지않았습니다.
그이유는 Host와 Container 사이에 port 매핑이 없기때문에 이런 현상이 발생하게 됩니다.
애초에 컨테이너를 생성할때 -p 옵션으로 -p 80:80과 같이 포트매핑을 시켜줬다면 아마 정상동작을 했을겁니다..

docker commit 하기

그래서 사용해볼 명령어는 docker commit 입니다.
docker 컨테이너 내에 설치한 프로그램이나 셋팅을 유지한채로 직접 이미지를 생성하는 과정입니다.
위에서 ubuntu 생성에서 nginx 설치까지 진행했으니 그상태로 이미지를 만들게 됩니다.

먼저 컨테이너를 중지시켜줍니다.

docker stop [컨테이너이름]

docker commit [컨테이너이름] [이미지이름:Tag]

commit을 하고 image 목록을 보면 방금 commit한 이미지가 생성된것을 확인할 수 있습니다.

그리고 이 이미지를 가지고 다시 컨테이너를 만들어보겠습니다.

docker run --name ubuntu-nginx -d -it -p 80:80 --restart always ubuntu-nginx:dalso

여기서 추가된 옵션은 -p 옵션인데 host와 container의 포트 매칭입니다.

컨테이너 생성/실행후에 netstat -lntp

이미지를 만들때 nginx 자동실행을 추가안해놔서..ㅋㅋ 들어가서 시작해야하네요..
간단한 부분이기 때문에 쉽게들 고치실거라고 생각합니다.

service nginx start로 실행시킨뒤에 host의 80번 포트로 접속하면 nginx 실행창이 뜨시는걸 보실수 있습니다.

 

————————————————–

사이트 리뉴얼중입니다~

서버(Linux, ESXi), NAS(헤놀로지, ESXi 및 IT관련 정보, 기타 등등을 공유하는 커뮤니티 SVRFORUM을 새로 만들었습니다.
많은 가입(?) 부탁드립니다~
https://svrforum.com

이전글들은 모두 상단 메뉴의 Blog 글 모음에있습니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

홈서버 IT 커뮤니티 SVRFORUM
Link