Docker
Docker
도커는 리눅스 컨테이너 기술을 기반으로하는 오픈 소스서비스 입니다
도커를 통해 애플리케이션 실행 환경을 코드로 작성할 수 있으며 OS를 격리화하여 관리합니다
리눅스 컨테이너란?
Linux 기반의 기술중 하나로 필요한 라이브러리와 애플리케이션을 모아서 마치 별도의 서버처럼 구성한 것을 말합니다
컨테이너를 이루는 네트워크 설정과 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유합니다
- 프로세스의 구획화
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 할 수 있습니다.
- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없습니다.
- 네트워크의 구획화
- 기본으로 컨테이너 하나에 IP 주소가 할당되어 있습니다.
- 파일 시스템의 구획화
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그래서 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.
도커 이용하기
도커 이미지는 다음과같이 이루어져있습니다
Registry_Account/Repository_Name:Tag
- 레지스트리(Registry)
- Docker Hub : https://hub.docker.com/
- 도커 이미지를 관리하는 공간입니다.
- 특별히 다른 것을 지정하지 않는다면, 도커 허브(Docker Hub)를 기본 레지스트리로 설정합니다.
- 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있습니다.
- 레포지토리(Repository)
- 레지스트리 내에 도커 이미지가 저장되는 공간입니다.
- 이미지 이름이 사용되기도 합니다.
- GitHub의 레포지토리와 유사하게 생각하시면 됩니다.
- 태그(Tag)
- 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있습니다.
- 해당 이미지를 설명하는 버전 정보를 주로 입력합니다.
- 특별히 다른 것을 지정하지 않는다면
latest
태그를 붙인 이미지를 가져옵니다.
예제로 보는 도커이미지
docker/whalesay의 이미지 불러오기
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
// 예제
docker image pull docker/whalesay:latest
이미지 리스트 출력
docker image ls
컨테이너_이름 을 가진 컨테이너를 실행
docker container run --name 컨테이너_이름 docker/whalesay:latest cowsay boo
- {container} run
- 컨테이너를 실행합니다.
- [OPTIONS]
- -name : 컨테이너의 이름을 할당합니다.
- [COMMAND]
- command는 초기 컨테이너 실행 시 수행되는 명령어입니다.
- cowsay : 컨테이너 실행 시 cowsay 명령어를 호출합니다. node를 호출하듯 이용합니다.
- [ARG..]
- boo : COMMAND인 cowsay에 넘겨질 파라미터입니다.
모든 컨테이너의 리스트를 출력
docker container ps -a
- {container} ps : 컨테이너의 리스트를 출력합니다.
- a : Default 로는 실행되는 컨테이너지만 종료된 컨테이너를 포함하여 모든 컨테이너를 출력합니다.
컨테이너_이름이라는 이름을 가진 컨테이너를 삭제
docker container rm 컨테이너_이름
- {container} rm : 컨테이너를 지칭해서 삭제합니다. 컨테이너를 명시할 때는 ps 명령을 통해 확인할 수 있는 NAMES 혹은 CONTAINER ID 를 사용합니다.
- 컨테이너 리소스를 지워보고 다시 실행하면서 cowsay 명령어에 매개변수를 변경해보세요.
- ex) codestates
- ex) 자신의 이름
images의 용량 확인 후 도커 이미지 삭제
# docker image 의 용량 확인
docker image ls
# docker/whalesay 이미지 지우기
docker image rm docker/whalesay
세가지 방법을 한번에 하기
docker container run --name 컨테이너_이름 --rm docker/whalesay cowsay boo
- {container} run : 컨테이너를 실행합니다. 이미지가 없다면 이미지를 받아온 뒤(pull) 실행합니다.
- -rm : 컨테이너를 일회성으로 실행합니다. 컨테이너가 중지되거나 종료될 때, 컨테이너와 관련된 리소스를 모두 제거합니다.
컨테이너에 파일 복사
CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사(Copy)
- 깃헙 레포지토리 복사
-
docker container run으로 실행
docker container run --name 컨테이너_이름 -p 818:80 httpd
Docker 이미지 만들기
Volume : 호스트와 컨테이너 사이에 공간을 마운트(Mount)
배포 및 관리가 유용하며 이전에 작업했떤 내용을 다시 수행하지 않아도 됩니다
-
docker container commit 명령을 이용
// 구동한 Docker Container를 커밋 docker container commit 컨테이너_이름 my_pacman:1.0 // docker images로 확인할 수 있습니다 // 생성된 이미지를 웹서버로 구동 docker run --name my_web2 -p 900:80 my_pacman:1.0 // localhost:900으로 웹서버 동작하는지 확인합니다
-
Docker Image 빌드를 위한 파일인 Dockerfile로 만드는 방법
- Dockerfile 공식 문서
- Dockerfile 을 만들고, Dockerfile 대로 이미지를
build
하는 방법입니다.
- Dockerfile 을 만들고, Dockerfile 대로 이미지를
- Dockerfile 은 이미지 파일의 설명서라고 생각하면 좋습니다.
-
Dockerfile로 pacman 이미지를 생성해 보세요.
- COPY 구문을 잘 살펴보세요. Dockerfile은 어디에 생성되어야 할까요?
FROM httpd:2.4 # 베이스 이미지를 httpd:2.4 로 사용합니다. COPY ./ /usr/local/apache2/htdocs/ # 호스트의 현재 경로에 있는 파일을 생성할 이미지 /usr/local/apache2/htdocs/ 에 복사합니다.
[코드] 현재 경로에 있는 파일을 생성할 이미지 경로에 복사하는 명령의 Dockerfile 소스 코드입니다.
-
docker build
명령은, Dockerfile로 도커 이미지 파일을 생성합니다.# --tag 는 name:tag 형식으로 이미지를 생성할 수 있습니다. # 지정한 경로에 있는 Dockerfile을 찾아서 빌드합니다. docker build --tag my_pacman:2.0 . # "."을 명령어에 꼭 포함해야 합니다!
[커맨드] docker build는 Dockerfile로 도커 이미지 파일을 생성합니다.
-
생성된 이미지를 이용해 901 포트에 웹 서버 구동
docker run --name my_web3 -p 901:80 my_pacman:2.0
[커맨드] 901 포트에서 웹 서버로 이미지를 구동합니다.
127.0.0.1:901
혹은localhost:901
을 통해 웹 서버가 작동하고 있는지 확인합니다.
참조
볼륨 관련 글
도커 개념 및 명령어
도커 컨테이너 생성
- Dockerfile 공식 문서