이번에 학교에서 Docker에 대한 5시간 특강이 진행 되었다. 기존에 Docker를 사용했던 경험은 있었지만, 개념 공부는 하지 않았었다. 이번 특강을 통해서 그동안 모호하게 알기만 했던 Docker에 대한 개념을 공부했고 이를 정리하는 시간을 갖고자 한다.
시스템 자원과 같은 환경에 영항을 받지 않는다.
docker pull [image name]
docker pull python:latest
latest
생략 가능docker images
docker run [options] [image name] [command]
docker run -it — name python3.8 python /bin/bash
python
이미지를 이용해서 python3.8
이름의 컨테이너를 생성해 /bin/bash
를 실행i
: interactive mode → 사용자가 입출력할 수 있는 상태
t
: tty → 리눅스 터미널
terminal에 attach 되어 터미널 모드를 사용할 수 있음
p
Port mapping
호스트 port : 도커내부 port
를 매핑시키는 옵션이다.v
volume mapping
호스트 디렉터리 경로 : 도커 내부 디렉터리 경로
를 매핑시키는 옵션이다.volume mapping
을 하면 이전 컨테이너의 데이터를 그대로 사용할 수 있다.docker ps
-a
docker ps -a
실행 뿐만 아니라, 중지된 컨테이너까지 모두 표시해준다.
exit
exit
하면 컨테이너가 중지 상태(stopped)가 됨docker start [container name | container ID]
docker exec [container name] [command] [parameter]
docker exec python3.8 ls -al
docker attach [container name]
docker attach python3.8
docker commit [options] [container name] [image name]
docker stop [container name]
docker rm [container name]
컨테이너를 삭제시킴
컨테이너를 중지시킨 다음에 삭제해야 한다.
docker rmi [image name] | [image ID]
image name
으로 삭제하는 것 보다는 image ID
로 삭제하는 것을 권장하는데, 그 이유는 docker rmi python
을 할 경우, python
이라는 이름을 가진 python
, python3.8
등등 전부 삭제된다.docker inspect [container name | container ID]
docker logs [container name | container ID]
FROM ubuntu:14.04
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
COPY . /app
WORKDIR /app
FROM
으로 시작docker build [options] [Dockerfile path]
-t(—tag)
옵션으로 지정한다.FROM
RUN
ENTRYPOINT
컨테이너를 실행하는 명령 설정
run [command]
이 ENTRYPOINT
에 instruction에 append 되어 실행된다.
- CMD
는 override되어 실행
FROM Ubuntu
ENTRYPOINT["sleep"]
docker run ubuntu-sleeper 10
→ 즉 매개변수로 줘야함
CMD
컨테이너가 실행될 때 실행되는 명령 설정
FROM Ubuntu
CMD sleep 5
docker run ubuntu sleep 5
와 같다.
첫 번째 파라미터는 실행 가능한 명령이어야 한다.
CMD ["sleep", "5"]
⭕️CMD ["sleep 5"]
❌COPY
ADD
ENV
EXPOSE
WORKDIR
FROM Ubuntu
ENTRYPOINT["sleep"]
CMD["5"]
docker run ubuntu-sleeper
sleep
의 기본 값으로 5를 실행docker run ubuntu-sleeper 10
CMD
의 5를 10이 override 한다.가장 많이 헷갈렸었던, CMD와 ENTRYPOINT에 대한 차이를 이해할 수 있었다. ENTRYPOINT를 변수처럼 사용하고 CMD를 default parameter롤 사용하는 형식으로 사용할 수 있다는 것을 이번 특강을 통해 배울 수 있어서 좋았다. 또 교수님이 제공해주신, 명령어 이미지는 docker에 명령어에 대해 기억이 안날때 한 번만 봐도 모든 개념이 다 기억날 수 있게 도와주는 트리거 역할을 할 것 같다.
다음번에는 docker-compose에 대해 작성해 보도록 해야겠다.