제육's 휘발성 코딩
Published 2022. 6. 21. 16:15
[Docker] 도커 설치 및 실행 Infra
반응형

도커 설치하기

Linux

curl -s https://get.docker.com/ | sudo sh
  • 명령어를 입력하고 패스워드를 입력하면 리눅스 배포판에 따라 자동으로 최신버전의 도커를 설치해준다.
sudo usermod -aG docker ubuntu
  • ubuntu 유저 권한 추가

MacOS

  • 도커는 기본적으로 리눅스를 지원하기 때문에 MacOS와 Windows에 설치되는 도커는 가상머신에 설치된다. MacOS는 xhyve를 사용하고 Windows는 Hyper-V를 사용한다.
  • 설치는 https://docs.docker.com/desktop/mac/install/ 에서 제공한다.

image

  • 설치하고 docker version 을 입력해보면 다음과 같이 도커 정보가 출력된다. client-server 구조로 로컬(client)에서 명령을 전달하면 호스트에서 명령을 전달받고 결과를 받아서 출력한다.

도커 사용해보기

run - 컨테이너 실행

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

image

우분투 컨테이너 만들기

image

  • run 명령어를 입력하면 이미지를 다운받는 모습을 볼 수 있다. 컨테이너는 정상적으로 생성되고 시작했지만, 별도의 명령어를 전달하지 않았기 때문에 종료된다. 즉, 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없으면 컨테이너는 종료된다.

image

  • 정확히는 /bin/bash가 지정되어 쉘이 실행되어야 하지만, 입력을 받을 수 있도록 -it 옵션을 입력하지 않았기 때문에 바로 실행이 종료된 것이다.
  • 컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력을 위해 -it 옵션을 준다. --rm을 통해 프로세스 종료 시에 자동으로 컨테이너가 삭제되도록 설정할 수 있다.

image

  • 다음과 같이 Cent OS도 컨테이너화하여 사용할 수 있다. 참고로 우분투나 센트os에 포함된 다양한 기본 기능이 필요 없는 경우 Alpine이라는 초소형 이미지를 사용할 수도 있다.

웹 애플리케이션 실행하기

docker run --rm -p 8080:8080 jxlwqq/http-echo --text="hello"
  • -p를 이용해서 컨테이너 포트를 호스트의 포트로 연결한 후 localhost:8080 에 접속하면 메시지를 볼 수 있다. 참고로 hashicorp는 m1맥을 지원하지 않으므로 jxlwqq를 사용한다.

Redis 실행하기

docker run --rm -p 1234:6379 redis
  • 메모리 기반 데이터베이스인 Redis를 실행해보자.

image

  • 다음과 같이 Redis 컨테이너를 띄우고 telnet을 통해 접속하여 사용할 수 있다. telnet은 brew를 통해 설치해야한다.

MySQL 실행하기

docker run --platform linux/x86_64 -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7
  • m1 맥 호환을 위해 --platform linux/x86_64 를 추가해주었다.

image

  • docker exec -it mysql mysql 명령을 통해 mysql을 실행할 수 있다. exec 명령어는 run과 달리 실행중인 도커 컨테이너에 접속할 때 사용하며, 컨테이너 안에 ssh 서버 등을 설치하지 않고 exec 명령어로 접속한다.
docker exec -it mysql mysql
create database wp CHARACTER SET utf8;
grant all privileges on wp.* to wp@'%' identified by 'wp';
flush privileges;
quit
  • 다음과 같이 데이터베이스를 생성하고 권한 설정 등을 수행할 수 있다. 이 데이터베이스(wp)를 통해 워드프레스 블로그를 실행해보자.
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
  • 이후 localhost:8080 에 들어가보면 워드프레스 블로그에 접속할 수 있는 것을 볼 수 있다.

도커 기본 명령어

ps 명령어

docker ps
  • 실행중인 컨테이너 목록을 확인하는 명령어
docker ps -a
  • 중지된 컨테이너도 확인하려면 -a 옵션을 붙인다.

stop 명령어

docker stop [OPTIONS] CONTAINER [CONTAINER...]
  • 실행중인 컨테이너를 중지하는 명령어로 하나 또는 띄어쓰기를 통해 여러 개를 중지할 수 있다.

rm 명령어

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

logs 명령어

docker logs [OPTIONS] CONTAINER
  • 기본 옵션과 -f, --tail 옵션 등을 통해 컨테이너 정보를 확인하자.

images 명령어

docker images [OPTIONS] [REPOSITORY[:TAG]]
  • 도커가 다운로드한 이미지 목록을 보는 명령어로 이미지가 없으면 컨테이너가 실행할 때 이미지를 다운로드(pull) 받는다.

pull 명령어

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • 이미지를 다운로드하는 명령어

rmi 명령어

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • 이미지를 삭제하는 방법으로 images 명령어를 통해 이미지 ID르 입력하면 삭제가 된다. (실행 중인 컨테이너는 삭제되지 않는다.)

network create 명령어

docker network create [OPTIONS] NETWORK
# docker network connect app-network 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
  • 워드프레스를 생성항 가상 네트워크에 속하게 하고 mysql을 이름으로 접근할 수 있다.

volume mount (-v) 명령어

docker stop mysql
docker rm mysql
docker run --platform linux/x86_64 -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
-v /Users/jaewookjung/mysql:/var/lib/mysql \
mysql:5.7
  • 운영중인 컨테이너를 삭제하고 다시 생성하면 기존에 데이터는 모두 삭제된다. 하지만 -v를 통해 저장할 로컬의 위치를 지정해두면 삭제 후 재생성 해도 데이터가 남아있는다.

image

  • 컨테이너에 관련된 데이터를 저장할 디렉토리를 생성하면 자동으로 관련 정보가 저장되기 때문에 컨테이너를 재생성해도 기존에 데이터를 사용할 수 있다.

도커 컴포즈

$ docker-compose version
  • docker-compose는 포맷팅역할을 지원하며 도커 데스크탑 설치시 자동으로 내장되어 있다. 리눅스의 경우 별도의 설치가 필요하다.

image

  • 다음과 같이 yml 파일을 이용하여 도커 컴포즈를 사용할 수 있다. 해당 내용을 토대로 컨테이너를 생성한다.
  • services : 실행할 컨테이너 정리 (docker run --name)
  • image : 컨테이너에 사용할 이미지 이름과 태그 (태그를 생략하면 latest, 이미지가 없으면 자동 pull)
  • ports : {호스트 포트}:{컨테이너 포트}
  • environment : 컨테이너에서 사용할 환경변수 ( {환경변수 이름} : {값})
  • volumes : 마운트하려는 디렉터리 ( {호스트 디렉토리} : {컨테이너 디렉토리})
# docker run -d 옵션과 동일
$ docker-compose up -d

# 도커 이미지를 다시 빌드(build로 선언했을 때만)
$ docker-compose up --build

# 컨테이너 종료 및 삭제
$ docker-compose down

# wordpress 컨테이너만 재개
$ docker-compose start wordpress
  • docker compose를 이용해서 mysql과 wordpress를 실행시킬 수 있다. 이때 up 명령어는 docker-compose.yml에 정의된 컨테이너를 실행한다.

REFERENCES

https://www.inflearn.com/course/%EB%8F%84%EC%BB%A4-%EC%9E%85%EB%AC%B8/dashboard

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^