묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨개발자를 위한 쉬운 도커
Leafy 네트워크 질문이 있습니다.
수강 중에 개인적인 궁금증이 생겨 질문드립니다.Leafy 애플리케이션에서 네트워크를 새롭게 만든 주요 이유가 기본 네트워크에서는 DNS 기능을 제공하지 않기 때문에 즉, 컨테이너가 종료되고 다시 실행될 때 IP가 바뀌게 되어 DB로 연결이 안되는 상황이 발생할수 있다고 하셨습니다.그렇다면 백엔드 에서 DB 호스트 URL을 localhost로 연결을 하면 굳이 DNS 기능을 사용 하지 않아도 될꺼같다는 생각이 듭니다. 예를 들어 EC2 서버 하나에 실습 서버인 백/프론트/DB 컨테이너를 띄울 경우 입니다 !혹시 각각 다른 EC2 서버 3대에 각각의 컨테이너를 띄워 배포하는 경우에는 DNS 기능이 필요하니 이럴 때를 위해 네트워크를 생성해서 세팅을 해야 할까요 ?
-
해결됨개발자를 위한 쉬운 도커
안녕하세요 선생님, 5강까지 수강한 시점에서 질문드리고 싶습니다.
안녕하세요 선생님, 현재 선생님께서 예제로 올려주신 파일이 아닌 제 프로젝트에 적용하며 수강하고 있는 학생입니다.도커 이미지를 빌드할 때 멀티 스테이징 기법을 사용하는 이유는 빌드할 때 사용하는 모듈들이 애플리케이션을 실행할 때 사용하는 환경에서는 필요없기 때문에 빌드 이미지와 실행 이미지를 나누어 최종적으로 빌드되는 실행 이미지에서 gradle과 같은 무거운 부분들을 떼내기 위해서라고 이해하였습니다.만약 그렇다면 최종적인 이미지에는 yml에 들어있는 private key같은 보안값들이 들어있지 않는 것으로 이해되는데, yml이 최종 이미지에 들어있지 않음에도 보안값들을 환경변수로 전달해야 하는 이유를 알고 싶습니다.원래 추후 git actions등을 사용하여 깃허브에 push만 하면 자동으로 빌드 후 배포까지 되게끔 파이프라인을 구축할 때 깃허브에는 yml이 올라가있지 않기 때문에 깃허브에는 환경변수를 사용한 yml을 올려두고 강의내용대로 환경변수로 전달하는 과정까지 자동화하는구나 라고 이해하였는데, ChatGPT에서는 멀티스테이징 기법을 사용하더라도 이미지 빌드과정 자체에서 yml을 포함하지 않아야 보안상에 문제가 없다고 하여 질문드립니다.추가적으로 차후 강의를 들으면 해결될 궁금증 같지만, 현재 제 프로젝트에는 프론트엔드는 다른 VM을 통한 서버가 올라가있고, 데이터베이스 또한 따로 RDS에 올라가있는데 이럴 때는 간단히 스프링 애플리케이션만 이미지로 빌드하여 서버 VM(EC2)에 배포하고, 수작업으로 https 프로토콜 인증 작업만 진행하면 되는지 또한 여쭤보고 싶습니다.친절한 강의 해주셔서 감사합니다.
-
해결됨개발자를 위한 쉬운 도커
WSL 도커 컨테이너 개발 오류
도커 데스크탑 대신 wsl에 도커 엔진을 설치해서 사용중입니다.윈도우에서 devcontainer 설정을 하고 개발 컨테이너 폴더 열기를 했을 때 아래와 같이 에러가 발생하는데, 혹시 path를 C:/Users/... 대신 /mnt/c/Users/...로 수정할 수 있는 방법이 있을까요?ERROR: unable to prepare context: path "c:Usersc...기타경로" not found
-
해결됨개발자를 위한 쉬운 도커
docker-compose 내부 dns 관련 질문드립니다.
안녕하세요. 데브위키입니다.강의에 포함된 내용이 아니더라도 강의를 듣다가 궁금하신 점이 생기시면 부담없이 편하게 질문해주세요. 실습에 오류가 발생했거나 명령어가 예상한대로 실행되지 않으신 경우 사용하시는 OS 환경과 화면을 캡처해서 보내주시면 빠르고 자세하게 답변을 드릴 수 있습니다. 질문은 가능한 빠르게 답변 드리겠습니다. 😀감사합니다.해당 컴포즈 파일로 up -d 실행 후 docker ps를 하면 leafy-leafy-backend-1, leafy-leafy-frontend-1, leafy-leafy-postgres-1로 컨테이너 명으로 생성되는데, leafy-front, leafy-back에서 환경변수로 전달된 도메인이 어떻게 작동하는건가요??네트워크에서 이해한 바로는 컨테이너명으로 내부dns사용하는것으로 이해하였습니다! 추가적으로 docker insepct로 확인해보니 알리아스로 지정되서 동작하는걸로 유추되는데 이것이 맞을까요? 또한, 알리아스 지정은 compose파일에 있는 서비스명을 토대로 도커가 매핑해주는건가요?
-
미해결개발자를 위한 쉬운 도커
안녕하세요! 깃헙 액션 사용시 태그관련 문제가 있어서 여쭤봅니다.
안녕하세요 강의잘 보고 있습니다!workflow 야믈 파일에 공통적으로tags: ${{ secrets.DOCKERHUB_USERNAME }}/leafy-backend:${{ github.sha }}식의 태그 코드가 있는데 buildx failed with: ERROR: invalid tag "***/leafy-frontend:dc0c10532ac6c286eec74b3ddf4386ac8cb85a91": invalid reference format시의 해당 태그의 포맷이 옳지 않다고 나옵니다. 저는 webstorm으로 실습을 하고 있는데 IDE에서도 빨간줄이 그어져 있구요... 혹시 어떤 문제 때문인가요? 도커 관련 태그 관련 문서랑 stackoverflow나 https://docs.docker.com/reference/cli/docker/image/tag/에서 관련 내용을 찾아도 잘모르 겠습니다;;
-
해결됨개발자를 위한 쉬운 도커
leafy backend에서 db연결이 잘 되지 않습니다...
안녕하세요 leafy back-end 부분에서 db 연결이 안되서 실행이 안되는 오류가 발생합니다docker run -d -p 8080:8080 -e DB_URL=leafy-postgres --name leafy --network leafy-network starlightpizza/leafy-backend:1.0.0 명령어를 사용하여 컨테이너를 실행시키면 db 연결을 못해서 오류가 발생하는데요docker file은 위 와 같이 설정 되어있고postgresql은 아래와 같이 정상적으로 동작이 되는걸 확인했습니다.어떤 부분에서 문제가 발생하는지 잘 모르겠어서 질문드립니다..
-
해결됨개발자를 위한 쉬운 도커
(Node.js, VSCode) 컨테이너 내부에서 개발환경 구성 중 node 설치 실패
(Node.js, VSCode) 컨테이너 내부에서 개발환경 구성파트에서 Dev Container 로 설치 중(10:50)설치가 아래와 같이 실패했다고 뜹니다.> yorkie@2.0.0 install /workspaces/leafy/leafy-frontend/node_modules/yorkie > node bin/install.js setting up Git hooks can't find .git directory, skipping Git hooks installation [ ......] - postinstall:@jridgewell/trace-mapping: info lifecycle @jridg[ ......] - postinstall:@vue/cli-overlay: info lifecycle @vue/cli-overla[ ......] - postinstall:astral-regex: info lifecycle astral-regex@2.0.0~ > core-js@3.29.1 postinstall /workspaces/leafy/leafy-frontend/node_modules/core-js > node -e "try{require('./postinstall')}catch(e){}" Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScrip t standard library! The project needs your help! Please consider supporting of core-js: > https://opencollective.com/core-js > https://patreon.com/zloirock > https://boosty.to/zloirock > bitcoin: bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz I highly recommend reading this: https://github.com/zloirock/core-js/blob/master/docs/2023-02 -14-so-whats-next.md [ ......] \ postinstall:easy-stack: info lifecycle easy-stack@1.0.1~post[ ......] \ postinstall:fresh: info lifecycle fresh@0.5.2~postinstall: f[ ......] / postinstall:ansi-regex: info lifecycle ansi-regex@3.0.1~post[ ......] \ postinstall:retry: info lifecycle retry@0.13.1~postinstall: [ ......] \ postinstall:chokidar: info lifecycle chokidar@3.5.3~postinst[ ......] / postinstall:@babel/helper-compilation-targets: info lifecycl[ ......] | postinstall: info lifecycle vuex@4.1.0~postinstall: vuex@4.1[ ......] - postinstall: info lifecycle vuex@4.1.0~postinstall: vuex@4.1[ .....] / prepare:leafy-frontend: info lifecycle leafy-front@0.1.0~prenpm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.2 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"}) added 967 packages from 521 contributors and audited 968 packages in 162.033s 104 packages are looking for funding run `npm fund` for details found 36 vulnerabilities (29 moderate, 1 high, 6 critical) run `npm audit fix` to fix them, or `npm audit` for details Done. Press any key to close the terminal.다행이 npm은 정상적으로 설치되어 있으나$ npm --version 6.14.18node 설치가 문제가 생긴 것 같습니다.$ node version internal/modules/cjs/loader.js:934 throw err; ^ Error: Cannot find module '/workspaces/leafy/leafy-frontend/version' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:931:15) at Function.Module._load (internal/modules/cjs/loader.js:774:27) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12) at internal/main/run_main_module.js:17:47 { code: 'MODULE_NOT_FOUND', requireStack: [] }근데 serve는 실행이 됩니다. (다만 :80으로)$ npm run serve > leafy-front@0.1.0 serve /workspaces/leafy/leafy-frontend > vue-cli-service serve --port 80 Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-db@latest Why you should do it regularly: https://github.com/browserslist/update-db#readme INFO Starting development server... DONE Compiled successfully in 65898ms 6:25:25 PM App running at: - Local: http://localhost:80/ It seems you are running Vue CLI inside a container. Access the dev server via http://localhost:<your container's external mapped port>/ Note that the development build is not optimized. To create a production build, run npm run build.
-
해결됨개발자를 위한 쉬운 도커
안녕하세요! 질문이 있습니다.
안녕하세요! 강의 정말 잘보고 있습니다.2개의 궁금증이 생겨서 여쭤봅니다. 쉬울 수 있지만 저에겐 헷갈리는 부분같습니다.우선 OS에 관한 질문입니다. 이미지를 만드는 강의에서 그림으로 이미지 내부의 모양을 표현해주실 때가 있는데 그림에서 이미지가 OS를 가지고 있는 거처럼 느껴집니다. 실제로 이미지 안에 OS가 설치되어 있나요? (호스트 OS의 커널을 이용해서 만드는 거라고 이해했어서 실제 OS가 들어가 있진 않을 것 같은데 라는 생각이 들었습니다) 두번째는 포트포워딩쪽 질문입니다. 포트포워딩이 외부 IP가 인바운드를 할 때 특정 포트를 지정해 놓는 것이 자연스럽다고 이해했습니다. 그렇다면 제가 로컬에서 애플리케이션을 만들어서 8080포트로 열어두면 포트포워딩 쪽 테이블에 8080포트로 만들어 지는건가요? (미리 지정해 놓는다라는 개념이 조금 헷갈리는 것 같습니다.) 감사합니다 :)
-
미해결개발자를 위한 쉬운 도커
도커 볼륨(Docker Volume) 21:00~23:00 nginx 실습 부분
안녕하세요? 볼륨 nginx 실습부분에서 pwd 경로(index) 폴더로 볼륨을 지정하고 nginx를 아무리 다시 실행해 봐도 강사님 화면처럼 403 Forbidden이 나오지 않고 Welcome to nginx 화면이 나옵니다.제가 뭘 잘못한 건가요? $ pwd /c/adol/#study/Docker/EasyDocker/index docker run -d -p 8000:80 --name my-nginx-a -v /c/adol/#study/Docker/EasyDocker/index:/usr/share/nginx/html nginx d6c95b6bd03c21b0cf643614b42c440f4a91a94bb9a7808d5e932c719ad71ecf docker run -d -p 8001:80 --name my-nginx-b -v /c/adol/#study/Docker/EasyDocker/index:/usr/share/nginx/html nginx 8e1f6e6ed1f3fcb993120aefcfede0841af72f5a291e86f01cd0567d2e7400ba 제가 뭘 잘못했는지 알려 주시면 감사하겠습니다.OS는 Windows이고, 강사님이 따로 경로 // 언급 안 해서 안 붙였습니다.
-
해결됨개발자를 위한 쉬운 도커
git clone https://github.com/daintree-henry/leafy.gif가 not found로 뜹니다.
PostgreSQL 컨테이너 구성에서 2:05초에 leafy 소스코드 다운로드를 하는데 아래와 같이 찾을 수 없습니다. $ git clone https://github.com/daintree-henry/leafy.gif Cloning into 'leafy.gif'... remote: Repository not found. fatal: repository 'https://github.com/daintree-henry/leafy.gif/' not found 실제 github를 가도 해당 gif파일이 존재하지 않습니다.이전 leafy 실습 테스트에서도 내부 사진들은 전부 로드되지 않았는데, 파일이 없다 보니 동일한 문제였던 것 같습니다.
-
해결됨개발자를 위한 쉬운 도커
docker compose부분 질문드립니다
제가 이해하는 바로는 build에 있는 도커파일을 바탕으로 image에 적힌 이름으로 이미지를 생성한다라고 이해했는데요 사진속에 초록색 부분 run부분에 deviwikirepo/leafy-postgres:1.0.0이 아니라 leafy-backend:5.0.0-compose가 있어야 하는게 아닌가요?
-
해결됨개발자를 위한 쉬운 도커
docker 볼륨마운트에 대해서 질문드립니다
안녕하세요 :)배운 내용을 토대로 제 개인 우분투 컴퓨터 서버에 배포를 하려 하는데요수업에서 배운 3-Teir 형식으로 network설정도 하고, /api로 스프링 서버에 요청이 가도록 nginx도 설정했습니다 서버에 만들어놓은 RAID1 (경로는 /mydata/img) 디렉토리를 스프링과 볼륨 마운트해서 POST 요청시 이미지를 저장하도록 만들었는데요저장이 잘 되는건 확인했는데 클라이언트에서 src에 이미지경로를 어떻게 설정해야 할까요? 찾아보고 구현해본 방법중에서 아래 사진과 같이 만들었는데요 이게 3-Teir 의 요점과도 가장 잘 맞는거 같아서요..uploadPath와 RAID1을 볼륨 마운트하고,src="/images/이미지명",nginx에 location 으로 proxy_pass 설정만 해주면 될까요?아니면 추가적으로 설정할게 더 필요할까요?@Configuration public class WebConfig implements WebMvcConfigurer{ @Value("${upload.path}") private String uploadPath; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/images/**") .addResourceLocations("file:/" + uploadPath); } }아니면 진짜 정배가 따로 있을까요 ㅋㅋ...정확한 방법을 알고싶어서 질문드립니다 ㅠ
-
미해결개발자를 위한 쉬운 도커
docker remote JVM debug 설정
안녕하세요. 강의듣다가 Remote JvmDebug에서 Before launch를 설정하려고 하는데요. 제 인텔리제이에서는 Launch Docker Before Debug라는 항목이 보이지 않아서요.. plugin으로 docker설치하고 다시 intellij 실행하였고, 인텔리제이 버전은 2024.1 입니다. Mac 환경이고.. 왜 저는 안나오는지 모르겠어요 ㅠㅠ
-
해결됨개발자를 위한 쉬운 도커
[개발환경구성] docker vscode로 실행시
vscode로 node설치 안하고 node docker를 이용해서 npm install을 하고서 npm run serve 명령어를 하면요분명 localhost:80 이라고 쓰여있는데 막상 눌러서 브라우저에 니깐 포트번호가 다르더라고요.그냥 제 PC에 브라우저에서 localhost:80이라고 접속하면 되지 않구요!왜그런걸까요?? 이거에 대한 설명이 부족한거 같아서 질문으로 올립니다.
-
해결됨개발자를 위한 쉬운 도커
docker 실행시 네트워크 질문
강사님 강의 잘 듣고 있습니다.docker 컨테이너 실행시, --network 옵션으로 네트워크를 지정해주지 않으면 디폴트로 'bridge' 라는 네트워크에 컨테이너가 실행되는건가요?? network 리스트에서 'bridge'라는 name을 찾아서 기본값으로 사용하는걸까요?
-
해결됨개발자를 위한 쉬운 도커
컨테이너 실행 명령어관련 질문드립니다.
명령어 관련해서 헷갈리는 부분이 있어 질문드립니다.명령어 "docker run ~" 관련해서 '-p' 옵션을 따로 추가해서 설정하지 않고 실행하면 특정 포트로 publishing이 되지는 않지만 컨테이너가 내부에서 그냥 실행 되고있는건가요??
-
해결됨개발자를 위한 쉬운 도커
이미지 레이어 관련 궁금증 질문드립니다!
안녕하세요 궁금증이 생겨 질문드립니다!강의 중 엔진엑스로 만든 이미지가 있는데 index.html이 다른 A가 있고 B가 있다라는 예시가 있었습니다. 이때 아래와 같이 설명해주셨는데요 이미지를 공유해서 사용하는거랑 컨테이너 생성속도랑 어떻게 연관이 있는건지 잘 이해가 가지 않아 질문드립니다.동일한 이미지로 컨테이너를 아주 많이 만들어도 이 이미지로 실행된 모든 컨테이너가 하나의 이미지를 공유해서 읽어옵니다. 실제로 큰 부분을 차지하는 이미지를 하나로 유지할 수 있기 때문에 컨테이너를 생성할 때 속도가 빨라지는 것이죠. 또한 아래와 같이 설명해주셨는데요컨테이너를 만들 때 사용된 이미지에 따라서 이미지의 읽기 전용 레이어 전체를 공유할수도 있고 일부만 공유할 수도 있습니다 이렇게 이미지의 읽기 전용 레이어를 활용하면 컨테이너를 실행할 때 전체 공간을 복사하지 않아도 되기 때문에 컨테이너를 빠르게 실행할 수 있습니다. 그리고 컨테이너가 늘어나면서 사용하는 공간을 최대한 작게 관리할 수 있습니다.엔진엑스 이미지 A가 다운받아져있다 가졍하고 index.html이 다른 이미지 B를 다운 받는다 가정해보겠습니다. 이미지 B를 다운받을때 이미지 A와 레이어가 같은것은 다운받지 않고 레이어가 다른 index.html레이어만 다운받는걸까요? 컨테이너가 늘어나면서 사용하는 공간을 최대한 작게 관리할 수 있다라는게 어떤것인지 잘 이해가 되지 않아 질문드려봅니다 (레이어별로 파일이 나뉘어 있는걸까요)혹시 위와 같은 부분을 실습으로 확인할 수 있는 것이나 공식문서 부분에서 확인할 수 있는게 있다면 같이 부탁드립니다!
-
미해결개발자를 위한 쉬운 도커
docker compose 사용시 프론트엔드에서 백엔드 연결
저번에 질문했었던 사람입니다.테스트로 인하여 코드가 계속 변경되어 새로 글 올립니다. 프론트엔드를 nextjs를 사용하고, 백엔드는 nestjs를 사용중입니다.nextjs에서 .env파일에 backend_url을 입력해놓고, nextjs에서 process.env.backend_url 을 통해서 사용중입니다. github 주소 : https://github.com/ababqw123/wedding-app이고,프론트엔드에서 .env파일에 backend 주소는 현재 로컬 테스트로로 작성해서 localhost의 8080 포트를 사용중이고, process.env.NEXT_PUBLIC_SERVER_URL을 통해서 가져오고 있습니다.docker compose에서도 8080포트로 지정을 따로 해주었습니다.docker로 연결했을 때 백엔드 주소를 어떻게 설정해야할지 정확하게 몰라서 문의 드립니다.
-
해결됨개발자를 위한 쉬운 도커
COPY --from=build /app/build/libs/*.jar /app/leafy.jar 명령어 질문
안녕하세요. 백엔드 Dockerfile 내용 보고서 질문이 있습니다. 실제로 실습을 하다 보면 /build/libs에서 이렇게 jar 파일이 두개가 생기는데요. COPY --from=build /app/build/libs/*.jar /app/leafy.jar 이 명령어는 .jar 확장자 파일 모두 leafy.jar이름으로 복사한다는 의미인거 같은데요. 이렇게 2개의 파일이 있거나 또는 2개 이상의 파일이 있을때.. 1) 마지막 파일 기준으로 복사가 되는걸까요? 2) 아니면 두개의 파일이 합쳐져서 leafy.jar로 하나로 복사가 되는걸까요? 두개의 파일이 하나로 합쳐진다면 실행할때 잘 안될거 같은 느낌이 들어서요. 3) 추가적으로 -plain과 그냥 .jar파일 차이점도 궁금하고 왜 2개가 나오는지도 궁금합니다.
-
해결됨개발자를 위한 쉬운 도커
docker compose 사용시 프론트엔드에서 백엔드 연결
프론트엔드를 nextjs를 사용하고, 백엔드는 nestjs를 사용중입니다. nextjs에서 .env파일에 backend_url을 입력해놓고, nextjs에서 process.env.backend_url 을 통해서 사용중입니다. docker compose를 사용하여 백엔드와 프론트엔드를 실행 시키면 같은 docker network에 붙어있고compose의 프론트엔드에 environment에 backend_url을 backend이름으로 적었을 경우backend url이 아닌 현재 url을 불러옵니다. 어디가 문제일까요?