TIL95. Docker : Docker 명령어 정리

ID짱재·2021년 11월 25일
0

Docker

목록 보기
1/6
post-thumbnail
post-custom-banner

📌 이 포스팅에서는 Docker의 사용방법에 대해 알아보겠습니다.



🌈 Docker 명령어 정리

🔥 About Docker

🔥 Docker CLI 명령어

🔥 Docker 이미지 만드는 방법

🔥 Docker 이미지 공유하기



1. About Docker

🤔 Docker는 왜 쓸까?

✔️ Docker는 Linux 운영체제의 컨테이너 기술입니다.

✔️ 컨테이너 개념은 host 영역과 그 내부에 컨테이너 영역으로 구분하는데, 운영체제가 설치된 영역을 host라하고, host 내에 격리 상태로 설치된 각 각의 애플리케이션이 컨테이너입니다. 컨테이너 내에는 애플리케이션을 실행하는데 필요한 라이브러리와 실행파일만 포함되어 있습니다.

✔️ 이를 사용하면 이미 존재하는 운영체제를 사용하기 때문에 다시 설치할 필요가 없고, 속도에도 차이가 없고 저장공간도 적게 차지합니다.

✔️ 또한 컨테이너를 구축, 배포, 복사하고 한 환경에서 다른 환경으로 이동하는 등 유연하게 사용할 수 있어, 애플리케이션을 클라우드에 최적화하도록 지원합니다.

🤔 Docker 설치 방법

✔️ Docker는 리눅스 운영체제에서 사용하는 컨테이너 기술지만 Window나 Mac OS를 사용해도 Docker만 설치하면, Docker가 알아서 가상환경 내에 리눅스를 설치해주기 때문에 편의성이 높습니다.

✔️ Docker 설치 방법 : https://docs.docker.com/get-docker/
🔎 정상 설치 확인 방법 : 터미널 ⇢ docker images

🤔 pull vs run

✔️ docker에서 App을 다운받을 수 있는 개념을 docker hub라하고, 이 설치된 App을 image라 합니다. 또한 이 이미지가 실행되는 것을 container라고 합니다.

✔️ 여기서 docker hub에서 image을 설치하는 것을 pull이라고 부르며, 이 image를 활성화시키는 것을 container라 합니다.



2. Docker CLI 명령어

🤔 image & container 명령어

✔️ 이미지 설치 ⇢ 🔎 docker pull [image name]

✔️ 설치된 이미지 확인 ⇢ 🔎 docker images

✔️ 실행중인 컨테이너 확인 ⇢ 🔎 docker ps

✔️ 모든 컨테이너 확인 ⇢ 🔎 docker ps -a

✔️ 컨테이너 활성화 ⇢ 🔎 docker run image명

✔️ 컨테이너 이름 지정&활성화 ⇢ 🔎 docker run --name [container명] image명

✔️ 컨테이너 포트포워딩 ⇢ 🔎 docker run --name [container명] -p [local port:image port] image명

✔️ 컨테이너 중지 ⇢ 🔎 docker stop [conatiner명]

✔️ 컨테이너 재시작 ⇢ 🔎 docker start [conatiner명]

✔️ 로그 실시간 추적상태 나타내기 ⇢ 🔎 docker logs -f [conatiner명]

✔️ 컨테이너 강력 삭제 ⇢ 🔎 docker rm [conatiner명] --force

✔️ 이미지 삭제 ⇢ 🔎 docker rmi [image name]

🤔 container 내부에서 CLI 실행

✔️ 콘테이너 내부에서 일회성 명령어 실행 ⇢ 🔎 docker exec [options][conatiner명] command

✔️ shell 연결 유지 ⇢ 🔎 docker exec -it [conatiner명] /bin/sh

✔️ bash 연결 유지 ⇢ 🔎 docker exec -it [conatiner명] /bin/bash

✔️ 콘테이너 내부에 프로그램 설치 ⇢ 🔎 apt update ⇢ 🔎 apt install [프로그램명]

✔️ shell 연결 종료 및 container 외부로 나가기 ⇢ 🔎 exit

✔️ 참고 : https://docs.docker.com/reference/

🤔 host의 결과물을 container 내부와 연동하기

✔️ container 외부인 host 영역에서 이뤄진 파일 작업을 실행 환경을 구축해둔 container에 내부에 적용시키는 방법에 대해 알아보겠습니다.
🔎 docker run -p [host port:container port] -v [host경로:container경로] conatiner명



3. Docker 이미지 만드는 방법

🤔 Docker 이미지를 만드는 이유

✔️ docker hub에서 ubuntu를 pull을 통해 image로 내려받고, run으로 실행했을 때, git이 없기 때문에 git을 설치해야합니다.

✔️ 이러한 container 환경이 여러개 필요할 때, 매번 ubuntu를 내려받고 깃을 설치하는 번거로움을 줄이기 위해서는 git이 설치된 ubuntu를 이미지화 사용할 수 있습니다.

✔️ 실제로는 환경을 구축하기 위해 기본적으로 필요한 앱들이 여럿있기 이를 미리 설치한 뒤 docker로 이미지화시켜두면, 초기세팅을 간편하게 이용할 수 있습니다. 즉, container의 재활용하기 위함입니다.

✔️ docker 이미지를 만드는 방법은 commit을 통한 방법과, dockerfile&build를 통한 방법이 있습니다.

🤔 commit으로 docker 이미지 만들기

