참고
- [Container 시리즈] 03. Docker File, Docker Image - 도커파일 및 이미지에 대하여 : 오픈소스컨설팅
- [도커] 외부에서 도커 컨테이너의 웹페이지에 접근하는 방법 - HwanShell](https://hwan-shell.tistory.com/183)
nginx가 설치된 ubuntu 이미지를 dockerfile로 만들어 봅니다.
샘플은 문서 하단에 있습니다.
요약
#작업경로 생성 후 이동
mkdir sampledocker
cd sampledocker/
큰 의미가 있지는 않지만 그냥 아무 파일도 없는 곳에서 작업을 하고 싶어서....
#dockerfile 생성
vi dockerfile
dockerfile의 내용
FROM ubuntu:18.04
LABEL maintainer="rapker@cloocus.com"
RUN apt-get update
RUN apt-get install -y nginx
WORKDIR /etc/nginx
CMD ["nginx", "-g", "daemon off;"]
EXPOSE 80
#도커파일 빌드
docker build --force-rm --tag mynginx:0.1 .
#컨테이너 실행
docker run -dit --name port_open_server -p 8080:80 mynginx:0.1
#nginx 접근 테스트
host에서 접근
host 외부에서 접근
자세히
#dockerfile 키워드 의미
Dockerfile Keyword - Docker docs
Dockerfile 구문 및 옵션 - DongDongE_Blog
FROM 베이스 이미지 지정 FROM ubuntu:18.04
LABEL | 작성자 정보 | LABEL maintainer="rapker@http://cloocus.com/" | |
RUN | 빌드타임에 쉘 스크립트 실행 | RUN apt-get updateRUN apt-get install -y nginx | -y 옵션으로 빌드중 키 입력 방지 |
WORKDIR | 컨테이너 실행 시 해당 경로로 이동 | WORKDIR /etc/nginx | |
CMD | 컨테이너 실행 시 해당 cmd 실행 | CMD ["nginx", "-g", "daemon off;"] | nginx를 foreground로 실행 |
EXPOSE | host와 연결할 port설정 | EXPOSE 80 |
#도커파일 빌드
가장 기본적으로 사용하는 빌드방법
- dockerfile이 있는 곳으로 이동
- docker build 실행
docker build --force-rm --tag mynginx:0.1 .
- -force-rm : 이미지 빌드중 생성되는 임시 컨테이너 삭제
- -tag : 빌드된 이미지의 네이밍
- . : dockerfile의 경로
#자세한 빌드 옵션
docker build [options] path | url | -
#컨테이너 실행
docker run -dit --name port_open_server -p 8080:80 mynginx:0.1
- dit : -d -i -t 옵션을 요약해서 사용
- d : daemon (background)으로 실행
- i : interactive - 컨테이너와 상호작용 - 입출력 허용
- t : tty(teletypewriter) - 터미널 환경처럼 사용
- -name : 실행할 컨테이너의 이름
- p : host에 8080 port로 들어오면 컨테이너에 80으로 전달
- mynginx:0.1 : [이미지 이름]:[태그]
host외부에서 container에 접근이 가능하게 하려면 --cap-add-NET_ADMIN 옵션을 추가해야 한다는 글도 있었지만
해당 옵션을 사용하지 않아도 host 외부에서 웹페이지 접근이 가능했음
(제반 환경 차이가 있었을지도 몰라서 기록용으로 남겨둠)
docker run --cap-add=NET_ADMIN -dit --name port_open_server -p 8080:80 mynginx:0.1
#특이사항
이미지 만들 때 nginx는 foreground로 실행 (CMD ["nginx", "-g", "daemon off;"]) 하도록 빌드하고
만들어진 이미지를 실행할 때 container는 background로 실행 (docker run -d) 하는것이 핵심
왜 이렇게 해야 되는지 설명된 글은 찾지 못했지만
추측으로는
- container 내부에는 nginx 외 다른 application을 실행하지 않도록 하고
- container 자체는 daemon으로 띄워만 놓으면 되기 때문
- foreground로 실행시킬 이유도 딱히 없고...
Dockerfile Samples
FROM ubuntu:20.04
RUN apt-get -y update
RUN mkdir -p /app
COPY . /app
WORKDIR /app
RUN apt-get -y install curl
CMD ./AppServer
EXPOSE 7777
FROM ubuntu:20.04
RUN apt-get -y update
RUN mkdir -p /app
COPY . /app
WORKDIR /app
RUN apt-get -y install curl
#ENV SIGN_ID rapker
#ENV SIGN_PW rapker
#ENV SERVER_ADDR 15.164.240.10
#ENV SERVER_PORT 30039
CMD ./AppServer-AutoSignId $SIGN_ID -AutoSignPw $SIGN_PW -ServerAddr $SERVER_ADDR -ServerPort $SERVER_PORT
#EXPOSE 7777
FROM ubuntu:20.04
RUN apt-get -y update
RUN mkdir -p /app
COPY . /app
WORKDIR /app
#RUN mkdir -p /etc/ssl/certs && ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt
RUN apt-get -y install curl
#ENV SPACE_ID 1001
CMD ./AppServer -AppType Server -OwnerUserID $OWNER_ID -SpaceId $SPACE_ID -SpaceName $SPACE_NAME -SpaceJsonUrl $SPACE_JSON_URL
#CMD ["./AppServer", -AppType Server -SpaceId 1001"]
EXPOSE 7777
'IT > Kubernetes' 카테고리의 다른 글
[Docker] 기본 네트워크 구성 변경 (0) | 2023.04.08 |
---|---|
[Docker] Network - 기본 네트워크 구성 실패 및 복구 (2) | 2023.04.08 |
[Docker] 기본 실행 및 명령어 (1) | 2023.04.08 |
[Docker] 도커 설치 (0) | 2023.04.08 |
[Docker] 도커 시작하며 사전 조사했던 내용 (1) | 2023.04.08 |