앞서 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 실행창이 뜨시는걸 보실수 있습니다.
ㅇ