📌 공부 계기
원티드 챌린지가 이번 달 제공하는 강의는 Docker! Docker 강의가 총 4번 이루어지는 데 정리해보려고 합니다.
Docker 강의 1 :
목차
📍이론편 : 도커 개념
* 도커 공식 홈페이지
Docker: Accelerated, Containerized Application Development
Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
도커 이론 편은 이전 도커 개념을 정리한 포스팅에 고병현님의 강의내용을 추가해 정리
Docker] 개념
📌 공부 이유 실전 프로젝트하면서 백엔드를 고도화하면서 여러기술에 도전해보고 있다. Docker도 그 중 하나로, 이름만 알고 뭐하는 녀석인지 전혀 몰랐기 때문에 먼저 개념을 공부해보고 실습
littlezero48.tistory.com
📍실습편 1 : 기본 CLI
공식 홈페이지의 Command-line reference (공식 홈페이지를 공부하자!)
Docker run reference
docs.docker.com
0️⃣ 사전 준비
📢 참고 : 저는 윈도우에 리눅스를 사용할 수 있게 하는 WSL2 설치한 환경에서 진행 했습니다.
* 파워쉘에서 명령어 wsl 접속 or Ubuntu on Windows 실행
* Docker Desktop 실행도 해줘야 함


1️⃣ 도커 이미지 다운로드
- Docker hub로 부터 httpd 이미지를 다운받아 본다
docker pull 이미지이름
- pull하고 나서 이미지 조회 하면 추가된 걸 확인 할 수 있다
2️⃣ 이미지를 통해 컨테이너 생성
- run 명령어를 통해 해당 이미지에 대한 컨테이너 생성
* 주의 : httpd 같은 경우 run 시키면 이 화면을 더 이상 사용할 수 없게 된다. 화면을 분할해서 이후 명령어를 사용해보자
(아니면 d 옵션을 함께 주어 데몬모드로 run!)
✅ 화면 분할 방법
방법1) 탭 타이틀에서 오른쪽 클릭 (단, 세로 -> 가로 -> 세로 -> ... 식으로 분할)

방법2) Ctrl + Shift + P 로 명령 도구 모음을 실행해서



✅ 결과

- 컨테이너 실행 확인 (이름 설정을 안하면 container name은 임의로 결정됨)
docker ps
- 이름옵션을 사용해 컨테이너 이름을 설정하고 컨테이너 생성 (secondContainer 라는 이름으로)
docker run --name 컨테이너이름 사용할이미지이름
3️⃣ 컨테이너의 포트와 연동시키기 (Port Forwarding) 1
- 컨테이너 생성시 p 옵션으로 LocalPort : ContainerPort 로 해서 포트를 연결한다.
docker run -p 로컬포트:컨테이너포트 --name 컨테이너이름 사용할이미지이름
4️⃣ 이미지 내부의 파일을 교체하기
- 교체하려는 파일이 있는 디렉토리로 찾아감
- 해당 디렉토리에 대해 VScode 실행
code .
- 위 경로의 index.html을 서빙하도록 교체하고 싶다!
v 옵션을 통해서 볼륨 마운트가 가능한데 이게 이미지의 파일을 호스트의 파일로 덮어씌우는 걸 말한다.
여기서 -v HostPath : ContainerPath 로 앞의 HostPath는 덮어씌울 파일이 있는 경로로
내가 덮어씌우려는 경로는 아래 그림의 하늘색 글자 부분과 같다.
호스트 경로 방식 적용은 윈도우랑 우분투랑 다르니 참고!
5️⃣ 컨테이너 STOP
docker stop 컨테이너ID
docker stop 컨테이너이름
6️⃣ 컨테이너 START
run 처럼 컨테이너 생성과 동시에 실행하는 게 아닌 멈춤 컨테이너를 다시 실행시키는 명령어
- 일단 docker ps가 실행되고 있는 컨테이너만 조회했다면 여기에 -a 옵션 (all)을 붙여 실행여부와 상관없이 생성되어있는 모든 컨테이너를 조회한다.
docker ps -a
- 실행
STATUS를 보면 Exited 에서 Up으로 변경되며 실행
docker start 컨테이너ID
docker start 컨테이너이름
7️⃣ 컨테이너 제거
rm 명령어 (remove) 를 사용해 컨테이너 제거
docker rm 컨테이너ID
docker rm 컨테이너이름
둘다 지우고 나니 ps -a 시 아무것도 안나오는 것 확인!
+ 참고로 실행 중인 컨테이너는 삭제할 수 없다. stop으로 정지하고 지울 것
8️⃣ 이미지 제거
rmi 명령어 (remove image) 를 사용해 이미지 제거
docker rmi 이미지이름
+ 이미지 역시 이 이미지를 사용하는 컨테이너가 존재한다면 지울 수 없다. 해당 이미지를 사용하는 컨테이너를 모두 지워야 제거 가능
📍실습편 2 : 커스텀 이미지 생성
Dockerfile reference
docs.docker.com
실습 내용
httpd 이미지를 pull 받아 실습 1때 처럼 index.html을 교체하고 포트포워딩까지 해서 run 하는 이미지를 생성
1️⃣ 도커 파일 생성
도커파일은 yaml(야믈)파일로 만들어진다
yaml파일 명령어는 ARG(환경변수), From(베이스이미지), CMD(명령 실행) 등이 있는데 위의 공식 홈페이지에 더 많이 있다. 이번은 간략하게 3가지 명령어 만을 사용하여 실습!
* 도커파일
FROM : httpd:latest 이미지를 베이스로
COPY : host 현재 경로의 index.html 파일을 컨테이너의 /usr/local/apache2/htdocs/index.html의 경로로 복사한다
EXPOSE : 그리고 80포트를 연다
2️⃣ 도커 이미지 생성
build 명령어로 이미지를 생성하며 새로 생성하는 이미지는 -t 옵션 (tag)을 통해 이미지 이름이 설정되고
경로 경우 현재 경로로 부터의 위치를 말하는 것으로 이미 그 위치에 있었기 때문에 . 으로 표현
docker build -t 이미지이름 경로
3️⃣ 커스텀한 이미지 실행
볼륨 마운트 과정없이 바로 커스텀 index.html로 적용된 걸 볼 수 있다.
이런식으로 만든 것을 docker hub에 올려 언제든 다운받아 사용도 가능하다.
첫번째 강의 끝
포트포워딩이란?
외부 주소와 내부 주소를 이어주는 것 [본문으로]
'DevOps > Docker' 카테고리의 다른 글
따배도 도커 시리즈 0~3-2] 도커 살펴보기 (0) | 2023.04.12 |
---|---|
원티드 챌린지 Docker 2] 로컬환경에서 도커를 활용해보자! (0) | 2023.04.09 |
Docker] 개념 (0) | 2023.04.08 |
Docker] 이미지 pull + 컨테이너 사용 (2) | 2023.01.18 |
Docker] 설치 (0) | 2023.01.17 |