1. 도커 설치하기
도커 설치하고 실행 환경 만들기까지는 공식 독스를 보고 혼자 해보자
2. Docker 관련 명령어 실행해보기
docker run
<인자> (필수 아님)
docker run (<옵션>) <이미지 식별자> (<명령어>) (<인자>)
- -d 옵션
- mac에서 background에서 실행하기 위해 command에 &를 붙이는 것과 같이, detached 모드에서 실행하기 위한 옵션이라고 생각하면 된다.
- -it 옵션
- -i, -t 옵션을 두개 사용한 것이다.
- 이 두 옵션은 컨테이너를 종료하지 않은 채, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다. 따라서,
-it
옵션은 특히 컨테이너의 쉘(shell)이나 CLI 도구를 사용할 때 매우 유용하게 사용된다.
- —name 옵션
- 도커 컨테이너는 각자 컨테이너 ID가 존재한다. 하지만 이로 식별하기에는 불편하기에
--name
옵션을 사용해서 컨테이너에 이름을 부여해주면 해당 이름으로 컨테이너를 식별할 수 있다.
- -e 옵션
- Docker 컨테이너의 환경변수를 설정하기 위함
- Dockerfile의
ENV
설정도 덮어써지게 됩니다.
- -p 옵션
- 호스트와 컨테이너 간의 포트(port) 배포(publish)/바인드(bind)를 위해서 사용
- 호스트(host) 컴퓨터에서 컨테이너에서 리스닝하고 있는 포트로 접속할 수 있도록 설정해줍니다.
- -v 옵션
- 호스트와 컨테이너 간의 볼륨(volumn) 설정을 위해서 사용
- 호스트(host) 컴퓨터의 파일 시스템의 특정 경로를 컨테이너의 파일 시스템의 특정 경로로 마운트(mount)
볼륨이란?
- 원래는 컨테이너를 삭제하게 되면, 작업했던 데이터가 모두 삭제된다.
- 하지만 컨테이너는 삭제되어도 데이터를 유지하기 위해서 사용하는 것.
- 컨테이너 내부의 데이터를 외부로 링크를 걸어주는 기능
- -w 옵션
- Dockerfile의
WORKDIR
설정을 덮어쓰기 위해서 사용
- —entrypoint 옵션
- Dockerfile의
ENTRYPOINT
설정을 덮어쓰기 위해서 사용
- —rm 옵션
- 컨테이너를 일회성으로 실행할 때 주로 쓰임
실행해보자!
nginx를 로컬 3000 포트에서 실행하기
1.docker pull nginx
- nginx 이미지를 가져오자!
2.docker run -d -p 3000:80 --name my-nginx nginx
- -d: 백그라운드에서 실행하자
- -p 3000:80: 나의 컴퓨터 3000포트를 컨테이너의 80포트에 매핑하자
- —name my-nginx: 컨테이너 이름은 my-nginx
- nginx: 이미지 nginx
3.docker exec -it my-nginx
- exec 옵션을 통해서 실행중인 상태의 컨테이너에 접속할 수 있다.
4.docker ps -a
- 기본 ps command와 같이 가동 중인 도커 컨테이너 리스트를 반환해준다.
3. Dockerfile로 이미지 빌드해보기
Docker의 이미지를 생성하는 명령어는 무엇이 있을까?
- docker commit
- docker container를 image로 생성한다.
- commit 명령어를 실행하는 시점의 docker container 상태가 보존된다.
- 현재 docker container의 상태를 백업하는 경우에 자주 사용된다.
- docker build
- Dockerfile 이라는 단순 텍스트 파일을 사용하여 image를 생성한다.
- Dockerfile은 지정된 문법을 지켜야한다.
- Dockerfile을 작성하고 공유하면 image의 구성을 쉽게 알 수 있다.
docker build
docker build 명령어는 docker image를 빌드할 때 아래의 두 가지를 사용한다.
- Dockerfile
- 텍스트 파일이고, build시 사용될 명령어들을 모아놓은 것이다.
- build context
- PATH(현재 로컬의 파일 시스템의 디렉토리), URL(Git repository)을 통해 지정된 다수의 파일을 갖는 경로(위치) 이다.
- 아래의 예시에선 현재 디렉토리가 build context
docker build .
docker build의 실제 처리는 Docker daemon이 하게 되고, docker build 요청이 시작되면 제일 먼저 Docker daemon에게 build context의 하위 모든 파일에 대한 정보를 전송한다.
뭐 내용이 많지만 일단 찍먹해보는 단계에서는 아래의 두 가지 내용만 기억하자.
Dockerfile
는 docker build
시 사용될 명령어들이 기재된 텍스트 파일이다.docker build
명령어는 build context
경로를 사용하고, 재귀적으로 하위 모든 파일 콘텐츠를 사용한다.Dockerfile 작성 방법
# 주석 INSTRUCTION arguments
INSTRUCTION
(명령어)는 대문자, 소문자 상관없이 사용이 가능하나, 대문자로 쓰는 것이 관례이다.Dockerfile 명령어
INSTRUCTION | 기능 |
FROM | Base image 지정 |
RUN | - image 생성 지점에 사용할 명령어 지정
- docker run 명령어 사용 시 —entrypoint 옵션으로 덮어쓰기 가능 |
CMD | - container 실행 시 실행되는 명령어를 지정
- docker run 명령어 마지막에 명령어를 작성하면 덮어쓸 수 있음 |
LABEL | 생성할 image의 메타정보를 등록한다 |
EXPOSE | - 컨테이너 실행 시 열어둘 포트와 통신 네트워크 프로토콜을 지정한다 기본은 TCP.
- 필수로 할 필요는 없지만 다른 사람에게 port에 대한 힌트를 줄 수 있다. |
ENV | - 컨테이너 실행 시 사용할 환경변수를 지정
- 이미지 생성되면 내부에 설정한 환경변수는 저장됨 |
ARG | - 이미지 생성 시에만 사용하는 변수
- 컨테이너 실행 후에는 사용 불가 |
ENTRYPOINT | - CMD와 비슷하지만 docker run을 통해 덮어쓸 수 없다.
- 즉 무조건 실행한다. |
WORKDIR | 컨테이너 시작 시 사용될 working directory 경로 |