본문 바로가기

WEB

[Docker] 도커의 정의와 기본 명령어

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

다른 도구와 마찬가지로 어떤 문제를 해결하기 위해 만들어졌고 그 방법이 많은 사람들에게 인기를 끌면서 널리 사용되었다.

 

도커가 등장하고 서버관리/개발 방식이 컨테이너 방시으로 완전히 바뀌게 된다.

 

도커가 등장하고 나서 어떠한 프로그램도 컨테이너로 만들 수 있고 어디서든 컨테이너를 실행할 수 있다.

 

그럼 도커는 가상머신 같은거일까?

도커는 가상머신처럼 독립적으로 실행되지만 가상머신보다 빠르고 쉽고 효율적이다.

 

 

 

도커의 특징

확장성/이식성

- 도커가 설치되어 있다면 어디서든 컨테이너를 실행할 수 있음

- 특정 회사나 서비스에 종속적이지 않음

- 쉽게 개발서버를 만들 수 있고 테스트서버 생성도 간편함

 

표준성

- 도커를 사용하지 않는 경우 ruby, nodejs, go, php 로 만든 서비스들의 배포 방식은 제각각 다름

- 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포과정이 동일해짐

 

이미지

- 이미지에서 컨테이너를 생성하기 떄문에 반드시 이미지를 만드는 과정이 필요

- Dockerfile을 이용하여 이미지를 만들고 처음부터 재현 가능

- 빌드 서버에서 이미지를 만들면 해당 이미지를 이미지 저장소에 저장하고 운영서버에서 이미지 불러옴

 

설정관리

- 설정은 보통 환경변수로 제어함

- MYSQL_PASS=password와 같이 컨테이너를 띄울때 환경변수를 같이 지정

- 하나의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야함

 

자원관리

- 컨테이너는 삭제 후 새로 만들면 모든 데이터가 초기화됨

- 업로드 파일을 외부 스토리지와 링크하여 사용하거나 S3같은 별도의 저장소가 필요

- 세션이나 캐시를 memcached나 redis와 같은 외부로 분리

 

 

결국 도커가 가져온 변화가 무엇일까.

- 클라우드 이미지보다 관리하기 쉬움

- 다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 거의 없음

- 복잡한 기술을 몰라도 사용할 수 있음

- 이미지 빌드 기록이 남음

- 코드와 설정으로 관리 > 재현 및 수정 가능

- 오픈소스 > 특정 회사 기술에 종속적이지 않음

 

 

도커 설치

https://docs.docker.com/desktop/install/mac-install/

 

Install Docker Desktop on Mac

Install Docker for Mac to get started. This guide covers system requirements, where to download, and instructions on how to install and update.

docs.docker.com

 

 

도커 설치 확인

docker version

 

 

 

 

 

도커 명령어


 

실행중인 컨테이너 조회

docker ps //실행중인 컨테이너 조회
docker ps -a // 중지되어있던 컨테이너도 조회

 

-d : 백그라운드 모드

-p : 호스트와 컨테이너의 포트를 연결

-v : 호스트와 컨테이너의 디렉토리를 연결

-e : 컨테이너 내에서 사용할 환경변수 설정

--name : 컨테이너 이름 설정

--rm : 프로세스 종료시 컨테이너 자동 제거

-it : -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션

--network : 네트워크 연결

 

 

run - 컨테이너 실행

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

 

 

stop 명령어 - 컨테이너 중지

docker stop [OPTIONS] CONTAINER [CONTAINER...]

 

 

rm 명령어 - 종료된 컨테이너를 완전히 제거

docker rm [OPTIONS] CONTAINER [CONTAINER...]

 

 

logs 명령어 

docker logs [OPTIONS] CONTAINER

ex) docker logs -f b892hfod

-f 옵션은 실시간 로그 확인 옵션

 

 

images 명령어 - 도커가 다운로드한 이미지 목록 조회

docker images [OPTIONS] [REPOSITORY[:TAG]]

 

 

pull 명령어 - 이미지를 다운로드하는 명령어

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

ex) docker pull ubuntu:18.04

 

 

이미지 삭제 명령어 

docker rmi [OPTIONS] IMAGE [IMAGE...]

images 명령어를 통해 얻는 이미지 목록에서 이미지 ID를 입력하면 삭제 됨

단,컨테이너가 실행중인 이미지는 삭제되지 않는다.

 

 

network create 명령어 - 도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만듦

docker network create [OPTIONS] NETWORK

ex) docker network create app-network

app-network 라는 이름으로 wordpress와 mysql이 통신할 네트워크를 만듦

 

 

 

network connect 명령어 - 기존에 생성된 컨테이너에 네트워크를 추가

docker network connect [OPTIONS] NETWORK CONTAINER

ex) docker network connect app-network mysql

mysql 컨테이너에 네트워크를 추가한다.

 

 

network option 명령어

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을 이름으로 접근

 

 

volume mount (-v) 명령어

docker stop mysql
docker rm mysql
docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--network=app-network \
--name mysql \
-v /Users/subicura/Workspace/github.com/subicura/docker-guide/ch02/mysql:/var/lib/mysql \
mariadb:10.9

wordpress를 띄운 상태에서 mysql을 삭제후에 다시 실행하면 데이터베이스 오류가 발생

컨테이너가 삭제될때 데이터가 다 삭제되어서 오류생김

-v /my/own/datadir:/var/lib/mysql

내 디렉토리랑 mysql 디렉토리랑 연결해주는 명령어

 

 

 

docker-compose

 

docker-compose.yml

version: '2'
services:
  db:
    image: arm64v8/mysql:8.0
    volumes:
      - ./mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    image: wordpress:latest
    volumes:
      - ./wp:/var/www/html
    ports:
        - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress
docker-compose up //docker compose를 이용하여 mysql과 wordpress를 실행
docker-compose down //docker compose를 이용하여 mysql과 wordpress를 종료

 

'WEB' 카테고리의 다른 글

[WEB] HttpServletRequest / ServletRequest  (0) 2024.10.28
[Spring boot] h2 연결하기  (0) 2024.10.28
HTTP header - referer  (0) 2023.04.23
[WEB] Spring 한글 깨짐 방지  (0) 2022.07.19
[Window] 원격 데스크톱 연결하기  (0) 2022.07.18