Docker - 도커 기본 명령어

업데이트:


Docker

도커 설치 및 명령어

도커의 클라이언트 서버 구조에 대해 이해하고, 도커 기본 명령어를 이해한다.

개요

  • 도커 기본 명령어(run, ps, stop, rm, logs, images, volume)에 대하여 실습을 통해 이해한다.

도커 설치하기

  • Docker for Mac

  • 도커는 기본적으로 linux를 지원하기 때문에 MacOS와 Windows에 설치되는 도커는 가상머신에 설치된다.

    • MacOS는 xhyve를 사용하고 Windows는 Hyper-V 사용한다.
  • 도커는 클라이언트 서버 구조로 되어있으며, 터미널로 명령어를 입력하면 클라이언트가 서버에 전달한다.

    • host에 설치 된 docker daemon에서 명령어를 처리하고 클라이언트로 전달

    v

    v2

도커 기본 명령어

1.1 컨테이너 실행 : run

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

run

  • run 명령어를 사용하면 사용할 이미지가 로컬에 저장되어 있는지 확인하고 없다면 pull(다운로드) 한 후 컨테이너를 생성(create)하고 시작(strat)한다.
  • 도커 이미지마다 컨테이너가 생성될 때 실행할 명령어를 지정할 수 있다.

1.2 컨테이너 실행 : run 예제

  • ubuntu 20.04 컨테이너 만들기

    docker run --rm -it ubuntu:20.04 /bin/sh
    
    • 컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력을 위해 -it 옵션을 준다.
    • 프로세스가 종료되면 컨테이너가 자동으로 삭제되도록 –rm 옵션도 추가 한다.
    • –rm 옵션이 없다면 컨테이너가 종료되더라도 삭제되지 않고 남아 있어 수동으로 삭제 해야 한다.
  • 웹 어플리케이션 컨테이너 만들기

    docker run --rm -d -p 5678:5678 hashicorp/http-echo -text="hello world"
      
    docker run --rm -p 5679:5678 hashicorp/http-echo -text="world hello"
      
    > curl localhost:5678
    
    • detached mode(백그라운드 모드)로 실행하기 위해 -d 옵션을 추가 할 수 있다.
    • -p 옵션으로 컨테이너 포트를 호스트의 포트로 연결했다.
    • 도커는 격리된 컨테이너 환경으로 동작하기 때문에, 동일한 어플리케이션을 호스트 포트에 각 각 포워딩하여 실행할 수 있다.
  • Redis 컨테이너 만들기

    docker run --rm -p 1234:6379 redis
      
    > telnet localhost 1234
    > set hello world
    > get hello
    > quit
    
    • Redis 컨테이너에 telnet으로 접속한다.
  • MySQL 컨테이너 만들기

    docker run -d -p 3306:3306 \
      -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
      --name mysql \
      mysql:5.7
    
    docker exec -it mysql mysql
    create database wp CHARACTER SET utf8;
    grant all privileges on wp.* to wp@'%' identified by 'wp';
    flush privileges;
    quit
    
    • exec 명령어는 run 명령어와 달리 실행중인 도커 컨테이너에 접속할 때 사용한다.
    • 컨테이너 안에 ssh server 등을 설치하지 않고 exec 명령어로 접속한다. (보안 이슈로 exec 접속 권장)
  • 워드프레스 블로그 컨테이너 만들기

    docker run -d -p 8080:80 \
      -e WORDPRESS_DB_HOST=host.docker.internal \
      -e WORDPRESS_DB_NAME=wp \
      -e WORDPRESS_DB_USER=wp \
      -e WORDPRESS_DB_PASSWORD=wp \
      wordpress
    
    • 바로 위에서 만든 MySQL에 블로그 어플리케이션 컨테이너를 연결한다.

2.1 실행중인 컨테이너 목록 : ps

docker ps
  • 실행중인 컨테이너 목록을 확인하는 명령어이다.
docker ps -a
  • 중지된 컨테이너도 포함하여 전체 컨테이너 목록을 확인한다.

3.1 컨테이너 중지 : stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 실행중인 컨테이너를 중지하는 명령어이며, 띄어쓰기를 통해 여러 컨테이너를 종료할 수 있다.
  • CONTAINER ID 또는 NAMES 를 이용하여 중지 할 수 있다.
docker stop 04844f0ea2ae 05493f0ea2zz

4.1 컨테이너 제거 : rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • 종료된 컨테이너를 완전히 제거하는 명령어이다.
docker rm 04844f0ea2ae

5.1 컨테이너 로그 : logs

docker logs [OPTIONS] CONTAINER
  • 컨테이너가 정상적으로 동작하는지 로그를 통해 확인 할 수 있다.
  • -f, –tail 옵션을 통해 로그를 실시간으로 확인 할 수 있다.

6.1 다운로드 이미지 확인 : images

docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 도커가 다운로드 한 이미지 목록을 볼 수 있다.
docker images

6.2 이미지 다운로드 : pull

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • 원하는 도커 이미지를 다운로드 할 수 있다.
 docker pull ubuntu:18.04

6.3 이미지 삭제 : rmi

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 다운로드 한 이미지를 이미지 ID(docker images 목록으로 확인)를 통해 삭제 할 수 있다.
  • 컨테이너가 실행중인 이미지는 삭제되지 않는다.
docker rmi a6838e9a6ff6

7.1 컨테이너 네트워크 추가 : network create

docker network create [OPTIONS] NETWORK
  • 도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만든다.
 docker network create app-network
  • app-network 라는 이름으로 wordpress와 mysql이 통신할 네트워크를 만든다.

7.2 컨테이너 네트워크 연결 : network connect

docker network connect [OPTIONS] NETWORK CONTAINER
  • 기존에 생성된 컨테이너에 네트워크를 추가한다.
 docker network connect app-network mysql
  • mysql 컨테이너에 네트워크를 추가한다. (위 1.2 MySQL 컨테이너 생성 예제에서 –name mysql 설정으로 지정)
docker run -d -p 8080:80 \
  --network=app-network \
  -e WORDPRESS_DB_HOST=mysql \
  -e WORDPRESS_DB_NAME=wp \
  -e WORDPRESS_DB_USER=wp \
  -e WORDPRESS_DB_PASSWORD=wp \
  wordpress
  • 워드프레스를 app-network에 속하게 하고 mysql을 이름으로 접근한다.
  • 기존의 -e WORDPRESS_DB_HOST=host.docker.internal로 접근하는 방식 대신 network 이름(mysql)을 지정하여 접근한다.

8.1 디렉토리 연결(volume mount) : -v

docker run -d -p 3306:3306 \
  -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
  --network=app-network \
  --name mysql \
  -v /Users/henry.yoon/Documents/docker/mysql:/var/lib/mysql \
  mysql:5.7
  • 컨테이너는 하나의 프로세스이기 때문에 MySQL 컨테이너를 종료하면 데이터가 모두 날아간다.
  • -v 명령어를 통해 컨테이너로 실행중인 프로그램의 디렉토리와 내 pc 로컬 환경의 디렉토리를 연결하여 데이터를 백업할 수 있다.

Reference

댓글남기기