Skip to content

beryh/docker-basic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docker Basics

컨테이너는 소프트웨어 조직의 주요 업무인 소프트웨어 빌드, 테스트 및 배포하는 방식을 혁신하고 있습니다. 또한 Docker라는 컨테이너 런타임은 소프트웨어를 컨테이너에 패키징하고 하나 이상의 다양한 플랫폼에 배포할 수 있는 편리한 인터페이스를 제공합니다.

본 실습에서는 Docker의 기본 사항과 단일 머신의 Local 환경에서 Docker를 사용하는 방법에 대해 알아보겠습니다.

실습은 AWS의 개발용 워크스페이스인 Cloud9 내에서 진행하겠습니다.

Cloud9 워크스페이스 생성 및 설정 방법은 AWS Cloud9 워크스페이스 생성 및 설정을 참고하세요.

Docker 알아가기

먼저 AWS Cloud9 워크스페이스에 Docker가 설치되어 있는지 확인하고, 웹 서버 nginx의 표준 컨테이너 이미지를 다운로드하고 실행합니다.

  1. docker --version 명령어를 실행하여 클라이언트와 서버가 모두 있고 작동하는지 확인합니다.
docker --version
  1. Docker 컨테이너는 이미지를 사용하여 빌드됩니다. 먼저 docker pull nginx:latest 명령어를 실행하여 Docker Hub에서 nginx의 신뢰할 수 있는 최신 이미지를 다운로드합니다.
docker pull nginx:latest
  1. 이미지가 로컬 머신의 Docker 캐시에 있는지 확인하기 위해 docker images 명령어를 실행합니다. 로컬 머신에 이미지가 있으면 Docker Hub에서 다운로드하지 않습니다.
docker images
  1. 이제 docker run -d -p 8080:80 --name nginx nginx:latest 명령어를 실행하여 nginx 이미지를 백그라운드 데몬으로 인스턴스화합니다. 이 명령어는 호스트의 포트 8080를 컨테이너의 포트 80으로 전달하는 백그라운드 데몬으로 실행됩니다.
docker run -d -p 8080:80 --name nginx nginx:latest
  1. docker images 명령어를 실행하여 이미지가 로컬 머신의 Docker 캐시에 있는지 확인합니다.
docker images
  1. docker ps 명령어를 실행하여 nginx 컨테이너가 실행 중인지 확인합니다.
docker ps
  1. curl http://localhost:8080 명령어를 실행하여 Index Page(index.html)가 작동하는지 확인합니다.
curl http://localhost:8080
  1. docker logs nginx 명령어를 실행하여 nginx 컨테이너에서 생성된 로그를 확인합니다. 몇 차례 curl 요청을 보내면 로그가 생성됩니다.
docker logs nginx
  1. docker exec -it nginx /bin/bash 명령어를 실행하여 컨테이너의 대화형 쉘을 시작합니다.
docker exec -it nginx /bin/bash
  1. 컨테이너의 대화형 쉘에서 cd /usr/share/nginx/html 명령어를 실행하고 cat index.html 명령어를 실행하여 nginx가 제공하는 Index Page(index.html)의 내용을 확인합니다.
cd /usr/share/nginx/html
cat index.html
  1. exit 명령어를 실행하여 쉘을 종료합니다.
exit
  1. docker stop nginx 명령어를 실행하여 nginx 컨테이너를 중지합니다.
docker stop nginx
  1. docker ps -a 명령어를 실행하여 실행 중인 컨테이너가 여전히 있는지 확인합니다.
docker ps -a
  1. docker rm nginx 명령어를 실행하여 nginx 컨테이너를 삭제합니다.
docker rm nginx
  1. docker rmi nginx:latest 명령어를 실행하여 Local 캐시에서 nginx 이미지를 삭제합니다.
docker rmi nginx:latest

컨테이너 이미지 빌드하기

이 단계에서는 Dockerfile을 사용하여 인스턴스에 컨테이너 이미지를 빌드합니다. 이 샘플은 nginx 웹 서버가 포함된 이미지를 사용하여 간단한 HTML 페이지를 제공합니다.

  1. 먼저 컨테이너 이미지를 위한 작업 디렉토리를 만듭니다.
