Docker에 대해 알아보기
도커
어플리케이션을 개발하고, 이동하고, 실행하는 것을 돕는 오픈 플랫폼
특징
- 어플리케이션을 infrastucture와 나누어서 소프트웨어 전송을 빠르게 할 수 있다.
- 어플리케이션을 관리하는 것과 같은 방식으로 infrastructure를 관리할 수 있다.
- 개발단계에서의 코드 작성과 실행 시간을 줄일 수 있다.
용어
- host : docker 이용자의 메인 OS/컴퓨터
- docker hub : app store와 같은 역할을 한다. 사용하고자 하는 image(program)을 내려받을 수 있음
- image : 프로그램의 역할. 특정 과제를 수행하는 코드와 그 요구사항을 담고 있다. 명령어
run
을 통해 container를 생성가능 - container : image를 실행하는 역할. 실행하는데에 필요한 코드, 요구사항들을 얻으며, 동시에 작업을 실행하고 끌 수 있다.
하나의 image에서 여러개의 container를 생성할 수 있다.
명령어
docker pull [OPTIONS] NAME[:TAG|@IGEST]
docker hub의 resgistry에서 image를 내려받는 명령어
docker images [OPTIONS] [REPOSITORY[:TAG]]
docker에 다운로드 된 image들의 목록을 볼 수 있음. image가 잘 설치되었는지 확인해볼 수 있다.
docker run [OPTIONS] IMAGE
image를 실행 (Container 생성) 명령어, --name [이름]
옵션을 많이 사용한다.
-p HOST_PORT:CONTAINER_PORT
옵션을 통해 host와 container의 네트워크 포트를 연결할 수 있다.
docker stop [OPTIONS] CONTAINER
실행 중인 container를 중지하는 명령어
docker ps [OPTIONS]
현재 실행중인 container의 상태를 확인하는 명령어
container의 실행 및 중지 여부를 확인할 때 사용한다.-a
를 옵션으로 넣게 되면, 모든 container의 상태를 확인할 수 있다.
docker logs [OPTIONS] CONTAINER
container에 대한 log를 확인하는 명령어
-f
를 옵션으로 주게 되면, 실시간으로 container의 로그를 확인할 수 있다.
docker rm [OPTIONS] CONTAINER
container를 삭제하는 명령어
실행중인 container를 삭제하면 에러가 발생하지만, --force
옵션을 통해 강제 삭제가 가능하다.
docker exec [OPTIONS] CONTAINER COMMAND [ARGS]
container 내의 코드를 실행하는 명령어
-it
옵션을 통해 항상 연결을 유지할 수 있다. 연결 해제는 exit
명령어를 사용한다.
이후 명령어에는 /bin/bash
혹은 /bin/sh
을 실행하면 bash shell이나 shell이 실행되어 container 내의 파일 작업을 가능하게 한다.
파일 수정은 host에서, 파일 배포는 container에서 하는 방법
docker run
명령어를 실행할 때에 OPTION에 -v
옵션을 넣어야한다.
ex.
`docker run -p [호스트포트번호:컨테이너포트번호] -v [container에 연결하고자하는 host의 폴더:host에 연결하고자하는 container의 폴더] [container 이름]
docker image 만드는 방법
- container를 commit하면 image가 된다. (backup의 느낌)
- Docker file을 작성 (build)
commit은 단순히 명령어를 사용하면 됨
docker commit [OPTIONS] CONTAINER [REPOSITORY:TAG]
docker commit [컨테이너 이름] [image 이름]
dockerfile을 작성하는 것은 일련의 규칙이 필요함
FROM ubuntu:20.04 #우분투 20.04 버젼의 이미지를 base로
RUN apt update && apt install -y python3
# dockerfile 안에서 운영체제 명령어를 사용할 수 있음
# 단 RUN 지시어 한 번마다 layer를 만드므로 되도록 한번에 작성
WORKDIR /var/www/html
# dockerfile 내에서 dir 작업을 할 경우 사용, dir이 없다면 생성함
COPY ["index.html","."]
# host에 있는 index.html을 dockerfile에 복사함
CMD ["python","-u","-m","http.server"]
# RUN : build할때 실행하는 지시어, CMD : container가 실행될 때 실행
# RUN에 적힌 명령어는 image에 적용, CMD에 적힌 명령어는 container에 적용
다 만들었다면, 명령어 입력
docker build -t [만들어질 image 이름]