docker run --name nginx -itd -p 80:80 debian:buster
-it
: 컨테이너와 쉘을 통해 상호작용하겠다라는 의미why?
-d
: 상호작용하고 있는 터미널이 끝나도 background에서 계속해서 컨테이너 구동-p
: port 80으로 포트포워딩name
생성할 컨테이너 이름 설정debian:buster
사용할 이미지 이름docker exec -it nginx bash
debian update
apt-get update -y
apt-get upgrade -y
nginx install and start
apt-get install nginx -y
service nginx start
docker build 과정을 아래와 같이 Dockerfile로 자동화시켜 image를 생성할 수 있다.
// Dockerfile
FROM debian:buster
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install nginx -y
EXPOSE 80
debian:buster
에서 base image 불러오기apt-get
으로 업데이드 및 필요한 패키지 설치docker build . -t nginx:latest
로 이미지 생성
.
: 현재 경로의 Dockerfile 실행-t
: image 이름 설정docker run -it -d -p 80:80 --name nginx nginx:latest
nginx:latest
이미지를 사용하고, 80번 포트로 소통하는nginx
라는 이름을 가진 컨테이너 생성docker exec -it nginx bash
로 해당 컨테이너에 접근할 수 있다.
ssl 적용을 위해 apt-get install로 openssl
을 설치하는 명령어 추가.
FROM debian:buster
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install nginx -y
RUN apt-get install openssl -y
COPY conf/default /
RUN mv default /etc/nginx/sites-available/default
RUN openssl genrsa -out server.key 4096
RUN openssl req -new -key server.key -subj "/C=KR/ST=Seoul/O=42Seoul/OU=Shin" -out server.csr
RUN openssl req -x509 -in server.csr -key server.key -out server.crt
RUN mv server.crt /etc/ssl/certs/
RUN mv server.csr server.key /etc/ssl/private
ENTRYPOINT ["nginx", "-g", "daemon off;"]
EXPOSE 443
conf
파일 nginx에 적용
ssl
보안 설정
ENRTYPOINT
: 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행하는 역할. 즉 docker run 명령으로 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 실행된다. ENTRYPOINT는 Dockerfile에서 단 한번만 사용할 수 있습니다
docker-compose로 Dockerfile을 읽어 이미지 생성 후 컨테이너를 생성하는 일련의 과정을 자동화해보자.
version: "3.8"
services:
nginx:
build: requirements/nginx
container_name: nginx
ports:
- 443:443
restart: always
version
: docker version에 따라 작성
service
: 각각의 컨테이너로 구현될 어플리케이션 명시를 위한 구문
build
: 이미지를 빌드할 도커 파일 경로port
: 맵핑할 포트포트 맵핑이란? Port forwarding
volume
: 볼륨 설정을 위한 항목, 연동이 필요한 로컬 호스트의 안의 볼륨 경로와 컨테이너의 경로 명시.env
: 컨테이너 안에서 사용할 환경변수 명시volumes
: 로컬 볼륨 파일과 컨테이너 파일 연결