일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- cloud
- 챗봇
- jinja2
- 도커
- nohub
- 노션
- 시작
- flask
- 클라우드
- 카카오 오픈빌더
- 플라스크
- Mac
- venv
- docker
- OS
- 운영체제
- GQL
- vscode
- AWS
- 파일권한
- graphQL
- ssh
- 구글클라우드
- 카카오톡 챗봇
- gcp
- Lambda
- Windows
- chatbot
- braces
- Python
- Today
- Total
ForFour
Docker Basic 본문
도커(Docker)??
도커(Docker)는 2013년에 나온 컨테이너 기반 가상화 도구입니다. 리눅스 상에서 컨테이너 방식으로 프로세스를 격리해서 실행하고 관리할 수 있도록 도와줍니다.
도커를 사용하면 이미지(실행 환경)를 기반으로 컨테이너를 실행할 수 있고 특정 상태를 이미지로 변환 가능합니다.
따라서 같은 실행환경을 가진 여러 서버를 구축할 때나 동시에 같은 실행환경이 필요한 곳 도커를 쓰게 되면 실행환경을 일일이 세팅해야 하는 번거로움을 덜 수 있습니다.
Docker vs VM
VM 또한 호스트 자원의 환경과는 다른 실행환경을 세팅할 때 쓰이는 가상화 도구입니다. 하이퍼바이저를 통해 리소스를 물리적으로 분리합니다. 간단하게 실행 OS위에 새로운 OS를 자원을 분리하여 그대로 Hypervisor를 통해 올립니다.
Docker는 컨테이너의 개념을 사용합니다. OS 부분을 가상화하고 커널단은 host OS와 공유합니다.
장점
그림으로만 봐도 도커가 가볍습니다.
단적인 예로 16.04 LTS 우분투 버전위에 18.04 LTS를 올린다고 가정해봅시다. 그러면 VM은 그대로 18.04의 이미지가 그대로 올라갑니다. 하지만 도커는 두 os의 다른 부분만 패키징 되기 때문에 훨씬 가볍습니다.
이제 한번 간단하게 사용하면서 천천히 도커를 다운받고 컨테이너를 올려보겠습니다.
우선, 도커를 사용하려면 도커를 다운받아야합니다.. ( 너무 당연한 얘긴가..? )
기본 튜토리얼을 aws 인스턴스 위에서 진행해보겠습니다.
Docker on Linux
Linux 환경에서 도커를 설치하는 건 자동 설치 스크립트를 이용하면 됩니다.
curl -fsSL https://get.docker.com/ | sudo sh
여기서 curl은 command line 용 data transfer tool이다. download/upload 모두 가능하며HTTP/HTTPS/FTP/LDAP/SCP/TELNET/SMTP/POP3 등 주요한 프로토콜을 지원하며 Linux/Unix 계열 및 Windows 등 주요한 OS에서 구동된다.
sudo 없이 사용하기
docker는 기본적으로 root권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker
그룹에 추가해야합니다. 아래의 명령어 실행 후 로그아웃한 뒤 다시 로그인하면 sudo 없이도 docker 명령을 실행할 수 있습니다.
sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
sudo usermod -aG docker your-user # your-user 사용자에게 권한주기
Mac이나 Window는 다르므로 Docker for Mac 또는 Docker for windows 문서를 참고하면 됩니다.
Mac m1 환경에서는 현재 완성형은 아니고 프리뷰 버전으로 지원중인 것 같습니다. 가급적으로 메인 환경에서는 사용하지 않는 것을 추천한다고 하나 꼭 사용해야 한다면 Apple M1 Tech Preview | Docker Documentation 다음 가이드를 참고하세요.
설치확인
docker version
을 입력하니까
Got permission denied while trying to connect to the Docker daemon socket
at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version:dial
unix /var/run/docker.sock: connect: permission denied
이런 메세지를 뿜뿜합니다. 보니까
Server 정보가 안나오고 Error response from daemon: Bad response from Docker engine이라는 메시지가 출력되는 경우는 보통 docker daemon이 정상적으로 실행되지 않았거나 sudo를 입력하지 않은 경우입니다.
—라고 하여 루트권한을 받고 다시 해보니 서버 클라이언트가 잘 출력되더라 하는 이야기. ㅎ (앞서 말했듯, 도커는 루트 권한을 필요로 합니다. )
도커 이미지
도커가 정상적으로 설치되었다면 필요한 이미지를 받아 설치해야 합니다.
1. 이미지 검색(search)
이미지는 search 명령어로 검색하거나 도커 이미지 공식 Repository인 Docker Hub에서 각종 공식 이미지를 제공하여 검색할 수 있습니다.
2. 이미지 다운로드(pull)
이미지는 pull 명령어로 내려받을 수 있습니다.
docker pull [OPTIONS] IMAGE[:TAG]
3. 이미지 목록(images)
4. 이미지 삭제
docker rmi [OPTION] [IMAGE_ID]
OPTION | DESCRIPTION |
-f | 컨테이너 실행줄 컨테이너 포함 이미지 삭제 |
컨테이너
1. 컨테이너 조회(ps)
docker ps [OPTION] 컨테이너 목록을 조회합니다.
-a 옵션은 중단된 컨테이너 목록도 함께 보여줍니다.
2. 컨테이너 실행하기(run)
ubuntu18.04 이미지를 실행시켜 보겠습니다.
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG…]
docker run ubuntu:18.04
위의 명령어를 입력하면 사용할 이미지가 없다면 pull 하여 이미지를 다운로드하고 컨테이너를 생성하고 시작합니다.
하지만 아무 일도 일어나지 않습니다.
왜냐하면 컨테이너는 실행이 됐지만 명령어가 없기 때문에 정상 실행됐다 바로 종료됩니다.
옵션 | 설명 |
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결(포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
-name | 컨테이너 이름 설정 |
-rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
-link | 컨테이너 연결 [컨테이너명:별칭] |
다음의 옵션을 사용하여 /bin/bash
명령어로 ubuntu:18.04를 실행해 보겠습니다.docker run —rm -it ubuntu:18.04 /bin/bash
Bash 쉘을 실행하고 키보드 입력을 위해 -It, 프로세스가 종료되면 컨테이너가 삭제되도록 -rm 옵션을 추가했습니다.
exit을 하여 bash 쉘을 종료하면 컨테이너도 함께 종료됩니다.
3. 컨테이너 삭제하기(rm)
docker rm [OPTIONS] CONTAINER [CONTAINER…]
docker rm [OPTIONS] CONTAINER [CONTAINER…]
docker ps -a # get container ID
docker rm ${UBUNTU_CONTAINER_ID}
docker ps -a # check exist
종료된 ubuntu 컨테이너를 삭제하겠습니다. (당연히 id를 공백 구분하여 나열할 수 있습니다.)
도커 ID의 전체 길이는 64자리입니다. 하지만 겹치지 않는다면 앞의 2-4자리만 입력해도 구분을 할 수 있습니다.
중지된 컨테이너를 전부 삭제하고 싶다면
docker rm -v $(docker ps -a -q -f status=exited)로 중지된 컨테이너 ID를 전부 가져와 한번에 삭제할 수 있습니다.
또한 docker ps -a -p 를 사용하면 모든 컨테이너를 삭제할 수 있다.
이후 카카오 챗봇의 api 서버를 docker위로 올리는 작업을 해보겠습니다.
프로젝트의 requirement를 작성하여 , 컨테이너 포트와 aws 호스트 포트 포워딩 옵션 설정 등을 하여 컨테이너를 올린다면 문제없이 잘 될 것 같습니다.
*함께 알아보면 좋을 것
쿠버네티스 : 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다. 간단하게 컨테이너를 쉽게 관리할 수 있습니다. 모니터링을 한다거나 단적인 예로 트래픽이 몰린다면 컨테이너를 생성하여 트래픽을 분배해주는 역할도 할 수 있습니다.
참고
초보를 위한 도커 안내서 - 설치하고 컨테이너 실행하기
Docker와 VM. Docker를 공부하면 가장 처음 등장하는 내용이 바로 docker…
컨테이너와 VM 비교
docker image 검색과 다운로드 (docker pull, search, images)
Docker 도커 이미지와 컨테이너 삭제 방법
docker image 검색과 다운로드 (docker pull, search, images)
도커의 외부 접속을 위한 ssh, sftp 설정
velog.io/@wlsdud2194/-Docker-도커-기본-명령어-모음
spin.atomicobject.com/2018/10/04/docker-command-line/
www.44bits.io/ko/post/news--docker-0-8-supprot-macos
subicura.com/2019/05/19/kubernetes-basic-1.html
'개념 챙기기' 카테고리의 다른 글
AWS 서비스 종류 (0) | 2021.01.08 |
---|---|
GraphQL (0) | 2021.01.04 |
[웹] HTTP (0) | 2020.12.29 |
[운영체제] 파일 권한(chmod) (0) | 2020.12.27 |
DNS (0) | 2020.12.22 |