반응형
도커 설치하기
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/ 에서 제공한다.
- 설치하고
docker version
을 입력해보면 다음과 같이 도커 정보가 출력된다. client-server 구조로 로컬(client)에서 명령을 전달하면 호스트에서 명령을 전달받고 결과를 받아서 출력한다.
도커 사용해보기
run - 컨테이너 실행
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
우분투 컨테이너 만들기
- run 명령어를 입력하면 이미지를 다운받는 모습을 볼 수 있다. 컨테이너는 정상적으로 생성되고 시작했지만, 별도의 명령어를 전달하지 않았기 때문에 종료된다. 즉, 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없으면 컨테이너는 종료된다.
- 정확히는
/bin/bash
가 지정되어 쉘이 실행되어야 하지만, 입력을 받을 수 있도록-it
옵션을 입력하지 않았기 때문에 바로 실행이 종료된 것이다. - 컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력을 위해 -it 옵션을 준다. --rm을 통해 프로세스 종료 시에 자동으로 컨테이너가 삭제되도록 설정할 수 있다.
- 다음과 같이 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를 실행해보자.
- 다음과 같이 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
를 추가해주었다.
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를 통해 저장할 로컬의 위치를 지정해두면 삭제 후 재생성 해도 데이터가 남아있는다.
- 컨테이너에 관련된 데이터를 저장할 디렉토리를 생성하면 자동으로 관련 정보가 저장되기 때문에 컨테이너를 재생성해도 기존에 데이터를 사용할 수 있다.
도커 컴포즈
$ docker-compose version
- docker-compose는 포맷팅역할을 지원하며 도커 데스크탑 설치시 자동으로 내장되어 있다. 리눅스의 경우 별도의 설치가 필요하다.
- 다음과 같이 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
반응형