✔️ 우선 ubuntu 이미지를 내려받고, 컨테이너를 실행한 뒤 git을 설치하기 위해 이 내부로 들어갑니다. CLI를 bach를 통해 진입하려면 아래와 같습니다.
🔎 docker pull ubuntu ⇢ docker run -it --name [container명] ubuntu bash
🔎 docker pull ubuntu ⇢ docker run -it --name my-ubuntu ubuntu bash

✔️ ubuntu 내부에 프로그램 설치는 apt를 사용하는데, 업데이트 후 피룡한 프로그램을 install합니다.
🔎 apt update ⇢ apt install git ⇢ exit

✔️ 설치에 문제가 없다면 현재 컨테이너 상태를 이미지화 시키는 것을 commit이라합니다.
🔎 docker commit [이미지화시킬 container명] repository위치:[사용할 이미지명]
🔎 docker commit my-ubuntu jaewon:ubuntu-include-git

✔️ commit으로 이미지화시켜두면, 원하는 환경을 독립적으로 생성하기 간편합니다.
🔎 docker run -it --name my_python jaewon:ubuntu-include-git ⇢ apt update && apt install python
🔎 docker run -it --name my_nodejs jaewon:ubuntu-include-git ⇢ apt update && apt install nodejs

🤔 dockerfile&build으로 docker 이미지 만들기

✔️ commit으로 docker 이미지를 생성하면 그 이미지 안에 무엇이 들어가 있는지 체계적으로 이해하기 어렵습니다. 이를 위해 dockerfile과 build를 이용하여 이미지를 만드는 방법이 있습니다.

✔️ dockerfile을 규칙에 맞게 생성하고, build를 통해 명령을 내리면 docker 이미지를 생성할 수 있습니다.

✔️ commit과 dockfile&build는 둘 다 이미지를 만든다는 점에서는 같은 기능이지만, commit은 만든 이미지를 백업하는 용도로 사용하고, dockfile&build를 이미를 절차에 따라 생성하는데 중점을 두고 있습니다.

✔️ web-server란 이름으로 ubuntu(20.04 버전) container 생성 후 shell 진입
🔎 docker-build >> docker run --name web-sever -it ubuntu:20.04

FROM ubuntu:20.04 👈 이미지 설치
RUN apt update && apt install -y python3  👈 설치 후 shell 명령 실행
WORKDIR /var/www/html 👈 경로 생성 및 해당 디렉토리(/var/www/html)로 이동
COPY ["index.html", "."] host의 파일(index.html)을 현재 경로(container 내부에 /var/www/html)로 복사
CMD ["python3", "-u", "-m", "http.sever"] 👈 python 내장 웹서버 실행 명령

✔️ RUN과 CMD의 차이점은 RUN은 build가 되는 시점에 실행되는 명령어이고, CMD는 컨테이너가 실행될 때 실행되는 명령어입니다. 즉, RUN에서 실행되는 결과는 이미지에 반영되고, CMD에서 실행되는 결과는 컨테이너에 반영됩니다.

✔️ dockerfile을 실행하는 build 명령은 아래와 같습니다.
🔎 docker build -t web-sever-build .
🔎 docker run 8888:8000 --name web-server web-server-build



4. Docker 이미지 공유하기

🤔 Docker hub로 이미지 push 방법

✔️ 우선, docker hub에서 repository 생성해줍니다.

✔️ ubuntu 이미지를 설치 및 my-python란 이름으로 컨테이너 생성 후 shell 진입 ⇢ 컨테이너에 python3 설치
🔎 docker run it --name my-python ubuntu ⇢ apt update && apt install -y python3 ⇢ exit

✔️ push할 이미지 생성
🔎 docker commit my-python [repository cmd:Tag]

✔️ docker hub의 repository로 업로드를 하기 위해 docker login을 합니다.
🔎 docker login

✔️ docker hub로 공유
🔎 docker push [repository cmd:Tag]

✔️ 로컬에 docker 이미지 삭제 후 docker hub에서 docker 이미지 다운 받기
🔎 docker rmi --force [repository cmd:Tag] ⇢ docker pull [repository cmd:Tag]

🤔 github로 이미지 공유하기

✔️ Docker hub는 1개의 비공개 repository만 무료로 사용할 수 있기 때문에 git hub로 push하는 방법에 대해 알아보겠습니다.

✔️ 우선 git hub에서 token을 발행받아야합니다. token은 아래 위치에 있습니다. 필요한 것을 체크하고, 발행받으면됩니다. 새로고침하면 없어지니 잠시 다른곳에 복사해둡니다.
🔎 settgins ⇢ Developer settgins ⇢ Personal access tokens

✔️ 터미널에서 아래 명령어로 token값을 환경변수로 저장합니다.
🔎 export CR_PAT = token값

✔️ doker hub를 github로 사용할 수 있도록 변경합니다.
🔎 echo $CR_PAT | docker login ghcr.io -u [github 아이디] --password-stdin

✔️ 매번 새로운 쉘을 시작할 때마다 CR_PAT값을 export하지 않으려면, shell이 실행될 때 마다 자동으로 실행되도록 zsh로 진입해 이를 저장해줍니다.
🔎 vim ~./zsh ⇢ 맨아래로 이동 ⇢ export CR_PAT=token값

✔️ 생성한 container를 이미지화하고 github의 push하는 방법은 아래와 같습니다.
🔎 docker run -it --name my-ubuntu ubuntu
🔎 docker commit my-ubuntu ghcr.io/[github ID]/[패키지 경로:Tag]
🔎 docker push ghcr.io/[github ID]/[패키지 경로:Tag]

profile
Keep Going, Keep Coding!
post-custom-banner

0개의 댓글