Docker
실습 전 우분투 도커 설치
- 컨테이너 방식의 장점
- 개발과 배포 환경을 일치시킨다.
- 수평 확장을 쉽게 해준다.
- 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다.
- 컨테이너
애플리케이션이 의존성, 네트워크 환경, 파일 시스템에 구애받지 않고, 도커라는 기술 위에 실행될 수 있도록 만든 애플리케이션 상자- 이미지
실행되는 모든 컨테이너는 이미지로부터 생성, 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿 이를 이용하여 즉시 컨테이너를 만들 수 있다.- 레지스트리
이미지는 레지스트리에 저장, 대표적으로 Docker Hub, Amazon ECR 이 있다. 도커 CLI에서 이미지를 이용해 컨테이너 생성 시, 호스트 컴퓨터에 이미지가 존재하지 않는다면 기본 레지스트리로부터 다운로드 받는다.
docker/whalesay
이미지로 예제 실습latest
태그를 붙인 이미지를 가져온다.
- docker/whalesay의 최신 이미지 받아오기
sudo docker image pull docker/whalesay:latest
- 받아온 이미지 실행 (이미지 -> 컨테이너)
docker container run {OPTIONS} IMAGE {COMMAND} {ARG...}
docker container run --name 컨테이너_이름 docker/whalesay:latest cowsay boo
- {container} run
- 컨테이너를 실행
- [OPTIONS]
- -name : 컨테이너의 이름을 할당
- [COMMAND]
- 초기 컨테이너 실행 시 수행되는 명령어
- cowsay : 컨테이너 실행 시 cowsay 명령어를 호출, node를 호출하듯 이용
- [ARG]
* boo: COMMAND인 cowasy에 넘겨질 파라미터
docker container ps -a
: 모든 컨테이너의 리스트 출력
- {container} ps : 컨테이너의 리스트 출력
- a : 디폴트로는 실행되는 컨테이너이나 종료된 컨테이너를 포함하여 모든 컨테이너 출력
docker container rm 컨테이너_이름
- {container} rm : 컨테이너를 지칭해서 삭제 (ps 명령을 통해 확인할수 있는 NAMES 혹은 CONTAINERID 사용)
docker image ls
: 도커 이미지 용량 확인docker image rm docker/whalesay
: docker/whalesay 이미지 지우기
docker container run --name 컨테이너_이름 --rm docker/whalesay cowsay boo
- {container} run : 컨테이너 실행, 이미지가 없다면 이미지를 받아온 뒤 실행
- -rm : 컨테이너를 일회성으로 실행, 중지되거나 종료되면 관련 리소스 모두 제거
- 로컬에 있는 파일과 도커 이미지를 연결하는 방법
- CP(Copy) : 호스트와 컨테이너 사이에 파일을 복사
- Volumn: 호스트와 컨테이너 사이에 공간을 마운트
- 저장 공간을 다른 장치에서 접근할 수 있도록 경로를 허용
- 팩맨 게임 구동 실습
- httpd 웹 서버
- 사용할 도커 이미지는 httpd(http daemon) : Apache HTTP Server를 실행할 수 있는 오픈소스 웹 서버 소프트웨어
- httpd는
/usr/local/apache2/htdocs/
경로에 웹 서버와 관련된 파일들이 저장되어 있다면 해당 파일을 기반으로 웹 서버가 실행되도록 한다.1. 레포지토리 클론
git clone git@github.com:subimm/be-pacman-canvas.git
2. httpd 실행
-p
로컬호스트의 포트와 컨테이너의 포트를 연결 818포트가 로컬호스트의 포트, 80은 컨테이너의 포트- httpd는 일정 시간 연결 기록이 없으면, 서버 가동이 중지됨.
- 터미널 종료말고, 다른 터미널 창을 열어 진행
-d
컨테이너를 백그라운드에서 실행하게 해줌3.
localhost:818
을 통해 웹 서버가 작동하고 있는지 확인4. 새 터미널 열어서
docker container cp
명령어로 로컬호스트에 있는 파일을 컨테이너에 전달
앞 경로의 파일을 뒤 경로에 복사한다.
5. 게임 서버 구동 확인
docker exec -it 컨테이너_이름 bash
명령어로 컨테이너 내부 터미널 접속 가능. 오류 원인 찾기
- Docker 이미지 만들기
- 앞에서 만든 Docker Container를 이미지 파일로 변환
장점 : 작업 내용 저장과 배포 및 관리가 유용1. 구동한 Docker Container를 이미지로 만드는 방법
- docker container commit 명령을 이용
docker container commit 컨테이너_이름 my_pacman:1.0
- 생성된 이미지를 900포트에서 웹 서버로 구동
2. Docker Image 빌드를 위한 파일인 DockerFile로 만드는 방법- Dockerfile (이미지파일의 설명서) 를 만들고 그대로 이미지를 build 하는 방법
1 FROM httpd:2.4 # 베이스 이미지를 httpd:2.4 로 사용 2 COPY ./ /usr/local/apache2/htdocs/ # 호스트의 현재 경로에 있는 파일을 생성할 이미지 /usr/local/apache2/htdocs/ 에 복사
- docker build 명령은 도커파일로 도커 이미지 파일을 생성
# --tag 는 name:tag 형식으로 이미지를 생성 # 지정한 경로에 있는 Dockerfile을 찾아서 빌드 docker build --tag my_pacman:2.0 . # "."을 명령어에 꼭 포함
- 생성된 이미지를 이용해 901포트에 웹 서버 구동
docker run --name my_web3 -p 901:80 mypacman:2.0
- 전에 실행했던 컨테이너 중지 후 삭제한 뒤 실행하기
- 컨테이너 안에서 bash shell 실행