Amazon EC2에서 Docker 기초: 실용적인 소개
Source: Dev.to
위에 제공된 Source 링크 아래에 번역하고자 하는 본문을 알려주시면, 해당 내용을 한국어로 번역해 드리겠습니다.
(코드 블록, URL 및 기술 용어는 그대로 유지하고, 마크다운 형식과 원본 포맷도 그대로 보존합니다.)
간단한 이야기부터 시작해봅시다
이 상황을 상상해 보세요.
개발자가 자신의 노트북에서 애플리케이션을 만들었습니다. 완벽히 동작합니다. 자신감이 생긴 그는 이를 테스트 팀에 전달합니다.
그런데 다음과 같은 메시지가 도착합니다:
“앱이 우리 서버에서 작동하지 않아요.”
개발자는 모든 것을 점검하고 답합니다:
“하지만 제 머신에서는 잘 돌아갑니다!”
이런 상황이 익숙하다면, 여러분은 소프트웨어 개발에서 가장 큰 문제 중 하나를 이미 마주한 것입니다.
실제로 무엇이 잘못됐나요?
애플리케이션은 다음에 의존했습니다:
- 특정 버전의 프로그래밍 언어
- 특정 라이브러리와 도구
- 개발자 노트북에 설정된 구성 파일
서버는 약간 다른 설정을 가지고 있었고—그것만으로도 앱이 깨졌습니다.
🐳 Docker에 입문
Docker는 스마트한 패키징 시스템처럼 등장합니다. 단순히 애플리케이션 코드만 보내는 대신, Docker는 실행에 필요한 런타임, 라이브러리, 설정 등을 모두 포함해 컨테이너라는 단일 단위에 앱을 포장합니다.
이제 앱이 이동할 때:
- 노트북에서 → 테스트 서버
- 테스트 서버에서 → 프로덕션
- 로컬 시스템에서 → 클라우드
…어디서나 정확히 동일하게 동작합니다.
Docker를 이렇게 생각해 보세요
당신이 친구에게 집에서 만든 요리를 보내는 상황을 상상해 보세요. 레시피만 보내고 그들이 올바른 재료와 스토브를 가지고 있기를 바라는 대신, 밀봉된 상자 안에 이미 조리된 완전한 식사를 보내는 것입니다. 그것이 Docker입니다.
EC2에 Docker 설치하기
- Amazon Linux AMI를 사용하여 EC2 인스턴스를 시작하고 Instance Connect를 통해 연결합니다.
- 다음 명령을 실행합니다:
sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ec2-user # sudo 없이 Docker를 실행하도록 허용
Docker 설치 확인
docker --version
EC2 인스턴스를 종료하고 다시 연결한 후, 다음을 실행하십시오:
docker ps # Should return an empty list
Source:
컨테이너 실행
docker run 명령은 지정된 이미지로부터 컨테이너를 생성하고 시작합니다. 예를 들어, Redis 컨테이너를 시작하려면:
docker run redis
Redis 이미지가 로컬에 없으면 Docker가 자동으로 Docker Hub에서 이미지를 가져옵니다. 이후 실행에서는 캐시된 이미지를 사용합니다.
컨테이너 수 세기
-
실행 중인 컨테이너 목록:
docker ps -
전체 컨테이너 목록 (중지된 컨테이너 포함):
docker ps -a
컨테이너 중지
docker stop <container-id-or-name>
컨테이너 제거
참고: 컨테이너는 제거하기 전에 반드시 중지되어야 합니다.
docker rm <container-id-or-name>
이미지 개수 세기
docker images
이미지 가져오기
docker pull <image-name>:<tag>
태그를 지정하지 않으면 Docker는 기본적으로 latest 태그를 가져옵니다.
이미지 삭제
이미지를 사용 중인 컨테이너가 없는지 확인하십시오(중지하고 제거). 그런 다음 실행합니다:
docker rmi <image-id-or-name>
분리 모드에서 컨테이너 실행
백그라운드에서 실행하려면 -d 플래그를 추가합니다:
docker run -d <image-name>
docker run -d --name=webapp1 nginx:1.14-alpine
로컬 레지스트리 호스팅
docker run -d --name my-registry -p 80:5000 --restart always registry:2
Nginx 이미지 가져오기
docker pull nginx:latest
새 이름으로 이미지 태깅
docker image tag nginx:latest localhost:80/nginx:latest
이미지 푸시하기
docker push localhost:80/nginx:latest
이미지가 푸시되었는지 확인하기
curl -X GET localhost/v2/_catalog

웹 애플리케이션을 위한 포트 매핑
외부에서 애플리케이션에 접근하려면 -p 옵션을 사용해 호스트 포트를 컨테이너 포트에 매핑합니다:
docker run -d --name=flask -p 80:80 nandinivijayr/myflaskapplication
위 명령은 컨테이너 포트 80을 호스트 포트 80에 매핑하고, 컨테이너를 분리 모드(detached mode)로 실행합니다.
컨테이너 및 이미지 검사
컨테이너에 대한 자세한 JSON 구성을 가져오려면:
docker inspect <container-id-or-name>
이미지에 대한 자세한 JSON 구성을 가져오려면:
docker inspect <image-id-or-name>
컨테이너 로그 가져오기
docker logs <container-id-or-name>
질문 시간
MySQL 컨테이너를 실행하고 원하는 이름을 지정하세요.