📌 Docker Desktop
- Windows, macOS, Linux 등 다양한 운영체제에서 사용할 수 있는 Docker 플랫폼의 데스크톱 버전
- 그래픽 사용자 인터페이스(GUI)를 제공해 Docker 컨테이너를 쉽게 생성하고 실행, 관리가 가능함
📣 Docker Desktop의 기능
- 컨테이너 생성 및 실행
- Docker Hub에서 이미지를 다운로드하거나 직접 이미지를 빌드하여 컨테이너를 생성하고 실행할 수 있음
- 컨테이너 관리
- 컨테이너를 시작, 중지, 재시작, 삭제할 수 있음
- 컨테이너 상태를 모니터링하고, 컨테이너 로그를 볼 수 있음
- 컨테이너 네트워킹
- 컨테이너 보안
📌 컨테이너 실행하기
📣 Image와 Container 관계

- Docker는 pull 명령어로 Docker Hub에서 이미지를 가져오고, run 명령어로 이미지를 사용해 컨테이너를 실행함
📣 CLI를 이용한 Nginx 컨테이너 실행
CLI 란?
- 명령줄 인터페이스
- 글자를 입력하여 컴퓨터에 명령을 내리는 방식
- Docker Hub에서 최신 버전의 Nginx 이미지 가져오기
docker pull nginx:latest
- 다운로드 받은 이미지 목록 확인
docker images
- Docker 컨테이너 실행하기 (-p 옵션으로 컨테이너가 포트 80을 이용해 외부에서 엑세스 가능)
- -d(daemon)는 컨테이너를 백그라운드에서 실행하도록 하는 옵션
- --name은 컨테이너 이름을 설정해주는 옵션
- -p 80:80은 Host의 80 포트로 유입되는 트래픽을 Container의 80 포트로 전달되게 하는 명령 (Nginx의 default 포트: 80)
docker run -d --name nginx-ws -it -p 80:80 nginx:latest
- ps 명령어를 통해 실행 중인 컨테이너 확인 가능(-a 옵션은 컨테이너 목록)
docker ps
-
브라우저에서 localhost 입력 시, 접속 확인 (80번 포트번호 생략 가능)

-
실행한 컨테이너 중지시키기
- ps 명령어로 실행 중인 컨테이너 목록에서 사라진 것 확인 가능
docker stop nginx-ws
- 컨테이너 삭제하기
- ps -a 명령어로 컨테이너 목록에서 사라진 것 확인 가능
docker rm nginx-ws
📣 GUI를 이용한 MYSQL 컨테이너 실행
- Docker Hub에서 MySQL 이미지 가져오기
docker pull mysql:latest
-
Docker Desktop의 Images 탭에서 이미지 확인

-
컨테이너 실행하기
- 컨테이너 이름에 mysql-db로 이름 지정
- -e 옵션으로 컨테이너의 MYSQL_ROOT_PASSWORD 환경변수 값으로 xxxx 지정 → MYSQL 루트 사용자의 암호를 해당 암호로 설정 (해당 암호 미설정 시, 컨테이너 시작 불가)
- Container 탭에서 컨테이너 생성 확인 가능
docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=**** mysql

-
명령 실행하기
- Exec 탭은 실행 중인 컨테이너에 명령을 실행하는데 사용됨 → 컨테이너에 연결해서 명령을 실행할 수 있는 터미널
- mysql -u root -p 를 통해 mysql에 접속 가능

-
컨테이너 중지, 삭제하기
- 중지, 삭제 아이콘으로 컨테이너를 쉽게 중지, 삭제 가능


📌 Docker 명령어
📣 일반 명령어
- docker version : Docker 클라이언트 및 서버의 버전 표시
- docker info : Docker 설치 상태 및 정보 표시
- docker help : Docker 명령어의 도움말 표시
📣 이미지 명령어
- docker pull : Docker Hub에서 이미지를 가져옴
- docker push : Docker Hub에 이미지를 푸시
- docker images : Docker 이미지 목록을 표시
- docker search : Docker Hub에서 이미지를 검색
📣 컨테이너 명령어
- docker run : 이미지를 사용하여 컨테이너 실해
- docker stop : 컨테이너 중지
- docker start : 중지된 컨테이너 시작
- docker restart : 실행 중인 컨테이너 다시 시작
- docker ps : 실행 중인 컨테이너 목록 표시 (-a 옵션: 모든 컨테이너 목록 표시)
- docker logs : 컨테이너의 로그 표시
- docker kill : 강제로 컨테이너 종료
- docker rm : 컨테이너 삭제
📌 Dockerfile
📣 Dockerfile 이란?
- Docker Image를 생성하기 위한 스크립트(설정 파일)
- Dockerfile을 사용해 컨테이너에 필요한 이미지, 런타임, 라이브러리, 소스 코드 지정 가능
- Docker 컨테이너를 빌드하기 위한 스크립트
- Dockerfile을 해석해 이미지가 어떻게 구성되어 있는지 파악 가능
🟠 특징
- 텍스트 기반 스크립트 → 사람이 이해하고 관리하기 쉬움
- 이미지 기반 빌드 지원 → 컨테이너의 크기 최소화 가능
- 이미지 재사용 지원 → 동일한 애플리케이션을 여러 환경에서 배포하기 쉬움
🟠 장점
- 애플리케이션의 배포 및 관리 단순화
- 애플리케이션의 일관성 보장
- 애플리케이션의 보안 강화
🟠 단점
- Dockerfile을 작성하고 관리하는데 시간 소요
- Dockerfile이 복잡해질 수 있음
📣 Dockerfile 구조
FROM <이미지>
RUN <명령어>
CMD <명령어>
- FROM 키워드 다음으로는 컨테이너의 기본 이미지 지정
- FROM은 항상 Dockfile의 맨 첫 줄에 있어야 함
- RUN 키워드 다음으로는 컨테이너를 실행하기 전에 실행할 명령어 지정
- CMD 키워드 다음으로는 컨테이너가 시작될 때 실행할 명령어 지정
📣 Dockerfile 명령어
- FROM : 컨테이너의 기본 이미지를 지정
- RUN : 컨테이너를 실행하기 전에 실행할 명령어를 지정
- CMD : 컨테이너가 시작될 때 실행할 명령어를 지정
- EXPOSE : 컨테이너의 외부 포트를 지정
- ENV : 컨테이너의 환경 변수를 설정
- ADD : 컨테이너에 파일 추가
- COPY : 컨테이너에 파일 복사
- VOLUME : 컨테이너의 볼륨을 지정
- USER : 컨테이너의 사용자를 지정
- WORKDIR : 컨테이너의 작업 디렉토리를 지정
📣 Dockerfile 실행
docker build -t <이미지 이름>
docker images
📌 Dockerfile 사용 예제
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
- Ubuntu의 최신 이미지를 기반으로 하고, nginx 웹 서버를 설치하며 nginx 웹 서버를 데몬 모드로 실행함
- 위 Dockerfile을 사용해 이미지로 빌드
- 현재 디렉토리의 Dockerfile을 사용해서 nginx 이미지를 빌드함
docker build -t nginx