본문 바로가기

IT/Docker

[Docker] 이미지 생성

1. Dockerfile 작성

Docker Build를 위해 별도 디렉토리를 만들고, ubuntu 이미지를 준비한다.

[devops@centos ~]$ mkdir example
[devops@centos ~]$ cd example/
[devops@centos example]$ ls -rlt
total 0
[devops@centos ~]$ sudo docker pull ubuntu
[devops@centos example]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    latest              8e428cff54c8        4 days ago          72.9 MB

Dockerfile은 Docker 이미지 설정 파일이다. Dockerfile에 설정된 내용대로 이미지를 생성한다.

[devops@centos example]$ vi Dockerfile

devops@example.com>[devops@centos example]$ cat Dockerfile
FROM ubuntu:latest
MAINTAINER devops <devops@example.com>
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >>  /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx

VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]

WORKDIR /etc/nginx

CMD ["nginx"]

EXPOSE 80
EXPOSE 443
  • FROM : Base 이미지를 설정한다. Docker 이미지는 기존에 만들어진 이미지를 기반으로 생성한다ㅏ. <이미지 이름>:<태그> 형식으로 설정한다.
  • MAINTAINER : 메인테이너 정보
  • RUN : 쉘 스크립트나 명령을 수행한다. (이미지 생성 중에는 입력을 받을 수 없으므로, -y옵션을 사용한다.)
  • VOLUME : 호스트와 공유할 디렉토리 목록이다.
  • CMD : 컨테이너가 실행 되었을 때 실행할 파일 또는 쉘 스크립트
  • WORKDIR : CMD에서 설정한 실행 파일이 실행될 디렉터리
  • EXPOSE : 호스트와 연결할 포트

2. docker build

Dockerfile이 저장된 디렉터리에서 docker build를 수행한다.

[devops@centos example]$ sudo docker build --tag hello:0.1 .
[devops@centos example]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello               0.1                 c40f42dc1a82        9 seconds ago       160 MB
docker.io/ubuntu    latest              8e428cff54c8        4 days ago          72.9 MB

Docker 이미지가 hello:0.1로 생성된 것을 확인할 수 있다.

[devops@centos example]$ sudo docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1
  • -d : 컨테이너를 백그라운드로 실행
  • -p 80:80 : 호스트의 80번 포트와 컨테이너의 80번 포트를 연결
  • -v /root/data:/data : 호스트의 /root/data 디렉터리를 컨테이너의 /data디렉터리에 연결

nginx가 기동되었기 때문에, 웹 브라우저를 띄우고 테스트 해본다.

호스트 IP로 접속 했을 때, 정상적으로 포트포워딩 되어 nginx 페이지가 뜨는 것을 확인할 수 있다.

'IT > Docker' 카테고리의 다른 글

[Docker] 기본 사용 명령어  (0) 2021.03.30
[Docker] 설치 및 기본 명령어  (0) 2021.03.25
[Docker] Image & Container  (0) 2021.03.25
[Docker] Container?  (0) 2021.03.24