도커 기초
Introduction
Docker가 설치되어 있는지 확인
생성된 모든 컨테이너 목록 확인
Docker 실행 옵션 확인 - Docker 구조
containerd 상태 확인 - https://www.docker.com/blog/docker-engine-1-11-runc/
Docker CLI로 컨테이너 생성
현재 실행중인 컨테이너 목록 확인
로컬호스트에 연동된 포트로 HTTP 요청
runc가 생성한 컨테이너 확인
컨테이너를 통해서 실행된 프로세스 확인
위에서 생성한 컨테이너 삭제 시도
실행중인 컨테이너 정지
컨테이너 삭제
생성된 모든 컨테이너 목록 확인
지난 30분간 Docker에서 발생한 이벤트 확인
컨테이너 이미지 구조
Apache 컨테이너 이미지 다운로드
Docker Hub에서 Apache 컨테이너 이미지 검색
Apache 컨테이너 이미지 다운로드
Docker Hub에서 latest 태그를 가진 Apache 컨테이너 이미지의 상세 내용 확인
Docker Hub에서 alpine 태그를 가진 Apache 컨테이너 이미지의 상세 내용 확인
Alpine 리눅스를 사용하는 Apache 컨테이너 이미지 다운로드
로컬호스트에 저장된 컨테이너 이미지 확인
alpine 태그를 가진 Apache 컨테이너 이미지의 상세 내용 확인
alpine 태그를 가진 Apache 컨테이너 이미지 삭제
bookworm 태그를 가진 NGINX 컨테이너 이미지 다운로드
로컬호스트에 저장된 컨테이너 이미지 확인
bookworm 태그를 가진 NGINX 컨테이너 이미지 삭제
새로운 컨테이너 이미지 빌드
로컬호스트에 저장된 컨테이너 이미지 확인
컨테이너 이미지 빌드에 사용한 베이스 이미지 다운로드
python과 flask 이미지의 Layer 비교
flask 이미지의 상세 내용 확인
마지막에 수행되는 명령만 변경해서 새로운 이미지 빌드
flask와 boto3 이미지의 Layer 비교
이미지 삭제
이미지 생성 및 공유
데모 애플리케이션 소스코드 다운로드
애플리케이션 구동에 필요한 라이브러리 설치
애플리케이션 구동
새로운 터미널을 열고 웹 애플리케이션이 구동하는지 확인
기존 터미널로 돌아와서
Ctrl+C
를 입력해서 애플리케이션 정지Dockerfile 리뷰
컨테이너 이미지 빌드
컨테이너 실행
컨테이너가 정상적으로 실행 되었는지 확인
컨테이너 삭제
ECR 리포지토리 생성
위에서 생성한 ECR 리포지토리의 URI를 확인하고 환경변수로 지정
위에서 생성한 컨테이너 이미지에 새로운 태그 부여
컨테이너 이미지 목록 확인
컨테이너 이미지를 ECR 리포지토리로 업로드
ECR 레지스트리로 로그인
컨테이너 이미지를 ECR 리포지토리로 업로드
이미지가 정상적으로 업로드 되었는지 확인
로컬호스트에 생성된 모든 컨테이너 삭제
로컬호스트에 저장된 모드 컨테이너 이미지 삭제
ECR 리포지토리에 저장된 이미지로 컨테이너 생성
컨테이너가 정상적으로 실행 되었는지 확인
컨테이너 및 이미지 삭제
아래의 요구 사항에 맞게 컨테이너 이미지를 만들고 실행하세요.
Docker Hub에 있는 NGINX 이미지 사용
웹사이트 루트를 호출하면 Hello, Container가 표시어야 함
로컬호스트의 8080포트를 컨테이너에서 실행되는 NGINX 웹서버의 포트와 연동
이미지 경량화
데모 애플리케이션 소스코드 다운로드
애플리케이션 구동
새로운 터미널을 열고 웹 애플리케이션이 구동하는지 확인
기존 터미널로 돌아와서
Ctrl+C
를 입력해서 애플리케이션 정지Dockerfile 리뷰
컨테이너 이미지 빌드
컨테이너 실행
컨테이너가 정상적으로 실행 되었는지 확인
컨테이너 삭제
컨테이너 이미지 크기 확인
멀티 스테이지로 짜여진 Dockerfile 리뷰
컨테이너 이미지 빌드
컨테이너 이미지 크기 확인
새로운 이미지 빌드
컨테이너 이미지 크기 확인
14번 명령어에 명시된 Dockerfile을 수정해서 경량화된 이미지를 생성하세요.
컨테이너 네트워크
호스트에 있는 네트워크 인터페이스 목록 확인
컨테이너 생성
컨테이너에 부여된 IP 확인
컨테이너에서 실행중인 NGINX 웹서버 호출
호스트에 있는 네트워크 인터페이스 목록 확인
컨테이너 안에 있는 네트워크 인터페이스 목록 확인
컨테이너에 ip 프로그램 설치
컨테이너 안에 있는 네트워크 인터페이스 목록 확인
호스트에 있는 네트워크 인터페이스 목록 확인
컨테이너 로그 확인
컨테이너 삭제
Docker 네크워크 목록 확인
컨테이너 재생성
컨테이너 안에 있는 네트워크 인터페이스 목록 확인
웹브라우저에서 Cloud9 인스턴스의 공인 IP로 접속되는지 확인 - 아래 명령어로 주소 확인 가능
연결에 실패할 경우에는 아래의 명령어를 실행해서 보안그룹에 인바운드 규칙 추가
컨테이너 삭제
컨테이너 재생성
웹브라우저에서 포트포워딩한 포트를 통해서 컨테이너로 접근되는지 확인 - 아래 명령어로 주소 확인 가능
연결에 실패할 경우에는 아래의 명령어를 실행해서 보안그룹에 인바운드 규칙 추가
Iptable의 모든 규칙 확인
DOCKER 규칙 확인
컨테이너 삭제
DOCKER 규칙 확인
컨테이너 재생성
웹브라우저에서 포트포워딩한 포트를 통해서 컨테이너로 접근되는지 확인 - 아래 명령어로 주소 확인 가능
Loopback 주소로 접속 시도
새로운 컨테이너 생성
새로 생성한 컨테이너에서 NGINX 컨테이너에 접근이 되는지 확인
컨테이너 삭제
새로운 Docker 네크워크 생성
Docker 네크워크 목록 확인
위에서 생성한 Docker 네트워크를 사용하는 컨테이너 생성
새로 생성한 컨테이너에서 NGINX 컨테이너에 접근이 되는지 확인
새로 생성한 Docker 네트워크를 사용하는 Apache 컨테이너 생성
동일한 Docker 네트워크를 사용하는 컨테이너에서 Apache 컨테이너에 접근이 되는지 확인
컨테이너 이름으로 Apache 컨테이너에 접근이 되는지 확인
컨테이너 이름으로 도메인 주소 검색 시도
Apache 컨테이너의 IP 주소 확인
리소스 정리
아래의 요구 사항에 맞게 컨테이너 이미지를 만들고 실행하세요.
Docker Hub에 있는
mysql:5.7
이미지 사용로컬호스트의 3366 포트를 컨테이너에서 실행되는 MySQL 데이터베이스의 포트와 연동
로컬호스트에서 아래의 명령어를 실행해서 DB에 접속
컨테이너 스토리지
리소스 정리
MySQL 컨테이너 생성
데이터베이스 및 레코드 생성
위에서 생성한 데이터를 확인
만약 MySQL 컨테이너를 삭제하면 위에서 생성한 데이터는 어떻게 되나요?
컨테이너 생성에 사용된 명령 및 메타데이터(Dockerfile에 명시된 내용) 확인
MySQL 컨테이너에 마운트된 볼륨 확인
Docker 볼륨 목록 확인
MySQL 컨테이너에 마운트된 볼륨 ID를 환경 변수로 저장
만약 MySQL 컨테이너를 삭제하고 재생성하면 위에서 생성한 데이터가 새로 생성된 컨테이너에 연동될까요?
MySQL 컨테이너 재생성
데이터 확인
Docker 볼륨 목록 확인
MySQL 컨테이너 삭제
MySQL 컨테이너 재생성
데이터 확인
MySQL 컨테이너 삭제
Docker 볼륨 목록 확인
사용하지 않는 볼륨 삭제
Docker 볼륨 생성
MySQL 컨테이너 생성
MySQL 컨테이너에 마운트된 볼륨 확인
리소스 정리
디렉토리 생성
HTML 문서 생성
NGINX 컨테이너 생성
NGINX 웹서버 호출
HTML 문서에 내용 추가
NGINX 웹서버 호출
컨테이너의
/usr/share/nginx/html
경로에 있는 파일 확인컨테어너와 연동된 디렉토리에 새로운 파일 생성
컨테이너의
/usr/share/nginx/html
경로에 있는 파일 확인컨테이너에서 호스트와 연동된 디렉토리에 새로운 파일 생성
로컬호스트의
$HOME/environment/nginx/html
경로에 있는 파일 확인리소스 정리
아래의 요구 사항에 맞게 컨테이너 이미지를 만들고 실행하세요.
my-app 이라는 이름의 Docker 볼륨 생성
Docker 허브에 있는 NGINX 이미지로 컨테이너를 생성하고 위에서 생성한 my-app 볼륨을
/opt/app
경로에 마운트NGINX 컨테이너
/opt/app/
경로에 hello.txt 파일을 생성하고 내용으로 world를 추가Docker 허브에 있는 Apache 이미지로 컨테이너를 생성하고 위에서 생성한 my-app 볼륨을
/usr/app
경로에 마운트를 하되 읽기 권한만 부여Apache 컨테이너
/usr/app/
경로에 hello.txt 파일이 있는지 확인 하고 내용 확인Apache 컨테이너에서
/usr/app/hello.txt
파일을 열고 수정이 가능한지 확인
컨테이너 디버깅
리소스 정리
NGINX 컨테이너 생성
컨테이너에서 프로세스를 실행하는 유저 확인
컨테이너에 생성되어 있는 유저 목록 확인
NGINX 컨테이너 삭제
NGINX 컨테이너 재생성하고 nginx 유저로 프로세스 실행
실행중인 컨테이너 목록 확인
모든 컨테이너 목록 확인
NGINX 컨테이너 상태에 대한 상세 내용 확인
NGINX 컨테이너 로그 확인
NGINX 컨테이너의 로그 파일이 저장되는 경로 확인
로그 파일 내용 확인
NGINX 컨테이너 삭제
삭제된 컨테이너의 로그 파일이 남아 있는지 확인
NGINX 컨테이너 재생성
NGINX 컨테이너 환경에 bash 프로세스 실행
NGINX 설정 파일 확인
NGINX 프로세스의 PID 파일이 생성되는 경로의 권한 확인
실행중인 프로세스 목록 확인
실행중인 프로세스의 리소스 사용량 확인
bash 프로세스 종료
NGINX 컨테이너에서 실행중인 프로세스 목록 확인
NGINX 컨테이너가 사용중인 리소스 사용량 확인
새로운 컨테이너 생성
컨테이너가 실행중인지 확인하고 실행중이지 않다면 어떤 이유인지 확인
컨테이너 로그 확인
컨테이너 로그에
Hello, Docker
가 출력되도록 컨테이너 생성컨테이너 로그 확인
컨테이너 로그에 현재 시간이 출력 되도록 컨테이너 생성
컨테이너 로그 확인
리소스 정리
아래의 내용들을 수행해서 문제 해결
컨테이너 생성
컨테이너 안에
/app/password.txt
파일의 내용을 확인새로운 컨테이너 생성
애플리케이션 로그 파일을 참고해서 애플리케이션이 정상적으로 실행되고 종료되도록 설정 애플리케이션이 정상 실행/종료되면 애플리케이션 로그를 통해서 다음 단계에서 필요한 정보를 확인 가능
새로운 컨테이너 생성
TCP 서버가 구동중이고 이전 단계에서 확인한 암호를 TCP 서버로 전송하게 되면 다음 단계에서 필요한 정보를 확인 가능
새로운 컨테이너 생성
컨테이너 안에
/message.txt.gpg
파일이 GPG를 통해서 암호화 되어있습니다. 파일 내용을 확인하세요.
Last updated