묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
맥북 실리콘칩 invalid argument 에러 해결 (수동 설치)
안녕하세요 에러 해결 방식 공유할려고 올립니다저는 맥북 m3 max 사용 중이고 저랑 비슷한 환경에컨테이너만 실행시키면 계속해서 exec invalid argument 에러 증상이 자꾸 나서 애를 먹었습니다 해결방안은 docker-dind-arm64 공식 이미지를 받아서docker run --privileged -itd -p 20023:22 -p 8083:8080 --name dind-arm64 \ docker@sha256:223d046021f324792db4fbd1396746b63ffb93f00861ea390d7fbbaf392585e4컨테이너 접속 후 ssh, python 수동설치하고 앤서블 서버에서 키 복사하고요플레이북으로 여기에 컨테이너 실행하니 잘 작동합니다 이상임. 도커허브 이미지 링크https://hub.docker.com/layers/library/docker/dind/images/sha256-223d046021f324792db4fbd1396746b63ffb93f00861ea390d7fbbaf392585e4
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
도커 컨테이너 끼리 SSL 통신 시 문제가 생깁니다..
안녕하세요. 로컬 PC에서 elasticsearch를 도커 컨테이너로 구동하고 ( elasticsearch 8버전 ) python 프로젝트 ( python 3.11 버전 ) 는 로컬 ide에서 구동했을 때는 python 프로젝트 에서 --> elasticsearch 도커 컨테이너 까지의 https 요청이 정상적으로 수행되었습니다. 그런데 python 프로젝트를 컨테이너로 띄워서 elasticsearch 도커 컨테이너로 https 요청을 보내면 [ SSL routines:ssl3_read_bytes:sslv3 alert illegal parameter ] 이런 에러가 계속 발생합니다.python 프로젝트의 openssl 버전은 1.1.1w이고 elasticsearch 프로젝트의 openssl 버전은 1.1.1f 입니다. oepnssl로 디버깅 하기위해 openssl s_client -connect inspiring_noether:9200 -tls1_2 -CAfile ./http_ca.crt 를 실행하면 아래와 같이 출력됩니다.. 디버깅으로 보면 정상 통신으로 보이는데 어떤게 문제일까요,,?ㅠCONNECTED(00000003) Can't use SSL_get_servername depth=1 CN = Elasticsearch security auto-configuration HTTP CA verify return:1 depth=0 CN = a7cf2750c76a verify return:1 --- Certificate chain 0 s:CN = a7cf2750c76a i:CN = Elasticsearch security auto-configuration HTTP CA 1 s:CN = Elasticsearch security auto-configuration HTTP CA i:CN = Elasticsearch security auto-configuration HTTP CA --- Server certificate --- http_ca.crt 인증서 내용 ---- subject=CN = a7cf2750c76a issuer=CN = Elasticsearch security auto-configuration HTTP CA --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 6541 bytes and written 281 bytes Verification: OK --- New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 4096 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: 362F6B5369DB4D85D09490F9D30E7DF66367B120D1EDEF9DF0013644F1D0FCA8 Session-ID-ctx: Master-Key: 5C3994FFD364BFF28A8990102CA6EDCC99D9F8AEBD0B9E2905DA3F9B6BE1CF3F8787648205B6F46AD3D1D8CA7A7EEA02 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 86400 (seconds) TLS session ticket: ----- session ticket 내용 ----- Start Time: 1744073205 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: yes
-
해결됨개발자를 위한 쉬운 도커
컨테이너 레이어 질문 있습니다.
안녕하세요!컨테이너를 처음 실행했을 때는 컨테이너 레이어에는 아무 파일도 존재하지 않는건가요?만약 처음 컨테이너 레이어에 아무 파일도 존재하지 않는다면 docker -it bin/bash로 컨테이너 내부로 들어가서 보는 파일들은 이미지의 파일들이고, 그 이미지의 파일을 수정하면 컨테이너 레이어로 해당 파일을 복사한 뒤에 수정사항을 반영하는 건가요?(CoW)
-
해결됨개발자를 위한 쉬운 도커
컨테이너 가상화 호스트 OS
안녕하세요! 강의 유익하게 듣고 있는 수강생입니다.컨테이너 가상화 설명에서 궁금증이 생겨 글 남깁니다.(강의 장면 캡쳐가 불가하여 유사 그림으로 대체합니다!!) 도커는 호스트 OS의 커널을 바로 사용한다는 장점이 있다고 이해했습니다. 이때 여기서 호스트 OS가 리눅스라고 명시되어있는데 mac, windows를 사용하는 일반 사용자들도 호스트 os가 리눅스로 적용되는 것일 까요??해당 내용을 찾아보니 도커를 사용할 때는 리눅스 커널이 필수적으로 필요해서 가상화된 Linux를 내부적으로 사용한다고 확인했습니다. 이 내용을 리눅스 환경이 아닌경우 도커 내부에 리눅스가 가상화 기술로 적용되어 있다고 이해하는 것이 맞을까요??내장되어 있는 것이 맞다면 컨테이너 별로 리눅스가 별도로 포함되는것인지, 도커위에 하나의 리눅스OS를 갖고 있는 것인지 질문드리고 싶습니다!유익한 강의 정말 감사드립니다 😀
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
Deploy 트리거 관련 질문드립니다.
강의를 들으면서 프로젝트로 실습해보다가 궁금한 점이 생겨 질문드립니다!강의에서는 main 브랜치에 push가 일어나는 것이 트리거가 되는 경우를 설명해주셨습니다.만약에 main 브랜치 하위에 기능별로 브랜치를 나누어서feature/login, feature/post 식으로 브랜치가 존재하며프론트엔드 React 코드, 백엔드 Spring 코드의 별도 구분 없이 각각의 브랜치에 같이 존재한다면백엔드 코드만 ec2에 deploy 되도록 설정하는 방법이 있을까요?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
Docker Container에서 Tomcat 설치
영상에 Tomcat 설치 단계가 없는 것으로 보이는데Deploy Plugin 설치 시 자동으로 설치되는 건가요?
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
Docker scripts 질문
안녕하세요.CICD강의 잘보고있습니다.[실습] 컨테이너 기반 + 확장성을 고려한 프로젝트에서 많이 쓰는 CI/CD 구축 방법 까지 잘 진행해서 배포까지 완료했습니다.scripts > start-server.sh 에서 질문이 있는데요docker pull {ECR Repository 주소}/instagram-server:latest여기서 에러가 나서 정상적인 docker image를 pull받지 못합니다. 제가 작성한 코드입니다.docker pull {EC2소유자}.dkr.ecr.ap-northeast-2.amazonaws.com/github-actions:latest발생 에러 코드입니다.[stderr]Error response from daemon: Head "https://{EC2소유자}.dkr.ecr.ap-northeast-2.amazonaws.com/v2/github-actions/manifests/latest": no basic auth credentials 감사합니다.
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
도표 강의 자료 사용이 불가합니다. (권한 문제)
파일을 불러오는 중 오류가 발생했습니다.파일을 찾지 못했습니다. 파일이 존재하지 않거나 읽기 권한이 없습니다. 라고 뜨는데, 파일이 없는 거 아닌가요? 권한은 전부 부여되어있는 상태입니다.그리고 보니까 이미지 상으로는 diagrams.net 인데 지금은 draw.io 로 바뀌어있더라고요. 이거 관련해서 관리자분이 설정을 따로 해주셔야 하는 거 아닌지... 조심스럽게 확인 요청 드립니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
notion 수업자료
따로 pdf 변환하여 다운로드는 안되나요?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
ec2 여러대에서 각각 직접 설치 이유
ec2 여러대에서 각각 jenkins, ansible 등등을 host 에 직접 설치하는 특별한 이유가 있을까요?ec2 각각 안에서도 그냥 docker 로 띄워도 되지 않나요? 특별한 이유가 있는지, 어떤 수업의 방향성 때문인지, 장단 등등에 대해서 궁금합니다. 좋은 강의 감사합니다.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
P@ssw0rd 설정시기
안녕하세요 좋은 강의 감사합니다. docker run --privileged --name jenkins-node1 -itd -p 30022:22 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docker-server:m1 /usr/sbin/init로 접속한 후에요. docker ps -a | grep jenkins-node 잘 떠있는 것 확인한 후에 ssh root@localhost -p 3022 로 접근하면 P@ssw0rd 패스워드 입력하잖아요? 그 패스워드는 강의 선생님께서 해당 도커 이미지 생성하실 때 root / P@ssw0rd 로 설정을 하신 건가요? 미리 감사드립니다.
-
미해결실전! GitHub Actions으로 CI/CD 시작하기
깃헙 레포 생성 자동화 구성하기 2 관련 질문드립니다.
우선 레포만 생성하는 workflow는 성공하였으며, slack 기능을 추가하는 과정에서 오류를 겪고 있습니다.gh repo create oddong-action/${{ inputs.prefix }}-${{ inputs.name }} --public --add-readme새로운 레포를 만드는 명령 수행 시에 아래와 같이 권한 오류가 발생하고 있습니다.어떤 설정을 추가로 해주어야 할지 문의드립니다.
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
도커를 이용한 배포
안녕하세요! 도커의 사용목적에 대해 알고싶습니다. 도커가 편리한 이유는 여러 프로그램을 한 대의 컴퓨터에서 실행시킬 수 있기 때문이라고 이해하였습니다. 그런데 만약 서버 한 개만 돌릴 때는 도커를 사용해야 할 필연성이 있을까요? 단순히 확장성 떄문에 사용하는 건가요? 왜 써야 하는지 잘 모르겠습니다..
-
미해결애플리케이션 배포 자동화와 CI/CD
안녕하세요
안녕하세요 선생님젠킨스 도커로 설치후 실행하면 이런 로딩에서 안넘어가는데 어떻게 하면 좋을까요..? 로컬에서 했을때는 비밀번호 치는걸로 바로 넘어가는데..감사합니다!
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
ansible 원리
ansible copy 같은 모듈 명령어를 사용할 때요대상으로 하는 서버들에서 방화벽과 같은 그런것들을 미리 열어줘야 하고 그런 것들은 없을까요?물론 미리 ping 을 통해서 확인할 수는 있겠지만요!ansible 의 동작 원리가 궁금합니다.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
ansible 존재여부
안녕하세요docker run --privileged -itd --name ansible-server -p 20022:22 -p 8082:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup edowon0623/ansible-server:m1 /usr/sbin/init위 명령어로 도커 이미지 설치 후 ssh 로 접속해서 패스워드 치고 들어가면, ansible --version 이 먹히지 않는 것으로 보면 ansible 이 설치가 되어있지 않은 것 같아요.참고로 저는 맥 m1 OS 입니다.
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
젠킨스 빌드 성공후 shutdown
안녕하세요 우선 저는 gradle 로 진행을 했습니다.다른건 다 동일하게 했고젠킨스 도커 안에 들어가서 cd /var/jenkins_home/workspace/My-Third-Proejct nohup java -jar build/libs/jenkins_cicd_project-0.0.1-SNAPSHOT.jar --server.port=9000 --server.address=0.0.0.0 > app.log 2>&1 &로 실행을 하면 브라우저에서 localhost:9000 으로 접근이 잘 됩니다.그런데 젠킨스 스크립트로 실행을 하게 되면 젠킨스 도커 내의 로그를 확인해보면 계속 꺼져요. 이유가 있을까요?젠킨스 구성 설정의 shell script 는 아래와 같아요.# 기존 프로세스 종료 PID=$(ps -ef | grep "jenkins_cicd_project-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $2}') if [ ! -z "$PID" ]; then echo "종료 중인 애플리케이션 PID: $PID" kill -15 $PID sleep 5 fi # 새 프로세스 시작 (setsid 사용하여 별도 세션에서 실행) echo "애플리케이션 시작 중..." setsid nohup java -jar build/libs/jenkins_cicd_project-0.0.1-SNAPSHOT.jar --server.port=9000 --server.address=0.0.0.0 > app.log 2>&1 & APP_PID=$! echo "애플리케이션 PID: $APP_PID" # 시작 확인 sleep 10 ps -p $APP_PID > /dev/null if [ $? -eq 0 ]; then echo "애플리케이션이 PID $APP_PID로 실행 중입니다." curl -s http://localhost:9000 > /dev/null if [ $? -eq 0 ]; then echo "애플리케이션에 정상적으로 접근할 수 있습니다." else echo "애플리케이션 접근 테스트 실패!" fi else echo "애플리케이션 시작 실패!" exit 1 fi그리고 젠킨스 빌드 console out 도 아래와 같습니다.Started by user 허강준 Running as SYSTEM Building in workspace /var/jenkins_home/workspace/My-Third-Proejct The recommended git tool is: NONE No credentials specified > git rev-parse --resolve-git-dir /var/jenkins_home/workspace/My-Third-Proejct/.git # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url https://github.com/Highjune/jenkins_cicde_project.git # timeout=10 Fetching upstream changes from https://github.com/Highjune/jenkins_cicde_project.git > git --version # timeout=10 > git --version # 'git version 2.39.5' > git fetch --tags --force --progress -- https://github.com/Highjune/jenkins_cicde_project.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10 Checking out Revision 6353899ff277302005bce6da4d498211ebeab06b (refs/remotes/origin/main) > git config core.sparsecheckout # timeout=10 > git checkout -f 6353899ff277302005bce6da4d498211ebeab06b # timeout=10 Commit message: "포트번호 수정" > git rev-list --no-walk 6353899ff277302005bce6da4d498211ebeab06b # timeout=10 [My-Third-Proejct] $ /bin/sh -xe /tmp/jenkins9188074144619929309.sh + ps -ef + grep jenkins_cicd_project-0.0.1-SNAPSHOT.jar + grep -v grep + awk {print $2} + PID=283 + [ ! -z 283 ] + echo 종료 중인 애플리케이션 PID: 283 종료 중인 애플리케이션 PID: 283 + kill -15 283 + sleep 5 + echo 애플리케이션 시작 중... 애플리케이션 시작 중... + APP_PID=420 + echo 애플리케이션 PID: 420 애플리케이션 PID: 420 + sleep 10 + setsid nohup java -jar build/libs/jenkins_cicd_project-0.0.1-SNAPSHOT.jar --server.port=9000 --server.address=0.0.0.0 + ps -p 420 + [ 0 -eq 0 ] + echo 애플리케이션이 PID 420로 실행 중입니다. 애플리케이션이 PID 420로 실행 중입니다. + curl -s http://localhost:9000 + [ 0 -eq 0 ] + echo 애플리케이션에 정상적으로 접근할 수 있습니다. 애플리케이션에 정상적으로 접근할 수 있습니다. Finished: SUCCESS그런데 계속 Graceful shutdown complete 가 뜹니다.참고로 다른 포트랑 충돌같은 것은 없습니다 원래 8081로 진행하다가 일부러 다른 포트로 시도해보려고 9000으로 했습니다.이렇게 젠킨스 내 컨테이너 내에서 수동 실행하면 되는데 왜 젠킨스 빌드로 하면 꺼지는 걸까요?참고로 젠킨스 도커 실행 명령어는 아래와 같습니다.docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 9000:9000 -p 50000:50000 --restart=on-failure --name jenkins-server jenkins/jenkins:lts-jdk21
-
미해결비전공자도 이해할 수 있는 CI/CD 입문·실전
failed to connect to your instance
안녕하세요 강사님,현재 강의를 참고하여 팀원끼리 클론 코딩 프로젝트를 하기위해 EC2에서 Spring Boot + MySQL 서비스를 Docker Compose로 구성하여 배포 중입니다. GitHub Actions를 통해 ECR에 푸시한 Spring Boot 이미지를 EC2에서 pull 받아서 docker-compose로 실행하는 파이프라인을 구축했습니다.현재까지 진행한 작업에 대해 말씀드리겠습니다. Spring Boot 애플리케이션을 Dockerfile로 빌드해 Amazon ECR에 업로드 EC2에 MySQL과 Spring Boot를 각각 컨테이너로 구성 (docker-compose.yml 사용) GitHub Actions에서 EC2로 SSH 접속 후 .env 생성 및 docker-compose up -d 자동 실행 설정현재 EC2 인스턴스(t2.micro)에 연결이 실패하고있습니다. ssh -v -i를 통해 로그를 확인 해본 결과 연결은 성공하지만 인증 전 또는 핸드쉐이크 중에 connection reset이 발생하였다고 합니다.현재 인스턴스 유형은 t2.micro이며, Docker로 2개 컨테이너가 실행 중이었습니다.CPU/RAM 자원이 부족해 SSH 연결도 거부되는 것 아닌가 의심됩니다. 혹시 이 경우 인스턴스 유형을 업그레이드를 하는게 해결방법일지 혹은 다른 방법이 있을까요?
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
Docker compose 관련 공유
강의 내용 똑같이 따라해봐도 redis, node 버전 관련 문제로 실행할 수 없었습니다..!저는 아래 코드로 테스트 성공했으니 참고 부탁드려요! Dockerfile >>>> node version 16 FROM node:16 WORKDIR /usr/src/app COPY ./ ./ RUN npm install CMD [ "node", "server.js" ] package.json>>> redis version 4.7.0{ "name": "nodejs-docker-compose-app", "version": "1.0.0", "main": "server.js", "scripts": { "start": "node server.js", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "express": "4.17.1", "redis": "4.7.0" }, "author": "", "license": "ISC", "description": "" } docker-compose.ymlversion: "3" services: redis-server: image: redis container_name: redis-server restart: unless-stopped expose: - 6379 node-app: depends_on: - redis-server build: context: . dockerfile: Dockerfile container_name: node-app restart: on-failure ports: - "8081:8080" server.jsconst express = require("express"); const redis = require("redis"); const app = express(); // Redis 클라이언트 생성 const client = redis.createClient({ socket: { host: "redis-server", port: 6379 } }); async function connectToRedis() { let connected = false; while (!connected) { try { await client.connect(); console.log('Connected to Redis'); connected = true; } catch (error) { console.error('Error connecting to Redis:', error); console.log('Retrying in 2 seconds...'); await new Promise(resolve => setTimeout(resolve, 2000)); } } } // Express 엔드포인트 설정 app.get('/', async (req, res) => { try { let number = await client.get('number'); if (number === null) { number = 0; } console.log('Number: ' + number); res.send("숫자가 1씩 올라갑니다. 숫자: " + number); await client.set("number", parseInt(number) + 1); } catch (error) { console.error('Error:', error); res.status(500).send('Redis 연결 오류'); } }); // 서버 시작 전에 Redis 연결 app.listen(8080, async () => { await connectToRedis(); // 서버 시작 시 Redis 연결 시도 console.log('Server is running on port 8080'); }); 모두 저장 후 터미널에서docker compose down docker compose up --build
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
Docker Hub에 Push 무한 로딩
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. Ansible을 이용한 Docker 이미지 관리 강의에서 create-cicd-devops-image.yml에 작성한 스크립트로 playbook 실행 시 Docker Hub에 Push하는 과정에서 무한로딩이 걸리는데 원인을 찾을 수 없어서 질문드립니다..Docker Hub 로그인도 성공하였고 스크립트에 저의 계정 이름/cicd-project-ansible로도 잘 작성하였고 수동으로 push 명령어를 내려주면 Docker Hub에 이미지가 잘 띄어지긴 합니다.수동으로 명령어를 내려주면 잘 작동하지만 왜 playbook으로는 push과정에서 무한로딩이 걸리는지 모르겠습니다[root@0c03fe2051d5 ~]# ansible-playbook -i hosts create-cicd-devops-image.yml --limit 172.17.0.4PLAY [all] *************************************************************************************************************TASK [Gathering Facts] *************************************************************************************************ok: [172.17.0.4]TASK [Login to Docker Hub] *********************************************************************************************changed: [172.17.0.4]TASK [create a docker image with deployed waf file] ********************************************************************changed: [172.17.0.4]TASK [push the image on Docker Hub] ************************************************************************************.... 무한로딩