About Dockerfile

mkhome·2021년 5월 20일
0

docker

목록 보기
3/4
  • 회사에서 쓰고 도커와 관련된 업무를 진행할 때 이미 작성된 도커파일, 그리고 AWS codepipeline을 적절히 사용하고 있는중이다.
    하지만 docker에 대해 더 알아보고 내용을 찾을수록 대다수의 사용자들이 컨테이너를 배포하는 단계에서 docker run -p(혹은 -P)를 사용하고 있고 우리같은 경우는 dokcerfile의 EXPOSE 명령어를 사용하고 있으며 확인해보니 조금의 차이가 있음을 알게 되었다.
  1. (sudo) docker run (-d 여기는 변경 가능) -p
    해당 명령어의 경우 docker run -p xxxx:80 name 으로 사용할 수 있다. 이는 호스트의 xxxx포트를 컨테이너의 80번 포트와 맵핑시킨다는 말이다. 즉 호스트의 xxxx로 전달된 정보들이 컨테이너 환경의 80번 포트로 포워딩 된다는 의미이다. 만약 대문자 -P를 사용할 경우엔 호스트의 랜덤 포트와 컨테니어의 80번 포트가 맵핑된다.
  2. EXPOSE 80
    해당 명령어는 쉽게 말해 이미지의 80번 포트를 외부에 공개할 예정이다 라는 의미이다. 이때 명시된 포트는 docker run -P 명령을 통해 호스트 운영체제로 오픈된다. 즉 랜덤포트번호와 맵핑이 된다는 의미다. 또한 뭐 GUI 프로그램을 통해 도커를 관리할 때 -p옵션으로 줄 수도 있다고 하는데 해당 부분은 정확히 모르겠음...

우린 지금 docker swarm을 사용하고 있기에 docker run이 아닌 docker service create ----- 를 통해서 배포가 진행된다.


// 하는김에 docker service create 관련 내용 추가
sudo docker service create \
--name xxx \
--network=traefik \
--mount "type=bind,source=------" \
--mount "type=bind,source=/opt/keys,target=/opt/keys" \
--replicas 2 \
-l "traefik---:/" \
-l "traefik------" \
-l "traefik.port=80" \
-e "DJANGO_SETTINGS_MODULE=xxxx
REPOURL:{REPO_URL}:{VERSION}

  • 위의 코드가 현재 회사 dockerfile에 있는 create 구문
    --name xxx는 xxx이름으로 컨테이너 생성
    --network는 사용할 네트워크 (우리는 traefik 사용)
    --mount의 경우 서비스에 파일 시스템을 첨부하는것 보면 원래 있던 파일을 찾아서 저기에 복사 붙여넣기 하겠다는 말
    -l은 label, -e는 env를 의미
    마지막에 달러표시에 있는건 이미지를 의미

결국 (sudo) docker service created [option] IMAGE [COMMAND]로 표현할 수 있으며 \는 여기서도 역시나 다음 줄을 의미함.

sudo docker system prune -af 마지막에 이건 현재 호스트에 저장된 이미지 중 사용되지 않는 부분(중복인가)을 삭제하는 명령어
sudo docker system prune는 중지된 컨테이너를 모두 삭제

docker service update 이미지:태그 명시한 이미지로 서비스를 업데이트 한다.-->

docker commit -> 컨테이너의 현재 상태 이미지 파일로 생성합니다.

0개의 댓글