Kakao. GG
Home
Tech
Book
Info
Interview
Question
Project
[문서] Next.js App Directory에서 Canonical 태그 작성
[입문] 간단한 Java 서버 구현하기
[중요도 낮음] ESLint의 promise/param-names 규칙
[GPT] PMP 시험 대비: 프로젝트 관리 핵심 주제 요약 및 예상 문제(7)
클라우드에서 Docker로 배포하기
왜 클라우드 배포가 필요할까? 애플리케이션을 개발하고 로컬에서 실행하는 것은 쉽지만, 실제 사용자들이 접근할 수 있도록 배포하려면 클라우드 서버가 필요합니다.Docker를 활용하면 개발 환경과 동일한 상태로 애플리케이션을 배포할 수 있어 운영이 훨씬 쉬워집니다. ✅ Docker 배포의 장점✔️ 어디서든 동일한 환경에서 실행 가능 (개발 환경 ≈ 운영 환경)✔️ 빠른 배포 및 롤백 가능✔️ 다양한 클라우드 플랫폼(AWS, GCP, Azure)에서 손쉽게 실행 Docker 애플리케이션 배포 개요 Docker 애플리케이션을 클라우드에 배포하는 방법은 여러 가지가 있지만 아래가 많이 사용됩니다. Docker Hub에 이미지 업로드 → 서버에서 실행 AWS EC2에서 직접 컨테이너 실행 AWS ECS, GCP Cloud Run 등 컨테이너 서비스 활용 Docker 앱을 AWS EC2에 배포해보기 🔹 Docker Hub에 애플리케이션 이미지 업로드 클라우드에서 실행하려면 먼저 Docker Hub에 이미지를 업로드해야 합니다. 📌 Docker Hub 로그인 docker login 📌 2. 애플리케이션 빌드 (Dockerfile 필요) docker build -t my-docker-app . 📌 3. Docker Hub에 태그 추가 docker tag my-docker-app <DockerHubID>/my-docker-app 📌 4. Docker Hub에 이미지 업로드 docker push <DockerHubID>/my-docker-app ✅ 이제 클라우드에서 이미지를 가져와 실행할 수 있습니다! 🔹 AWS EC2에서 Docker 컨테이너 실행 이미지를 Hub에 올려놨으니, AWS EC2 인스턴스를 생성하고, Docker 컨테이너를 실행합시다~ 📌 1. AWS EC2 인스턴스 생성 AWS에 로그인 후 EC2 인스턴스 생성 Amazon Linux 2 또는 Ubuntu 선택 보안 그룹에서 포트 8080(애플리케이션용)과 22(SSH 접속용) 허용 📌 2. SSH로 EC2 접속 ssh -i my-key.pem ec2-user@<EC2-퍼블릭-아이피> 📌 3. Docker 설치 sudo yum update -y sudo yum install docker -y sudo systemctl start docker sudo usermod -aG docker ec2-user 📌 4. Docker Hub에서 이미지 가져오기 & 실행 docker pull <DockerHubID>/my-docker-app docker run -d -p 8080:8080 <DockerHubID>/my-docker-app 📌 5. 애플리케이션 접속 확인이제 웹 브라우저에서 http://<EC2-퍼블릭-IP>:8080 에 접속하면 애플리케이션이 실행됩니다! 🚀 사실 DockerFile만 실행시키면 의미가 없습니다. Docker-compose를 사용하는 것이 좋습니다. Docker Compose를 활용한 배포 예를들어 MySQL 등 다른 서비스와 함께 배포해야 한다면, Docker Compose를 활용하면 더욱 편리합니다. 📌 EC2에서 docker-compose.yml 파일 작성 version: '3.8' services: database: image: mysql:8.0 container_name: mysql-container restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: testdb MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3306:3306" app: image: <DockerHubID>/my-docker-app container_name: spring-app depends_on: - database environment: SPRING_DATASOURCE_URL: jdbc:mysql://database:3306/testdb SPRING_DATASOURCE_USERNAME: user SPRING_DATASOURCE_PASSWORD: password ports: - "8080:8080" 📌 Docker Compose 실행 docker-compose up -d ✅ 이제 MySQL과 애플리케이션이 함께 실행됩니다! 🎉 실무에서 활용 가능한 클라우드 배포 옵션 AWS EC2에서 직접 Docker를 실행하는 방법 외에도, 다양한 클라우드 배포 방식이 있습니다. 배포 방식 특징 AWS ECS (Elastic Container Service) Docker 컨테이너 자동 관리 가능 AWS EKS (Kubernetes) 대규모 Kubernetes 클러스터 운영 가능 GCP Cloud Run 서버리스 컨테이너 실행 Azure Container Apps Azure에서 쉽게 컨테이너 실행 ✅ 규모가 커지면 ECS 또는 Kubernetes를 활용하는 것이 효율적입니다!
Docker Compose를 통해 여러 컨테이너 한 번에 실행하는 방법
Docker Compose란? Docker를 사용하면 하나의 컨테이너를 실행하는 것은 쉽지만, 애플리케이션은 보통 여러 개의 서비스(컨테이너)가 함께 동작해야 합니다. 예를 들어, Spring Boot 애플리케이션 + MySQL 데이터베이스를 실행한다고 가정해 봅시다.각각을 개별적으로 실행하면 설정이 번거롭고 관리하기 어렵습니다.✅ 이를 해결하는 것이 바로 Docker Compose입니다! Docker Compose를 사용하면 여러 개의 컨테이너를 하나의 설정 파일(docker-compose.yml)로 관리할 수 있습니다.한 번의 명령어(docker-compose up)로 여러 컨테이너를 실행하고, 네트워크를 자동으로 설정해줍니다. Docker Compose를 사용하면 좋은 점 ✔️ 여러 개의 컨테이너를 한 번에 실행 가능✔️ 설정을 코드(docker-compose.yml)로 관리하여 재사용 가능✔️ 각 컨테이너의 환경 변수와 네트워크를 쉽게 설정 가능 Spring Boot + MySQL을 Docker Compose로 실행해보기 🔹 docker-compose.yml 파일 작성 이제 프로젝트 폴더 안에 docker-compose.yml 파일을 만들고, 아래 내용을 작성하세요. 📌 설정 파일 설명 app 서비스는 Spring Boot 애플리케이션 database 서비스는 MySQL 데이터베이스 version: '3.8' services: database: image: mysql:8.0 container_name: mysql-container restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: testdb MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3306:3306" app: build: . container_name: spring-app depends_on: - database environment: SPRING_DATASOURCE_URL: jdbc:mysql://database:3306/testdb SPRING_DATASOURCE_USERNAME: user SPRING_DATASOURCE_PASSWORD: password ports: - "8080:8080" ✅ 설명: database: MySQL 컨테이너 실행 app: Spring Boot 애플리케이션 실행 (MySQL과 연결) depends_on: database가 먼저 실행된 후 app이 실행되도록 설정 환경 변수(environment)를 사용해 데이터베이스 설정을 관리 🔹 Spring Boot 애플리케이션 Dockerfile 작성 이제 Dockerfile을 만들어 Spring Boot 애플리케이션을 컨테이너에서 실행할 수 있도록 설정합니다. 📌 프로젝트 루트 디렉터리에 Dockerfile 파일을 만들고 다음 내용을 작성하세요. # 1. OpenJDK 기반 이미지 사용 FROM openjdk:17-jdk-slim # 2. 작업 디렉토리 설정 WORKDIR /app # 3. JAR 파일을 컨테이너로 복사 COPY target/demo-0.0.1-SNAPSHOT.jar app.jar # 4. 애플리케이션 실행 CMD ["java", "-jar", "app.jar"] ✅ 이제 Spring Boot 애플리케이션을 빌드하면 됩니다! 🔹 애플리케이션 빌드 및 실행 Spring Boot 빌드합니다. ./mvnw clean package Docker Compose를 사용하여 모든 컨테이너 실행 docker-compose up -d ✅ 이제 MySQL과 Spring Boot 서버가 함께 실행됩니다!✅ http://localhost:8080에 접속하면 애플리케이션이 동작하는 것을 확인할 수 있습니다. 환경 변수 활용 .env 파일로 설정 관리하기 Docker Compose에서 환경 변수를 파일로 관리하면 설정 변경이 쉬워집니다.📌 .env 파일을 생성하고 다음 내용을 추가합니다. MYSQL_ROOT_PASSWORD=root MYSQL_DATABASE=testdb MYSQL_USER=user MYSQL_PASSWORD=password 📌 docker-compose.yml에서 환경 변수를 참조하도록 수정합니다. ${} 사용하면 환경 변수를 사용할 수 있습니다. environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD}
Docker에서 Tomcat 컨테이너 설정 및 실행
Tomcat 이미지 다운로드 Tomcat 이미지를 Docker Hub에서 다운로드합니다. 최신 버전 또는 원하는 버전을 지정할 수 있습니다. docker pull tomcat:latest tomcat:latest: Tomcat의 최신 버전을 다운로드합니다. 특정 버전을 원할 경우 tomcat:<버전> 형식으로 지정 가능합니다 (예: tomcat:9.0). 이미지 다운로드 후 로컬 이미지 목록에서 확인 docker images Tomcat 컨테이너 실행 해당 게시글은 컨테이너 실행까지만 진행하고 넘어가셔도 충분합니다. compose에서 추가로 내용 작성할 예정입니다. Docker Tomcat은 이렇게 실행시키고, 설정하면 된다~ 정도로 가볍게 읽고 넘어가시는 걸 추천드립니다. 기본 실행 명령어 Tomcat 컨테이너를 생성하고 실행합니다. docker run -d --name my-tomcat \ -p 8080:8080 \ tomcat:latest 옵션 설명 -d: 컨테이너를 백그라운드에서 실행합니다. --name my-tomcat: 컨테이너 이름을 my-tomcat으로 지정합니다. -p 8080:8080: 로컬 호스트의 8080 포트를 컨테이너의 8080 포트에 연결합니다. tomcat:latest: 사용할 Tomcat 이미지 이름과 태그를 지정합니다. Tomcat 기본 페이지 확인 컨테이너 실행 후 브라우저에서 다음 URL로 접속 http://localhost:8080 Tomcat 기본 관리 페이지가 표시되면 설정이 완료된 것입니다. Tomcat 환경 설정 Tomcat 컨테이너의 설정 파일을 수정하거나 웹 애플리케이션을 배포하려면 설정이 필요합니다. (추가 옵션 설정이 필요 없는 경우 선택 사항에 가깝습니다.) 웹 애플리케이션 배포 로컬 디렉터리를 컨테이너의 Tomcat webapps 디렉터리에 마운트하여 애플리케이션을 배포합니다 docker run -d --name my-tomcat \ -p 8080:8080 \ -v $(pwd)/webapps:/usr/local/tomcat/webapps \ tomcat:latest 옵션 설명 -v $(pwd)/webapps:/usr/local/tomcat/webapps 로컬 디렉터리 webapps를 컨테이너의 Tomcat webapps 디렉터리에 연결합니다. 여기에서 .war 파일을 배포하면 Tomcat이 자동으로 로드합니다. 3.2 Tomcat 설정 파일 접근 Tomcat 설정 파일(server.xml 등)을 수정하려면 다음 디렉터리를 마운트합니다 -v $(pwd)/config:/usr/local/tomcat/conf 로컬에서 설정 파일을 준비한 후 컨테이너에 연결하면 쉽게 수정 가능합니다. Tomcat 사용자 설정 (선택 사항) Tomcat 관리자 계정을 설정하려면 tomcat-users.xml 파일을 수정해야 합니다. 이 파일을 로컬에서 생성 후 컨테이너에 마운트하여 설정할 수 있습니다. tomcat-users.xml 예시 <tomcat-users> <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="admin" password="admin_password" roles="manager-gui,admin-gui"/> </tomcat-users> 실행 시 마운트 docker run -d --name my-tomcat \ -p 8080:8080 \ -v $(pwd)/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml \ tomcat:latest 데이터 볼륨 설정 (선택 사항) Tomcat 로그나 기타 데이터를 호스트에 저장하려면 볼륨을 설정합니다. 로그 파일 마운트 -v $(pwd)/logs:/usr/local/tomcat/logs 컨테이너의 로그 파일을 로컬 디렉터리에 저장
Docker에서 MySQL 컨테이너 설정 및 실행하기
MySQL 이미지 다운로드 MySQL 이미지를 Docker Hub에서 다운로드합니다. 최신 버전 또는 원하는 버전을 지정할 수 있습니다. docker pull mysql:latest mysql:latest: MySQL의 최신 버전을 다운로드합니다. 특정 버전을 원하면 mysql:<버전> 형식으로 지정하세요 (예: mysql:8.0). 이미지 다운로드 후 로컬 이미지 목록에서 확인할 수 있습니다. docker images MySQL 컨테이너 실행 기본 실행 명령어 MySQL 컨테이너를 생성하고 실행합니다. docker run -d --name my-mysql \ -e MYSQL_ROOT_PASSWORD=root_password \ -p 3306:3306 \ mysql:latest 옵션 설명 -d: 컨테이너를 백그라운드에서 실행합니다. --name my-mysql: 컨테이너 이름을 my-mysql로 지정합니다. -e MYSQL_ROOT_PASSWORD=root_password: MySQL 루트 사용자 비밀번호를 설정합니다. -p 3306:3306: 로컬 호스트의 3306 포트를 컨테이너의 3306 포트와 연결합니다. mysql:latest: 사용할 MySQL 이미지 이름과 태그를 지정합니다. 추가 설정 옵션 필요에 따라 데이터베이스 이름, 사용자 계정 등을 설정할 수 있습니다. docker run -d --name my-mysql \ -e MYSQL_ROOT_PASSWORD=root_password \ -e MYSQL_DATABASE=my_database \ -e MYSQL_USER=my_user \ -e MYSQL_PASSWORD=my_password \ -p 3306:3306 \ mysql:latest MYSQL_DATABASE: 생성할 기본 데이터베이스 이름. MYSQL_USER: 새 사용자 이름. MYSQL_PASSWORD: 새 사용자의 비밀번호. 실행 상태 확인 실행 중인 컨테이너를 확인하려면 다음 명령어를 사용합니다. docker ps 컨테이너가 정상적으로 실행 중이면 STATUS가 Up 상태로 표시됩니다. MySQL 접속 컨테이너 내부 MySQL CLI 접속 MySQL 클라이언트로 컨테이너 내부에 접속하려면 다음 명령어를 사용합니다. root_password를 입력하면 MySQL 쉘에 접속할 수 있습니다. 외부 MySQL 클라이언트로 접속 호스트: localhost 포트: 3306 사용자 이름: 설정된 MySQL 사용자 이름 (기본값은 root) 비밀번호: 설정된 비밀번호 예: MySQL Workbench, DBeaver와 같은 GUI 클라이언트를 사용하여 접속. 데이터 볼륨 설정 (선택 사항) 말이 선택 사항이지 필수입니다. 이유는 아래와 같습니다. 컨테이너가 중지되거나 삭제되더라도 데이터를 유지하려면 데이터 볼륨을 설정해야 합니다. 옵션 설명 -v mysql_data:/var/lib/mysql: 호스트의 mysql_data 디렉터리를 컨테이너 내부의 /var/lib/mysql에 마운트합니다. 볼륨을 설정하면 데이터는 컨테이너 삭제 후에도 유지됩니다. 컨테이너 중지 및 삭제 컨테이너 중지 docker stop my-mysql 컨테이너 삭제 docker rm my-mysql 중지된 컨테이너를 포함한 모든 컨테이너 목록 확인 docker ps -a 기본적인 내용이기 때문에 간단하게 실행만 해봤습니다. 서버부터 compose, volume까지 천천히 업로드해보겠습니다.
Java Spring Boot를 Docker에서 실행하는 방법
Spring Boot 애플리케이션을 Docker에서 실행하기 🔹 1단계: Spring Boot 프로젝트 생성 우선, 간단한 Spring Boot 애플리케이션을 만듭니다.Spring Initializr (https://start.spring.io/) 를 이용해서 다음 설정으로 프로젝트를 생성하세요. 📌 Spring Boot 프로젝트 기본 설정 Language: Java Spring Boot: (버전) Dependencies: Spring Web 🔹 2단계: 간단한 REST API 작성 src/main/java/com/example/demo/DemoApplication.java 를 다음과 같이 수정합니다. package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class DemoApplication { @GetMapping("/hello") public String hello() { return "Hello from Dockerized Spring Boot!"; } } ✅ 이제 http://localhost:8080/api/hello 에 접속하면 메시지를 확인할 수 있습니다. 🔹 3단계: Dockerfile 작성 이제 Spring Boot 애플리케이션을 Docker에서 실행하기 위해 Dockerfile을 만듭니다. 지금부터가 제일 중요합니다. 위에는 본인 Java Spring Boot Project로 진행해도 문제 없습니다.프로젝트 루트 디렉터리에 Dockerfile 파일을 추가하고 아래 내용을 작성하세요. # 1. OpenJDK 기반 이미지 사용 FROM openjdk:17-jdk-slim # 2. 작업 디렉토리 설정 WORKDIR /app # 3. JAR 파일을 컨테이너로 복사 COPY target/demo-0.0.1-SNAPSHOT.jar app.jar # 4. 애플리케이션 실행 CMD ["java", "-jar", "app.jar"] (해당은 docker-compose가 아니기 때문에, 가장 기본적인 docker file로 진행됩니다.) ✅ 이 Dockerfile은 OpenJDK 17 환경에서 Spring Boot 애플리케이션을 실행하는 역할을 합니다. 🔹 4단계: 애플리케이션 빌드 및 Docker 이미지 생성 먼저 Spring Boot 애플리케이션을 빌드하여 .jar 파일을 생성합니다. ./mvnw clean package 빌드가 완료되면 target/ 폴더에 demo-0.0.1-SNAPSHOT.jar 파일이 생성됩니다.이제 Docker 이미지를 빌드합니다. docker build -t my-spring-app . ✅ docker images 명령어로 빌드된 이미지를 확인할 수 있습니다. 🔹 5단계: 컨테이너 실행 및 확인 이제 빌드한 이미지를 기반으로 컨테이너를 실행해봅시다. docker run -p 8080:8080 my-spring-app ✅ 브라우저에서 http://localhost:8080/api/hello 에 접속하면 "Hello from Dockerized Spring Boot!" 메시지가 나타납니다. 🎉
Docker 컨테이너 실행부터 Dockerfile 작성
Docker 컨테이너 실행 및 관리 Docker 컨테이너는 이미지를 기반으로 실행됩니다.Docker Hub에는 다양한 이미지가 제공되며, 가져와 실행할 수 있습니다. 🔹 첫 번째 컨테이너 실행하기 docker run hello-world ✅ 실행 결과Docker가 hello-world 이미지를 찾고 없다면 자동으로 다운로드한 후 실행합니다.이제 컨테이너가 정상적으로 동작하는지 확인! 🔹 실행 중인 컨테이너 확인 docker ps 이 명령어를 사용하면 현재 실행 중인 컨테이너 목록을 확인할 수 있습니다. 🔹 컨테이너 중지 및 삭제 # 컨테이너 중지 docker stop 컨테이너_ID # 컨테이너 삭제 docker rm 컨테이너_ID Dockerfile 작성 및 실행 Dockerfile은 컨테이너를 빌드하는 기초 파일 입니다.간단한 웹 서버를 실행하는 컨테이너를 통해 확인해보죠~ 🔹 간단한 Node.js 웹 서버 만들기 먼저, 프로젝트 폴더를 만들고 이동합니다. mkdir my-docker-app && cd my-docker-app 🔹 Dockerfile 작성 Dockerfile을 만들고 아래 내용을 작성합니다. # 1. Node.js 공식 이미지를 기반으로 사용 FROM node:18 # 2. 컨테이너 내 작업 디렉토리 설정 WORKDIR /app # 3. 애플리케이션 파일 복사 COPY . . # 4. 패키지 설치 RUN npm install # 5. 컨테이너 시작 시 실행할 명령어 CMD ["node", "server.js"] 🔹 간단한 server.js 파일 생성 Dockerfile과 같은 폴더에 server.js 파일을 만들고 다음 코드를 추가합니다. const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello from Docker!'); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000'); }); 🔹 Docker 이미지 빌드 이제 위의 Dockerfile을 사용해 이미지를 빌드합니다. docker build -t my-docker-app . 이 명령어를 실행하면 my-docker-app이라는 이름으로 Docker 이미지가 생성됩니다. 🔹 컨테이너 실행 만든 이미지를 기반으로 컨테이너를 실행합니다. -p 3000:3000에서 앞쪽(호스트 포트)과 뒤쪽(컨테이너 포트) 두 개의 포트를 적는 이유는 호스트(로컬 머신)와 컨테이너 간의 포트 매핑을 설정하기 위해서입니다. docker run -p 3000:3000 my-docker-app ✅ 실행 후 http://localhost:3000에 접속하면 "Hello from Docker!" 메시지를 확인할 수 있습니다! 🚀
Docker로 간단한 웹 서버 컨테이너 실행해보기
※ 아래 내용을 진행하기 위해서는 Nginx 이미지가 필요합니다. 📌 1. Nginx 웹 서버 실행 docker run -d --name my-nginx -p 8080:80 nginx ✅ 실행 후 브라우저에서 http://localhost:8080 접속하면 Nginx 웹 서버가 실행된 것을 확인할 수 있습니다. 🎉 📌 2. 실행 중인 컨테이너 확인 docker ps 📌 3. 컨테이너 중지 & 삭제 docker stop my-nginx docker rm my-nginx 📌 4. 사용하지 않는 모든 컨테이너 한 번에 삭제 docker system prune -a ✅ 불필요한 이미지와 컨테이너를 한 번에 정리할 수 있습니다. 8080 포트를 사용하고 있어서, 8081로 실행했지만, 위 명령어를 따라했다면, 아래와 같이 8080에서 돌아가는 화면을 확인할 수 있습니다.
Docker 설치 및 기본 명령어 사용법
Docker 설치 및 기본 명령어 Docker는 컨테이너를 사용하여 애플리케이션을 가볍고 효율적으로 실행할 수 있는 도구입니다.하지만 Docker를 처음 접하면 설치 방법과 기본 명령어를 어떻게 사용해야 할지 막막할 수 있습니다. ✅ 오늘의 주제✔️ Docker 설치 방법✔️ 기본 명령어 (docker run, docker ps, docker stop 등)✔️ 간단한 컨테이너 실행 및 관리 Docker 설치하기 1단계: Docker 다운로드 및 설치 운영체제(OS)에 따라 Docker를 설치하는 방법이 다릅니다. 📌 Windows & Mac 사용자는 Docker Desktop 설치 Docker 공식 사이트 접속 Docker Desktop 다운로드 후 설치 설치 후 Docker 실행 (트레이 아이콘에서 실행 확인) 📌 Linux(Ubuntu) 사용자는 터미널에서 설치 sudo apt update sudo apt install docker.io -y sudo systemctl start docker sudo systemctl enable docker ✅ 설치 확인 docker --version 💡 위 명령어를 실행했을 때 Docker 버전 정보가 출력되면 정상적으로 설치된 것입니다! 🎉 Docker 기본 명령어 사용법 1. 컨테이너 실행 (docker run) docker run hello-world ✅ hello-world라는 컨테이너가 실행되며, Docker가 정상적으로 동작하는지 테스트할 수 있습니다.✅ 처음 실행 시 이미지를 자동으로 다운로드한 후 실행합니다. 2. 실행 중인 컨테이너 확인 (docker ps) docker ps ✅ 현재 실행 중인 컨테이너 목록을 확인할 수 있습니다.✅ 중지된 컨테이너도 포함해서 보고 싶다면? docker ps -a 3. 컨테이너 중지 (docker stop) 컨테이너를 중지하려면 컨테이너 ID 또는 이름을 사용합니다. docker stop <컨테이너_ID> ✅ docker ps로 실행 중인 컨테이너 ID를 확인한 후 중지할 수 있습니다. 4. 컨테이너 삭제 (docker rm) docker rm <컨테이너_ID> ✅ 중지된 컨테이너를 완전히 삭제합니다.✅ 실행 중인 컨테이너는 삭제할 수 없으며, 먼저 docker stop을 실행해야 합니다. 5. Docker 이미지 확인 (docker images) docker images ✅ 현재 로컬에 저장된 Docker 이미지 목록을 확인할 수 있습니다.✅ 사용하지 않는 이미지를 삭제하려면? docker rmi <이미지_ID> 6. 컨테이너 로그 확인 (docker logs) docker logs <컨테이너_ID> ✅ 실행 중인 컨테이너의 로그를 확인할 수 있습니다.✅ 애플리케이션 실행 시 오류 발생 시 유용합니다! GUI가 편리하지만, 상황에 따라 CLI 명령어를 더 자주 사용해야 할 때가 있습니다. 따라서, 명령어가 다소 불편하더라도 CLI 사용법을 익혀두는 것을 추천합니다.
Docker 이미지 공유 및 다중 컨테이너 실행 가이드
🏗️ Docker에서 하나의 이미지로 여러 컨테이너 실행하기 Docker에서는 하나의 이미지(Image)를 기반으로 여러 개의 컨테이너(Container)를 실행할 수 있습니다.예를 들어, MySQL 이미지 하나를 사용하여 여러 개의 MySQL 컨테이너를 실행할 수 있습니다. 이미지와 컨테이너의 개념 정리 개념 설명 이미지 (Image) 실행 가능한 프로그램과 설정을 포함한 '템플릿' 컨테이너 (Container) 이미지를 기반으로 실행되는 독립적인 환경 ✅ 예제: MySQL 이미지로 여러 개의 컨테이너 실행 # 첫 번째 MySQL 컨테이너 실행 docker run --name mysql-container1 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest # 두 번째 MySQL 컨테이너 실행 docker run --name mysql-container2 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest 이렇게 실행하면 같은 MySQL 이미지를 공유하면서, 각각 독립적인 MySQL 컨테이너가 실행됩니다.하지만 기본적으로 컨테이너 간 데이터 및 네트워크는 격리되어 있습니다. Docker 이미지와 컨테이너의 관계 📌 이미지가 컨테이너에서 어떻게 공유되는가? Docker 이미지는 로컬 저장소(docker images)에 한 번 다운로드되면 계속 재사용됩니다. 컨테이너를 실행할 때마다 이미지를 기반으로 독립적인 환경이 생성됩니다. 컨테이너는 각각 개별적인 파일 시스템과 프로세스를 가짐 (기본적으로 격리됨). 🛠 이미지 공유 확인하기 docker images 위 명령어를 실행하면 다운로드한 MySQL 이미지가 목록에 표시됩니다.이 이미지를 여러 개의 컨테이너에서 재사용할 수 있습니다. 컨테이너 간 네트워크 연결 컨테이너끼리 서로 통신하려면 네트워크 설정이 필요합니다.예를 들어, mysql-container1과 mysql-container2가 같은 네트워크에서 통신 # 네트워크 생성 docker network create my-network # 첫 번째 MySQL 컨테이너 실행 (네트워크 추가) docker run --name mysql-container1 --network my-network -e MYSQL_ROOT_PASSWORD=root -d mysql:latest # 두 번째 MySQL 컨테이너 실행 (같은 네트워크 사용) docker run --name mysql-container2 --network my-network -e MYSQL_ROOT_PASSWORD=root -d mysql:latest 📌 컨테이너 간 MySQL 접속 테스트 이제 같은 네트워크에 있는 컨테이너끼리는 연결이 가능합니다.예를 들어, mysql-container1에서 mysql-container2로 접속 mysql -h mysql-container2 -u root -p 데이터 유지 및 볼륨 마운트 Docker 컨테이너는 기본적으로 데이터를 유지하지 않습니다.컨테이너가 삭제되면 내부 데이터도 사라지므로, 데이터를 유지하려면 볼륨(volume)을 사용해야 합니다. 📌 MySQL 컨테이너 실행 시 볼륨 마운트 추가 # 첫 번째 MySQL 컨테이너 실행 (볼륨 추가) docker run --name mysql-container1 --network my-network \ -e MYSQL_ROOT_PASSWORD=root \ -v mysql-data1:/var/lib/mysql \ -p 3307:3306 \ -d mysql:latest # 두 번째 MySQL 컨테이너 실행 (각각 독립적인 볼륨 사용) docker run --name mysql-container2 --network my-network \ -e MYSQL_ROOT_PASSWORD=root \ -v mysql-data2:/var/lib/mysql \ -p 3308:3306 \ -d mysql:latest ✅ 하나의 Docker 이미지는 여러 개의 컨테이너에서 재사용 가능✅ 각 컨테이너는 독립적으로 실행되며, 기본적으로 데이터와 네트워크는 격리됨✅ 같은 네트워크에 속한 컨테이너끼리는 연결 가능 (docker network create)✅ 데이터 유지를 위해 볼륨(volume) 마운트 필요 (-v mysql-data:/var/lib/mysql)✅ 포트 매핑을 통해 외부에서도 MySQL에 접근 가능 (-p 3307:3306)
Docker 이미지와 컨테이너, 뭐가 다를까?
이미지와 컨테이너 둘 다 Docker에서 애플리케이션을 실행하는 데 필요한 요소지만, 역할이 다릅니다. 💡 쉽게 말하면? 이미지(Image) = 레시피(요리법) 📜 컨테이너(Container) = 레시피를 보고 만든 요리 🍲 즉, 이미지는 실행할 애플리케이션의 ‘템플릿’ 역할을 하고, 컨테이너는 이를 실제로 실행하는 것입니다. Docker 이미지(Image)란? Docker 이미지는 컨테이너를 실행하기 위한 설정 파일과 애플리케이션 코드가 포함된 패키지입니다.이 이미지를 기반으로 컨테이너를 생성하면, 언제든지 동일한 환경에서 애플리케이션을 실행할 수 있습니다. 📌 Docker 이미지의 특징✅ 애플리케이션 실행에 필요한 모든 파일(코드, 라이브러리, 설정 등)이 포함됨✅ 실행 전에는 변경할 수 없는 불변(Immutable) 상태✅ Docker Hub 또는 로컬 저장소에 저장됨 📌 이미지 목록 확인하기 docker images ✅ 현재 로컬에 저장된 모든 Docker 이미지를 확인할 수 있습니다. Docker 컨테이너(Container)란? Docker 컨테이너는 이미지를 실행한 상태로, 실제 애플리케이션이 동작하는 독립된 환경입니다. 📌 Docker 컨테이너의 특징✅ 이미지에서 생성되며, 실행 중인 애플리케이션 환경✅ 여러 개의 컨테이너를 동일한 이미지에서 실행 가능✅ 필요하면 컨테이너를 쉽게 중지/삭제 가능 📌 컨테이너 목록 확인하기 docker ps -a ✅ 현재 실행 중이거나 중지된 모든 컨테이너를 확인할 수 있습니다. Docker 이미지 vs 컨테이너 비교 비교 항목 Docker 이미지 (Image) Docker 컨테이너 (Container) 역할 실행 가능한 애플리케이션 템플릿 실행 중인 애플리케이션 인스턴스 상태 불변 (변경 불가) 가변 (실행 중 데이터 변경 가능) 저장 위치 로컬/원격 저장소 (Docker Hub) 실행 중인 시스템 메모리 실행 여부 단독 실행 불가 실제 실행 가능 📌 쉽게 이해하면? 이미지 = 📜 설명서(레시피) 컨테이너 = 🍲 실제 요리된 음식