[Docker] Docker 기본 명령어

SlothisSlow·2022년 2월 1일
2

Docker

목록 보기
1/3
post-thumbnail

Docker Network를 구성해보기 전에 Docker 개요와 기본 명령어에 대해서 간단히 알아보자.


Docker 개요

(1) Docker Image

도커 컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로, 컨테이너를 생성하는 템플릿 역할을 한다.

(2) Docker Container

도커 이미지를 기반으로 생성되며, 파일 시스템과 애플리케이션이 구체화돼 실행되는 상태를 말한다.

(3) Docker File

도커 이미지를 만드는 스크립트. docker (image) build 명령어로 dockerfile을 빌드하면 그에 맞는 이미지가 생성된다.

Instruction

  • FROM
    도커 이미지의 바탕이 될 베이스 이미지를 지정한다. 현재 호스트에 베이스 이미지가 없을 시 도커 허브에서 풀 받아온다.
  • RUN
    도커 이미지를 실행할 때 컨테이너 안에서 실행할 명령을 정의하는 인스트럭션이다.. 인자로 도커 컨테이너 안에서 실행할 명령을 그대로 기술하면 된다.
  • COPY
    호스트에 있는 파일을 도커 컨테이너 안으로 복사한다.
  • CMD
    컨테이너 안에서 실행할 프로세스를 지정한다. 어플리케이션을 실행할 명령어를 적어주면 된다.

(4) Docker Image 빌드/실행하기

빌드하기

docker image build -t 이미지명[:태그명]

실행하기

docker container run 이미지명[:태그명]

컨테이너 실행 시 -d 옵션으로 백그라운드 모드로 실행할 수 있고, -p 옵션으로 포트 포워딩을 할 수 있다.


Docker Image 명령어

docker image build

dockerfile에 기술된 구성에 따라 이미지를 빌드하는 명령어이다. docker image build는 docker build로 축약해서 작성할 수도 있지만, 최근에는 이미지에 관한 명령어와
컨테이너에 관한 명령어를 확실히 구분하기 위해 축약하지 않은 명령어 사용을 권장한다.

(1) -t flag

이미지명과 태그명을 붙이는 옵션. 실제 빌드 명령을 사용할 때 필수적으로 쓰인다.

(2) -f flag

docker build 명령은 기본적으로 파일이름이 Dockerfile인 파일을 기준으로 빌드한다. -f 플래그를 주면 빌드할 도커파일의 이름을 직접 설정할 수 있다.

(3) --pull flag

도커 이미지를 빌드할 때는 FROM 인스트럭션에 지정되어 있는 베이스 이미지를 내려받은 후 이를 기반으로 새로운 이미지를 만든다.
기본적으로 이 베이스 이미지가 호스트 운영 체제에 이미 저장되어 있으면 풀을 받아오지 않지만, --pull 옵션을 주면 이미지를 빌드할 때마다 베이스 이미지를 새로 받아온다.

도커 허브에 등록된 레포지토리를 검색할 수 있는 기능.

docker image pull

도커 허브에서 도커 이미지 내려받기

docker image ls

보유한 도커 이미지 목록 보기

docker image tag [기반이미지명:태그][새이미지명:태그]

기본적으로 태그를 따로 붙이지 않으면 latest 태그가 붙는데, 애플리케이션이 수정되어 한 이미지에 여러 버전 관리가 필요해지면 tag 기능을 이용해 버전 관리를 할 수 있다.

docker image push

호스트 운영 체제에 저장되어 있는 이미지를 도커 레지스트리에 푸쉬한다. 이때 도커 허브의 경우 자신 혹은 소속 시관이 소유한 레포지토리에만 이미지를 푸시할 수 있다.


Docker Container 명령어

docker container run

도커 컨테이너 실행하기

(1) --name 옵션

컨테이너에 원하는 이름 붙이기

docker container ls

실행 중인 컨테이너 목록 보기

(1) -a 옵션

정지되어 있는 컨테이너를 포함한 목록 보기

(2) -q 옵션

컨테이너 ID만 목록 보기

docker container stop

실행 중인 컨테이너 중지시키기

docker container rm

컨테이너 파기하기. 중지되어 있는 컨테이너만 파기할 수 있음.
run 명령으로 컨테이너를 실행할 때 --rm 옵션을 주면 컨테이너를 정지함과 동시에 파기할 수 있음.

docker container logs

해당 컨테이너의 stdout을 볼 수 있음. -f 옵션으로 실시간으로 출력 확인 가능.

docker container exec

실행 중인 컨테이너에서 명령 실행하기. 컨테이너 내부의 상태를 확인하거나 디버깅할 때 많이 활용함.
컨테이너 안에 든 파일을 수정하는 등의 명령은 절대 금지!!

(1) -it 옵션

표준 입력 연결을 유지하는 -i 옵션과 유사 터미널을 할당하는 -t 옵션을 함께 줘서 컨테이너를 셸을 통해 다루는 것처럼 할 수 있음.

$ docker container exec -it echo sh
pwd
/go

Docker Compose로 여러 Container 열기

docker compose

하나의 시스템은 여러 애플리케이션의 유기적인 연동 및 통신으로 이루어진다.
여러 개의 컨테이너를 쉽게 실행시키고, 컨테이너 간 의존 관계를 적절히 설정할 수 있는 방법으로 docker compose가 있다.

docker container run -d -p 9000:8000 example/echo:latest

위 명령을 docker-compose로 실행하려면 다음과 같은 yml 파일을 만들어 실행시키면 된다.

docker-compose.yml

version: "3"
services:
  echo:
    image: example/echo:latest
    ports:
      - 9000:8000

docker compose up 명령으로 컨테이너를 실행할 수 있고, down 명령으로 정지시킬 수 있다.
image를 지정해주는 대신 로컬에 있는 dockerfile의 경로를 build 필드에 작성해줄 수도 있다.

여러 Container 실행시켜보기

젠킨스의 마스터 컨테이너와 슬레이브 컨테이너를 예시로 설명해보자.

docker-compose.yml

version: "3"
services:
  master:
    container_name: master
    image: jenkinsci/jenkins:2.142-slim
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
    links:
      - slave01
      
  slave01:
    container_name: slave01
    image: jenkinsci/ssh-slave
    environment:
      - JENKINS_SLAVE_SSH_PUBKEY= ...

volumes

호스트와 컨테이너가 파일을 공유할 수 있도록 해주는 설정

master 컨테이너에 links 옵션을 줌으로써 이 컨테이너는 slave01이라는 이름으로 컨테이너를 찾아갈 수 있다.
원래라면 ssh로 접속하는 slave 컨테이너이므로 IP주소를 찾아 설정하는 등의 작업이 필요하지만, 이 옵션을 통해서 보다 쉽게 컨테이너 간 연결을 설정할 수 있다.


WebServer - CacheServer Compose 실습

Webserver와 CacheServer(redis)를 각 컨테이너에 담아 Compose로 동시에 실행시킨 후 Cache가 연동되는 서버를 구동시켜보았다. 매 방문마다 access count 가 1씩 증가하여 Cacheserver에 저장되는 것을 볼 수 있었다.

profile
Infra Engineer

0개의 댓글