일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- WORKDIR
- docker
- docker hub
- 명명된 볼륨
- Detached
- named volume
- Thymeleaf
- template engine
- spring boot
- Docker배경
- dockerignore
- docker image
- anonymous volume
- docker container
- crossbrowsing
- 도커파일
- dockerfile
- container
- Port Fowarding
- 컨테이너간 통신
- docker예시
- arg
- docker volume
- Copy
- 익명볼륨
- bind mount
- env
- attached
- repository
- Docker Desktop
- Today
- Total
목록docker (8)
코딩왕 미룡

네트워크 / 요청(request) 1. 컨테이너에서 웹사이트와의 통신 - 특별한 설정 없이 코드만으로 작동가능 2. 컨테이너와 호스트와의 통신 - 도커가 인식할 수 있는 특수 도메인(host.docker.internal)을 사용 3. 컨테이너와 컨테이너 간의 통신 - ex) 데이터베이스 컨테이너와 통신을 하고 싶음 - docker container inspect에서 IPAddress를 가져와 host.docker.internal를 대체 - 직접 컨테이너를 검사해서 적어야 하며 IPAddress가 변경되면 이미지를 다시 빌드해야 하는 번거로움이 있음 - 이를 해결하기 위해 --network 명령 사용 - -network - 위와 같은 과정을 자동으로 수행하는 명령어 - 컨테이너의 이름을 보고, 코드에 플러..
노드 이미지를 구축하고자 함 FROM node 디폴트로 모든 명령은 도커 컨테이너 및 이미지의 작업 디렉토리에서 실행 그 작업 디렉토리는 컨테이너 파일 시스템의 루트 폴더 npm install 도 app 폴더 내부에서 실행하고 싶음 도커에게 모든 명령이 그 폴더에서 실행되어야 한다고 알림 WORKDIR /app Dockerfile과 동일한 폴더에 있는 모든 파일 + 모든 하위폴더가 컨테이너 내부의 app 폴더에 복사됨 (폴더가 존재하지 않는 경우는 이미지와 컨테이너에 생성됨) WORKDIR 를 app 폴더로 지정했기 때문에 COPY도 이 작업 디렉토리를 기준으로 실행됨 but, 가독성을 위해 명시적으로 표현해주는 것이 좋음(절대경로) COPY . /app (모든 로컬 파일을 이미지에 복사한 후)노드 애플..
◦ docker push [] - Create repository - 레파지토리 이름 지정 후 public 선택 후 Create (개인 레파지토리는 하나밖에 생성 못함) - 업로드를 원하는 이미지의 name을 저장소에 적힌 슬래쉬(/)를 포함한 이름으로 바꿔야 함 - 이미지를 push 하는 경우 이미지의 전체가 업로드되지는 않음 ex) 내가 만든 이미지가 노드에 의존하고 있다면(dockerfile의 FROM에서 확인) 이미 도커 허브에 존재하는 이미지(노드)이므로 그 노드 이미지에 대한 연결을 설정하여 필요한 추가 코드만 푸시함 → 이미지 전체가 아닌 추가 정보만 푸시 ◦ docker pull (이 과정을 생략하고 run 해도 됨) ◦ docker run을 하는 경우 : 로컬 시스템에서 먼저 찾음 - 찾..
Dockerfile이란? ◦ Dokerfile을 생성하여 세부적인 명령을 제공 ◦ 이미지에 뭘 넣을 건지 어떤 이미지를 사용할 건지 어떤 코드와 어떤 종속성이 복사될 것인지 npm install과 같은 설정단계가 요구되는지 또 내부 포트를 열어 궁극적으로 외부에서 컨테이너를 다룰 수 있도록 수신대기를 하는 것 ◦ Dockerfile과 docker build는 새 이미지를 빌드 💡 컨테이너 실행 순서 1. Dockerfile 작성 2. terminal - docker build . (새 커스텀 이미지를 생성하되 실행하지 않음) 3. terminal - docker run -p 3000:80 [이미지 이름 or 이미지 아이디] - docker run : 이미지를 기반으로 컨테이너를 실행 - -p : publ..
◦ 소스코드에서 뭔가 변경이 있을 때마다 다시 빌드를 하지 않는 한 변경 사항은 실행 중인 컨테이너에 반영되지 않음 ◦ COPY 명령은 도커 이미지가 생성될 때 폴더의 스냅샷만 복사 ◦ 해당 폴더의 모든 변경사항은 이미지에 반영되지 않으므로 컨테이너도 변경 X ◦ 변경 사항이 있을 때마다 전체 이미지를 리빌드하는 것은 굉장히 비효율적이고 번거로움 ❗ 볼륨과 차이점 볼륨(volume) : - 도커가 관리하고 임의로 생성하기 때문에 위치를 알 수 없음 - 엑세스 불가능 바인드 마운트(bind mount) : - 호스트 머신 상에 매핑될 컨테이너의 경로를 설정(위치를 알 수 있음) - 다수의 컨테이너에서 공유할 수 있음 - 소스코드 자체를 바인드 마운트에 넣을 수 있음 컨테이너는 이를 인식하여 소스코드를 스냅..
◦ 도커가 인식하는 호스트 머신(내 컴퓨터)의 폴더 ◦ 도커 컨테이너 내부의 폴더에 매핑 ◦ 컨테이너에 정의된 경로는 생성된 어떤 볼륨에 매핑 → 호스트 머신 상의 생성된 어떠한 경로로 연결 (도커에서 관리하므로 어떤 폴더인지는 알 수 없음, 엑세스 불가능) ◦ 데이터를 읽고 쓸 수 있음 ◦ 컨테이너 외부에 데이터가 저장되는 것 💡 anonymous volume / named volume (하단에 사용법 참고) ◦ anonymous volum : - 컨테이너가 종료될 때 삭제, 컨테이너가 존재할 때만 데이터도 존재 - 새로운 컨테이너가 생성될 때마다 사용하지 않는 익명 볼륨이 쌓임 → docker volume prune → docker volume rm [볼륨이름] - 컨테이너에 이미 존재하는 특정 데이..
Docker Desktop 기준 ◦ 컨테이너에서 open in terminal 클릭 이 안에서 명령어 실행시 host가 아닌 컨테이너 안에서의 명령어를 실행한 것 ex) 아파치 서버 - 도커에서는 httpd라는 이미지로 사용 메인페이지인 index.html을 실행해줌 → but, 수정하기 위해 nano index.html 를 즉시 사용 할 수는없음 docker의 주요 장점은 적은 용량이기 때문에 자잘한 파일들까지 포함 할 수 없음 (용량 문제) ✔️ apt update(최신으로 갱신) apt install nano(나노 에디터 설치) nano index.html → 파일 수정 가능 1. 위와 같은 예시는 컨테이너 내부의 파일을 직접 수정하는 방법이므로 위험 2. container를 사용하는 이유는 언제든..

배경 ◦ 어떠한 애플리케이션을 만들기 위해서 운영체제에 여러 소프트웨어를 깔아야함 ◦ OS에 각각의 가상 운영체제를 만들어 네트워크로 연결을 해서 사용을 하게됨(virtual machine) ◦ 그러나 웹 서버를 운영하기 위해 운영체제를 까는게 비효율적임 ◦ (용량이 어마어마한 OS를 깔다보니 실행속도도 느려짐, 여러개의 같은 프로그램이 깔릴 수 있음, 사용하지 않는 도구가 디폴트로 설정되어있음) ◦ 한대의 컴퓨터 안에서 격리된 환경으로 각각의 앱을 실행시키는 방법 등장 ◦ docker는 container기술을 사용하는 소프트웨어 중 하나 + 관리프로세스를 단순화하는 도구 도커를 사용하는 이유 ◦ ex) node.js 에서 await 문법을 사용해 개발했지만 이를 사용하는 다른 환경은 버전이 맞지 않아 ..