AWS Cloud School 13기 60일차

Forever 김·2026년 3월 26일

AWS Cloud School

목록 보기
57/97

TIL

배운 내용

Docker

docker run

  • 컨테이너 생성(create) 및 실행(start)
root@contem:~# docker run nginx
# nginx라는 이미지로 컨테이너를 run(생성 + 동작) 시키겠다

컨테이너 이미지는 여러개의 layer로 구성되어있다
A 이미지 = 1+2+3 이고 B 이미지 = 1+2+5라면 A 이미지를 갖고있는 상태에서 B 이미지를 새로 구성한다면, 5라는 layer만 새로 구성하고 1+2는 재활용한다.
또한 여러개의 컨테이너를 만든다고 하더라도 컨테이너 이미지 자체는 변하지 않는다.

docker ps

  • 동작중인 컨테이너 조회
  • 모든 컨테이너 조회 : -a 옵션 사용

docker run을 하면 컨테이너가 생성된다. 현재 생성된 컨테이너는 --name 옵션을 통해 이름을 정하지 않아 random한 이름이 부여된다.

만약 옵션없이 docker run을 하면 컨테이너 내부로 진입한다.
컨테이너가 잘 동작하려면 반드시 내부에서 foreground 상태인 프로세스가 존재 해야한다!

docker rm

  • 컨테이너 삭제
  • 보통은 docker rm -f 옵션과 잘 쓴다.
  • -f : 강제로 삭제

--name

컨테이너의 이름을 지정할 수 있다.

root@contem:~# docker run --name mycon nginx

컨테이너 life cycle

docker run의 옵션

  • detach (-d) : 데몬으로 생각해도 좋다
root@contem:~# docker run -d --name ntest nginx:latest
# -d:호스트입장에서 백그라운드로 컨테이너 실행.
root@contem:~# docker inspect ntest
# inspect : 자세히 조사.
# ntest라는 이름을 갖고있는 컨테이너의 자세한 정보를 보고싶다.
  • -it 옵션
    이미 컨테이너가 존재한다면 exec -it로 컨테이너 내부로 들어갈 수 있다.

    만약에 컨테이너를 다 전부 삭제하고 싶다면
    docker rm -f $(docker ps -qa)
    로 삭제할 수 있다.

  • Volume(-v)
    컨테이너와 호스트를 마운트하는 개념이다.

root@contem:~# mkdir /shared
root@contem:~# docker run -d --name con -v /shared:/remote nginx:latest

root@contem:~# echo vol-test > /shared/test.txt
# 호스트에 테스트 파일 생성

root@con-tem:~# ls /shared/
test.txt

root@contem:~# docker exec con cat /remote/test.txt
vol-test


이렇게 cat을 통해확인할수있다

컨테이너를 삭제해도 호스트에는 파일이 남는다.

nginx에 웹 루트 디렉토리는 /usr/share/nginx/html 이다.

root@contem:~# docker run -d --name vol -v /shared:/usr/share/nginx/html nginx:latest
# 기존에 파일이 존재하는 디렉토리를 마운트포인트로 하여 -v 구성

Publish(-p)

  • 컨테이너를 외부에 노출, 배포(publish) 시키는 옵션
  • 호스트를 외부, 컨테이너를 내부로 생각했을때 DNAT와 비슷하다고 생각하면 좋다.
root@contem:~# docker run -d --name pub -p 8080:80 httpd:latest

여기서 8080포트는 호스트 포트 80은 컨테이너 포트이다.

-w : 작업 디렉토리

  • 리눅스에서 pwd(present working directory) 목적과 비슷하다.
  • 컨테이너에서는 내가 현재 있는 곳을 고정시키기 위한 용도로 쓰인다.
root@contem:~# docker run -d --name pwd -w /usr nginx:latest

root@contem:~# docker exec -it pwd bash


그림과 같이 작업 디렉토리가 /usr로 정해져있다.


Dockerfile

도커이미지를 만들기 위한 명세표라고 보면 된다.

FROM : 베이스이미지 지정



이미지를 빌드를 해주고

root@contem:/docker# docker run -dp 8181:80 --name myweb mynginx:1

run을통해 컨테이너를 생성하고 curl localhost:8181을 통해 동작을 확인할 수 있다.

WORKDIR : 작업디렉토리 지정

  • 리눅스의 cd 명령처럼 사용하면 된다.
  • 재지정 전까지 영구적으로 유지. cd 대신 사용하면 됨. 되도록이면 cd라는 명령을 아예 안쓰는게 좋다.
  • 컨테이너에 접속(-it)헀을때 내가 존재하는 디렉토리는 마지막으로 지정한 WORKDIR 된다.
FROM nginx:latest
# 베이스 이미지
WORKDIR /usr/share/nginx/html
# 작업 디렉토리 변경.
root@contem:/docker# docker build -t mynginx:2 .
# 이미지 빌드.
# 현재 디렉토리의 Dockerfile을 토대로 mynginx:2 라는 이미지를 만들어라.

root@contem:/docker# docker run -it --name myweb2 mynginx:2 bash
# 컨테이너 생성과 동시에 진입

COPY : 호스트의 파일이나 폴더를 컨테이너 이미지에 삽입

root@contem:/docker# echo copy_test > index.html
# 간단한 파일 생성. 우리는 이걸 앱이라고 간주.

root@contem:/docker# vi Dockerfile

FROM nginx:latest
# 베이스 이미지
WORKDIR /usr/share/nginx/html
# 작업 디렉토리 변경.
COPY index.html index.html
# 파일이나 디렉토리 복사
# 파일이면 파일로, 디렉토리면 디렉토리로 복사하는게 좋다.
# 현재 COPY명령을 수행하는 시점에서
# WORKDIR이 웹루트디렉토리로 잡혀있기때문에
# 파일만 명시해도 웹루트디렉토리로 복사가 된다.
root@contem:/docker# docker build -t mynginx:3 .
# 이미지빌드

root@contem:/docker# docker run -dp 5959:80 --name myweb3 mynginx:3
# 컨테이너 생성

COPY <호스트파일> <컨테이너파일>
COPY <호스트경로> <컨테이너경로>

profile
나를 한줄로

0개의 댓글