mkdir ~/environment/container-image
  1. 해당 폴더로 이동합니다.
cd ~/environment/container-image
  1. touch Dockerfile 명령어를 실행하여 빈 Dockerfile을 만듭니다. 이 파일에는 컨테이너 이미지를 빌드하는 데 필요한 일련의 단계를 추가할 것입니다.
touch Dockerfile
  1. 아래 명령어를 실행하여 Dockerfile 내용을 업데이트합니다.
cat <<EOF > Dockerfile
FROM nginx:latest
COPY index.html /usr/share/nginx/html
EOF
  1. touch index.html 명령어를 실행하여 빈 HTML 파일을 만듭니다.
touch index.html
  1. echo 명령어를 사용하여 간단한 메시지를 index.html 파일에 입력합니다.
echo "We've added our own custom content into the container" >> index.html
  1. docker build -t nginx:1.0 . 명령어를 실행하여 Dockerfile에서 nginx 컨테이너 이미지를 빌드합니다.
docker build -t nginx:1.0 .
  1. docker history nginx:1.0 명령어를 실행하여 nginx:1.0이 빌드되는 모든 단계와 기본 컨테이너를 확인합니다. 우리의 변경 사항이 하나의 작은 레이어에 불과하다는 것을 확인할 수 있습니다.
docker history nginx:1.0
  1. docker run -p 8080:80 --name nginx nginx:1.0 명령어를 실행하여 새로운 컨테이너를 실행합니다. 이번에는 -d 옵션을 입력하지 않아 터미널을 통해 컨테이너의 로그를 출력되므로 디버깅에 유용합니다.
docker run -p 8080:80 --name nginx nginx:1.0
  1. 다른 터미널 탭을 엽니다. (Window -> New Terminal)

  2. 다른 터미널 탭에서 curl http://localhost:8080 명령어를 실행하여 새로운 컨테이너의 내용을 확인합니다.

curl http://localhost:8080
  1. 첫 번째 터미널 탭으로 돌아가서 로그 출력(STDOUT)을 확인합니다.

  2. 이제 Docker Hub 또는 Amazon ECR과 같은 프라이빗 레지스트리에 푸시할 수 있습니다. 이에 대해서는 나중에 더 자세히 알아보겠습니다.

  3. Ctrl-C 명령어를 실행하여 로그 출력을 종료합니다. 컨테이너가 중지되었지만 docker ps -a 명령어를 실행하여 여전히 있는지 확인합니다.

docker ps -a
  1. sudo docker inspect nginx 명령어를 실행하여 중지된 컨테이너에 대한 많은 정보를 확인합니다.
sudo docker inspect nginx
  1. 이전과 마찬가지로 docker rm nginx 명령어를 실행하여 컨테이너를 삭제합니다.
docker rm nginx

컨테이너 파일 시스템 마운트하기

  1. 이번엔 파일을 이미지에 포함시키는 대신, 호스트의 파일을 마운트하여 컨테이너에 탑재합니다.

-v 옵션은 호스트의 파일을 컨테이너에 마운트합니다. :ro 옵션은 읽기 전용으로 마운트합니다.

docker run -d -p 8080:80 -v /home/ec2-user/environment/container-image/index.html:/usr/share/nginx/html/index.html\:ro --name nginx nginx:latest
  1. 이제 curl http://localhost:8080 명령어를 실행하여 컨테이너의 내용을 확인합니다. 이번에는 이미지가 Docker Hub에서 제공하는 기본 nginx 이미지이지만 컨테이너의 내용이 있습니다.
curl http://localhost:8080
  1. index.html 파일을 편집하고 몇 가지 추가 사항을 추가합니다.
echo "This is another line I've added to my container" >> index.html
  1. 다른 터미널 탭에서 curl http://localhost:8080 명령어를 실행하여 컨테이너의 내용을 확인합니다. 이미지 재실행 없이 변경 사항이 반영된 것을 확인할 수 있습니다.
curl http://localhost:8080
  1. 마지막으로, docker stop nginx 명령어와 docker rm nginx 명령어를 실행하여 nginx 컨테이너를 중지하고 삭제합니다.
docker stop nginx && docker rm nginx

심화 실습

참고 자료

About

Docker의 기본적인 명령어들을 학습할 수 있습니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published