✔ 6/12

ENTRYPOINT vs. CMD

  1. ENTRYPOINT가 있으면 CMD 값이 파라미터로 실행됨
  2. 아니면 CMD가 실행됨

docker run vs. docker exec

  • 공통점: 두 명령 모두 Container ID 필요, --user root 또는 -u root를 통해 루트 유저로 연결 가능
  • docker run: 새로운 Container를 실행
  • docker exec: 이미 실행된 Container에 작업하는 것

✔ 6/13

Docker 컨테이너 내부 프로세스가 오픈한 포트번호를 외부로 노출시키기

  • 포트맵핑(=포트포워딩)
    예시로 내부에 4000 포트 열었고, 외부에도 4000번 포트로 오픈하고 싶다면,$ docker run -p 4000:4000 {이미지_이름}

✔ 6/14

Docker Volume

  • Docker Container 내의 가상 파일 시스템과 호스트 시스템 파일 시스템을 맵핑
    • 예시) 호스트 파일 시스템의 /home/heering/logs를 Docker Container의 /var/lib/airflow/logs로 맵핑
    • 이 경우 Docker Container가 중단되더라도 모든 Airflow logs는 기록이 남게 됨
  • Dockerfile
    • VOLUME 명령을 통해 anonymous volume만 지정 가능
  • docker-compose
    • Host Volume이나 Named Volume을 사용하는 것이 일반적

✔ 6/15

Docker-Compose

  • 다수의 컨테이너로 소프트웨어가 구성되는 경우 사용할 수 있는 툴 + 환경설정 파일

    • docker-compose.yml로 설정
  • 개별 컨테이너를 따로 관리하는 것보다 훨씬 더 생산성이 높음

  • docker-compose down: 컨테이너 정지 + 삭제, 이미지는 삭제 안함

  • docker-compose.ymldepends_on

    • condition으로 가능한 값
    service_startedservice_healthyservice_completed_successfully
    service가 healthy한지 아닌지 상관없이 해당 컨테이너가 시작했으면 나를 실행해라.해당 service가 healthy할 때 내 서비스 실행초기화 작업 한 번 해주고, 초기화 작업이 성공적으로 끝나면 뒤에 있는 컨테이너들이 실행하도록 해야 할 때가 있음. 초기화 해야하는 컨테이너 제외, 나머지 모든 컨테이너들이 depends_on: {초기화 해야 하는 서비스명}: condition: service_completed_successfully.

Docker-Compose build 안될 때 해결법

$ docker-compose -f docker-compose.mac.yml build 를 하려 했더니, 아래처럼...

failed to do request: head "https://registry-1.docker.io/v2/library/python/manifests/3.9-slim": proxyconnect tcp: ~~ 매우 긴 오류

오늘도 어김없이 나타난 오류. 전체 다 복사해서 검색했더니 안 나와서 영어로 대충 지어내니까, 또 stack overflow에 해답이 있었다. 😆

Windows 10 + wsl2 환경에서, 아래처럼 입력하고
sudo vi /mnt/c/users/<username>/.docker/config.json

수정을 아래와 같이 한다. credsStore에서 s 하나 빼기. 근데 사실 이거는 눈속임이고 json파일 자체를 지워도 되지 않을까 싶다..?

{
  "credStore": "desktop"
}

이렇게 해도 오류가 난다면 Docker Desktop restart를 해볼 것.

0개의 댓글