묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨개발자를 위한 쉬운 도커
Dockerfile질문입니다
devcontainer를 통해 vscode에서 개발환경용으로 컨테이너를 만들 수 있다고 이해를 했는데요, 예제의 leafy-frontend 패키지를 보면 leafy-frontend root에 Dockerfile이 있고, .devcontainer 안에도 Dockerfile이 있는데요, .devcontainer 내부의 Dockerfile은 dev container 전용 세팅 Dockerfile인가요 ??
-
해결됨개발자를 위한 쉬운 도커
어떻게 Primary-Standby Replication으로 구성되는지
안녕하세요, 강의에서 구현해주신 Primary-Standby Replication 구조가 어떤 명령어를 통해 구성되는지 궁금해서 여쭤봅니다.실습시에 복붙만 해서 정확히 어떤 명령어가 데이터를 복제해주고 동기화할 수 있는지, standby 쪽에서는 어떻게 읽기만 가능한지 궁금합니다.REPMGR_PRIMARY_HOST 는 Primary로 세팅되고,REPMGR_PARTNER_NODES 는 primary를 제외한 나머지 name:port는 standby로 세팅이 되는게 맞을까요? 추가로, primary-standby 방식에서 primary는 "반드시" 한개여야만 하나요 ? 여러개 일수도 있는지 궁금합니다
-
해결됨개발자를 위한 쉬운 도커
캐싱에 대한 질문이 있습니다.
COPY . . 와 같은 copy 레이어에서, 기존의 내용과 다른 경우 새로운 레이어를 생성한다고 했는데요, 기존의 내용과 다른지 같은지를 판별하려면 해당 명령어를 실행하여 결과를 가져와서 비교를 해봐야 같은지 다른지 알 수 있지 않나요?? 혹은 실행전에 특정 해시값이 존재하고, 그 해시값은 비교하는 형식으로 캐싱이 동작하나요 ? 궁금합니다!
-
해결됨개발자를 위한 쉬운 도커
3030 포트 질문
11분 50초에 3030을 사용하는 포트가 없기 때문에 정상적인 응답이 오지 않는다고 말씀하셨는데요, envnodecolorapp 내부적으로 3000 포트를 사용한다고 명시했기 때문에 응답이 오지 않는게 맞나요? 3030은 왜 사용이 불가한지 이해가 잘 가지 않습니다
-
해결됨개발자를 위한 쉬운 도커
nginx port 질문입니다
4분 58초 쯤에 nginx는 80 포트를 사용한다고 말씀하셨는데, 기본적으로 nginx는 80 포트를 사용하는건가요?docker container inspect 시에 portBindings 앞의 80/tcp 중 80이 포트를 의미하는지도 궁금합니다
-
해결됨개발자를 위한 쉬운 도커
이미지빌드 실습 질문
데이터베이스, 백엔드, 프론트 실습에서 컨테이너 실행 실습과 도커파일 이미지 빌드 실습 두개를 하는데 컨테이너 실행 실습은 커밋 방식을 통해 이미지를 만드는 방법인건가요? 두 실습의 연관이 무엇인지 모르겠어요 ㅠㅠ
-
해결됨개발자를 위한 쉬운 도커
docker push 중 경고
안녕하세요, 강의를 열심히 수강 중인 학생입니다. (실습을 진행 중인 환경은 맥입니다.)docker push 중에 선생님과 다른 결과창이 떠서 궁금한게 생겨 질문남깁니다. 메세지 내용을 정확하게 이해할 수 없어 챗지피티한테 먼저 물어봤습니다. 지피티한테 답변을 받은 이후에 생긴 궁금증들 입니다. 레이어가 마운트되고 있다는게 정확하게 무슨 의민가요? 우선 레이어도 무엇을 지칭하는지 모르겠습니다만ㅠ 현재 실습상황에서는 docker images 명령어를 통해 image를 확인해보면, 이렇게 나와있습니다. 원본 이미지(devwikirepo/simple-web)가 이미 존재하고 그에 대한 사본(sjin980530/simple-web)이 존재하기에 이런 경우가 발생하는건가요? 그럼 지금 진행하고 있는 실습은 push를 docker hub에 하고있는건데, 로컬의 상황과는 관계없는게 아닌가요?ㅠㅠ현재 푸시된 이미지가 단일 플랫폼 이미지라는 말은 그럼 제 실습환경(mac)이 아닌 다른 환경(윈도우 등)에서는 사용하지 못하는 이미지라는 뜻인가요?1과 이어지는 질문입니다 원래 레이어와 푸시된 레이어의 다이제스트가 매핑되고있다라고 하는데, 이건 어떻게 이해하면 될까요? 레이어에 대한 지식이 없어 어떤 상황인지 감이 잘 안잡힙니다. 항상 감사드립니다.
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
인바운드 보안 그룹 규칙
안녕하세요. 항상 감사합니다. 다름아니라 프론트엔드 개발자(ionic+react+typescript)님과 처음 협업을 하는데요!(레포지토리가 fe, be 따로 존재합니다.)api를 개발해서 전달해드려야 하는데 프론트엔드 개발자님께서 springboot를 로컬에서 실행하시기 어려우실것 같아 제가 일단 배포를 하여 전달드리려고 합니다.(EC2에서 Docker를 활용한 배포 방법을 사용하려합니다.)질문: 1. 이때 ec2 인바운드 보안 그룹 규칙은 ssh, http(80)만 해주면 될까요? tcp(프론트엔드 개발자님의 포트(아마도 8100번))또한 추가해야 하는 부분일까요?2. Nginx, Certbot를 활용해 리버스 프록시를 설정한다면 해당 포트번호도 ec2 인바운드 보안 그룹에 tcp로 추가해야 할까요?3. 백엔드 개발자는 프론트엔드 개발자에게 api를 제공할때 위에 말씀드린 방식으로 진행하는지 여쭙고 싶습니다. 경험이 부족하여 질문이 이상할 수 있는점 양해바랍니다.감사합니다.+추가)일단 docker compose로 ec2에서 빌드까지 했는데요.보안그룹을 모든tcp 0.0.0.0에서 하니깐 잘 돌아갑니다. 하지만 모든tcp를 제거하고 http 80과 https 433을 추가하면 "ERR_CONNECTION_REFUSED"라고 하고 접근이 안되네요. 여기서 http 8080을 추가하면 또 잘되네요. 프로젝트를 할때 모든 tcp로 하면 안된다고 하셨는데 안전하게 프로젝트를 할 수 있는 방법을 여쭙고 싶습니다.
-
해결됨비전공자도 이해할 수 있는 Docker 입문/실전
Spring Web 의존성을 추가했는데도 intelliJ에서 @RestController 인식이 안 됩니다
안녕하세요'[실습] 백엔드 프로젝트(Spring Boot) 프로젝트를 Docker로 실행시키기'에서 그대로 따라 했는데이렇게 RestController가 인식이 안 됩니다build.gradle이고 이걸 다시 run했는데 동일합니다 아래는 run 후 콘솔에 찍히는 내용입니다확인 후 답변 부탁드립니다!오후 4:51:31: Executing... > Task :help Welcome to Gradle 8.10.1. To run a build, run gradle <task> ... To see a list of available tasks, run gradle tasks To see more detail about a task, run gradle help --task <task> To see a list of command-line options, run gradle --help For more detail on using Gradle, see https://docs.gradle.org/8.10.1/userguide/command_line_interface.html For troubleshooting, visit https://help.gradle.org Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.10.1/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 451ms 1 actionable task: 1 executed 오후 4:51:32: Execution finished.시키기
-
해결됨비전공자도 이해할 수 있는 Docker 입문/실전
workdir 대신에 RUN mkdir /directory COPY 상대경로 /directory/복사할파일 이런식으로 구현해도 되나요 ?
둘 중 뭐가 보편적으로 사용되는 편인지 궁금합니다! 1번 사안WORKDIR /directory 2번 사안 RUN mkdir /directoryCOPY [복사할 파일의 상대경로] [/directory/복사할 파일]
-
해결됨비전공자도 이해할 수 있는 Docker 입문/실전
mysql 비밀번호 바꾸기 위해 호스트 저장공간을 지우면 기존의 데이터도 날라가는 게 아닌가요 ?
[실습] Docker로 MySQL 실행시켜보기 - 3 에서 마지막쯤에 비밀번호 바꾸기 위해서기존의 비밀번호로 mysql 접속 후 비밀번호 바꾸기호스트 저장 공간에서 파일들 삭제하기 둘 중 하나를 선택하여 비밀번호 바꿀 수 있다고 하셨습니다! 근데 고민되는 부분이 호스트 저장 공간에서 파일들 삭제해서 새로운 비밀번호로 덮어씌우게 된다면 이건 볼륨의 역할을 활용하지 못한 경우가 아닌가 하는 생각이 들어서요.. 결국 볼륨이란건 호스트 저장 공간의 파일 = 컨테이너 내부의 저장 공간 파일이 동기화되어야 하는 건데 호스트 저장 공간 파일 지우고 새롭게 만드는 거면결국 컨테이너 삭제 생성하는 것과 다를 게 없지 않나요?? 그럼 결국 볼륨의 특성을 살리면서 mysql의 비밀번호를 변경하려면 1번 방법으로 실행할 수 밖에 없는건지 궁금합니다.. ㅠㅠ
-
해결됨개발자를 위한 쉬운 도커
Windows WSL 설치 문구 없음
강의때 버전과 Docker 버전이 달라WSL설치에 대한 경고문구가 나오지않습니다.설치 하지않아도 문제없을까요?아니면 필수적으로 설치해야할까요?
-
해결됨개발자를 위한 쉬운 도커
섹션 2 - 가상화기술 질문
강의내용가상화 기술 사용 이전에는 하나의 OS에서 여러 프로그램을 동작시키는 경우 하나의 프로그램에서 오류가 발생하거나, 주어진 리소스보다 많은 리소스를 사용하면 다른 프로그램에 영향을 미친다.이에 대한 해결책으로 가상화 기술을 사용하면서 각 프로그램이 독립적으로 동작하며 할당된 자원만을 사용하므로 근본적인 문제를 해결할 수 있다. 라고 이해했습니다.질문하지만 결국 호스트 OS가 뻗어버리면 가상화된 방식으로 동작하는 것들도 모두 뻗어버린다고 생각이 들어 근본적인 해결책이 되지는 않는다는 생각이 들었습니다.얕은 지식으로 생각해본 결과 결국 하나의 컴퓨터에 하나의 프로그램만 돌아가도록 해야할 것 같은데, 이러면 많은 리소스가 사용될 뿐만 아니라 관리의 어려움도 있을 것 같다는 생각이 들었습니다.제가 너무 극단적인 상황을 생각을 생각하는 걸까요? 실무 레벨에서는 실제로 어떻게 관리하는지, 정말 가상화가 근본적인 해결책이 되는지 등에 대해서 궁금증이 생겨 질문 드립니다.강의 잘 보고 있습니다. 감사합니다!--- 추가적으로 프론트앤드 개발 환경에서 다양한 환경을 구성해보면서 도커를 공부해보고 싶은데요.실무에서는 이런 식으로 도커를 활용하니 이런걸 중점적으로 공부하고 구성해보세요. 하는 환경이 있다면 몇개 추천해주시면 감사드리겠습니다!
-
해결됨개발자를 위한 쉬운 도커
Git Bash Winpty 설정
첫주 환경 구축 중에 Git Bash Winpty 설정하는 부분에서 alsias가 적용되지 않았습니다. 아마 이전에 사용하던 git 설정으로 인해 해당 alias가 적용되지 않은 것 같은데, 위 부분을 넘어가도 괜찮을까요? 제가 사용하고 있는 os는 window 10을 사용하고 있고, git bash의 버전은 2.46.0입니다.
-
해결됨개발자를 위한 쉬운 도커
localhost 접속질문 입니다.
안녕하세요 좋은강의 만들어주셔서 감사합니다. 제가 섹션6. 컨테이너 애플리케이션 구성부분을 따라하고 있습니다.prstgreSQL , SpringBoot 백엔드 두개는 컨테이너 구성 및 접속이 잘됩니다.postman 으로 백엔드에 데이터를 날려보니 잘 나옵니다. 하지만 꼭 프론트엔드 접속부분에서 항상 접속이 안됩니다.frontend 컨테이너도 물론 잘실행 됩니다. docker desktop 에서 프론트 로그를 보면2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 3 (SIGQUIT) received, shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 7#7: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 8#8: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 10#10: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 11#11: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 7#7: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 11#11: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 8#8: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 13#13: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 13#13: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 8#8: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 12#12: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 14#14: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 13#13: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 12#12: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 9#9: gracefully shutting down 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 9#9: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 12#12: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 9#9: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 10#10: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 10#10: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 11#11: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 14#14: exiting 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 14#14: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 7#7: exit 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 17 (SIGCHLD) received from 10 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 10 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 12 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 29 (SIGIO) received 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 17 (SIGCHLD) received from 11 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 7 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 9 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 11 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 29 (SIGIO) received 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 17 (SIGCHLD) received from 8 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 8 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 29 (SIGIO) received 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: signal 17 (SIGCHLD) received from 14 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 13 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: worker process 14 exited with code 0 2024-09-12 12:30:06 2024/09/12 03:30:06 [notice] 1#1: exit 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: using the "epoll" event method 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: nginx/1.21.4 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: built by gcc 10.3.1 20210424 (Alpine 10.3.1_git20210424) 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: OS: Linux 5.15.153.1-microsoft-standard-WSL2 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker processes 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 7 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 8 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 9 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 10 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 11 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 12 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 13 2024-09-12 12:30:07 2024/09/12 03:30:07 [notice] 1#1: start worker process 14이렇게 나오는데접속 에러 로그도 안나오네요 제가 다른곳에서 80 포트를 사용중인가 싶었지만그렇지도 않습니다.혹시 제가더 살펴볼 다른곳이라도 있을까요?
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
Access denied for user 'root'@'localhost' (using password: YES)
https://www.inflearn.com/community/questions/1364596/access-denied-for-user-root-localhost-using-password-yes위 글에서 재성님이 제시해주신 해결방법을 적용해보았습니다. 하지만 여전히 root 계정에 접속이 안됩니다. docker compose down -v 명령어를 통해 볼륨을 제거해도 여전히 해결이 안됩니다. 스프링부트 역시 데이터베이스와 연결되지 않았다는 오류가 로그에 남습니다.
-
해결됨개발자를 위한 쉬운 도커
도커 컴포즈: volumes는 어떻게 적는 건가요
도커 컴포즈 강의 중 스크린샷에 대한 질문이 2가지 있습니다.Q1. 해당 스크린샷의 코드는 어디가면 찾아볼 수 있나요?깃헙의 Daintree-henry 유저의 리포지터리에서 찾아보려고 해도 찾아볼 수가 없어서 질문드립니다.Q2. Yaml 코드에서 Volumes는 왜 2번 나오는 건가요?컨테이너 2개 각각의 image 바로 밑에 volumes라는 항목이 이미 존재하잖아요. (e.g. postgres_primary_data:/bitnami/postgresql)그런데 밑에서 보이는 또 다른 volumes 코드는 왜 존재하는 건가요?volumes: postgres_primary_data: postgres_standby_data:
-
해결됨비전공자도 이해할 수 있는 Docker 입문/실전
Docker compose 관련 질문입니다
안녕하세요 재성님! 좋은 강의 너무 잘 듣고 있습니다.다름이 아니라 재성님 강의를 듣고 제 프로젝트에 spring boot mysql 을 함께 컴포즈 파일로 작성하고 있는데localhost:8080으로 접속하org.springframework.web.servlet.resource.NoResourceFoundException: No static resource .이라는 에러 문구가 나옵니다.현재 프로젝트에서는.html 파일을 전혀 사용하지 않아서 이 에러의 원인을 잘 못찾고 있습니다.docker-compose 파일 첨부합니다.감사합니다.services: my-server: build: . ports: - 8080:8080 # my-db의 컨테이너가 생성되고 healthy 하다고 판단 될 때, 해당 컨테이너를 생성한다. depends_on: my-db: condition: service_healthy my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: 저희 비밀번호 MYSQL_DATABASE: mydb # MySQL 최초 실행 시 mydb라는 데이터베이스를 생성해준다. volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 healthcheck: test: [ "CMD", "mysqladmin", "ping" ] # MySQL이 healthy(정상 작동 하는지)한 지 판단할 수 있는 명령어 interval: 5s # 5초 간격으로 체크 retries: 10 # 10번까지 재시도
-
미해결비전공자도 이해할 수 있는 Docker 입문/실전
Access denied for user ‘root’@’localhost’ (using password:YES)
compose.ymlservices:instagram-server:image: 420787877062.dkr.ecr.ap-northeast-2.amazonaws.com/instargram-serverports:- 8080:8080depends_on:my-db:condition: service_healthymy-cache-server:condition: service_healthymy-db:image: mysqlenvironment:MYSQL_ROOT_PASSWORD: 00000000MYSQL_DATABASE: mydbvolumes:- ./mysql_data:/var/lib/mysqlports:- 3306:3306healthcheck:test: [ "CMD", "mysqladmin", "ping" ]interval: 5sretries: 10my-cache-server:image: redisports:- 6379:6379healthcheck:test: [ "CMD", "redis-cli", "ping" ]interval: 5sretries: 10 이렇게 yml을 설정하고docker inspect 명령어를 사용하여 mysql 정보를 gpt 한테 물어봤더니 아래와 같은 답변이 있었습니다. 현재 MySQL 컨테이너의 상태는 “healthy”로 보이며, 전체적으로 Docker Compose 설정이 잘 작동하고 있다. 하지만 MySQL의 Healthcheck가 Access denied for user 'root'@'localhost' (using password: YES) 오류 메시지를 출력하고 있다. 이는 MySQL이 root 사용자로 접속을 시도할 때 비밀번호 인증에 실패했다는 것을 의미한다. 이를 해결하기 위해서, 비밀번호를 ' 로 감싸서 String으로 인식하도록 유도 하기도 했지만 여전히 문제는 해결되지 않고 있습니다. 구글링을 해본 결과 도커 볼륨과 연관있는 것 같지만 정확한 이유를 모르겠습니다.
-
해결됨개발자를 위한 쉬운 도커
아예 Linux Ubuntu PC에서 실습을 따라하려고 하는데
아예 ubuntu Linux PC에서 따라하려고 하는데 Docker Desktop이랑 많이 혼동이 될까요?