자동 설치 스크립트(리눅스)
Docker는 리눅스 배포판 종류를 자동으로 인식하여 패키지를 설치해주는 스크립트를 제공
$ sudo wget -qO- https://get.docker.com/ | sh
Ubuntu 패키지 설치
/usr/bin/docker.io 실행파일을 /usr/local/bin/docker로 링크해서 사용
$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
docker-compose 설치
curl을 사용해서 github에서 docker-compose 바이너리 설치
터미널에서 사용할 수 있도록 심볼릭 링크 생성, 실행 권한 부여
마지막으로 version 출력으로 정상적으로 설치되었는지 확인
$ sudo curl -L "https://github.com/docker/compose/releases/download/2.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ chmod +x /usr/bin/docker-compose
$ sudo docker-compose -v
Docker 관리자 권한(로그아웃 or 재부팅해야 적용)
$ sudo usermod -aG docker ${USER}
이미지(image) 검색(search)
Docker Hub를 통해 이미지를 공유하는 생태계가 구축
$ docker search {이미지명}
ex) $ docker search ubuntu
이미지 내려받기(pull)
docker pull {이미지 이름}:{태그} 형식. latest를 설정하면 최신 버전 pull
$ docker pull ubuntu:latest
이미지 목록 출력
$ docker images
이미지 빌드(build)
Dockerfile을 빌드할 경우 Dockerfile 파일과 같은 디렉터리에서 진행
$ docker build -t {이미지명:태그 or ID}
컨테이너(container) 실행
-i (Interactive), -t (Pseudo-tty) 옵션 사용하면 실행된 Bash Shell에 입력 및 출력
$ docker run -it --name {컨테이너명 or ID} -p 3306:3306 {이미지명 or ID}
지정 이미지로 컨테이너 이름을 지정해서 포트번호를 3306으로 지정하여 컨테이너를 실행한다.
포트는 외부의 포트번호(3306):컨테이너 내부 포트번호(3306)로 포워딩된다.
-V (Volume) 호스트와 공유할 디렉터리 목록
ex) -v /root/data:/data 호스트의 /root/data 디렉터리를 Docker 컨테이너의 /data 디렉터리에 연결
$ docker run --name {컨테이너명 or ID} -v $(pwd):/home/node/app -p 8080:8080 {이미지명 or ID}
exit(또는 Ctrl+D)를 입력하여 Bash Shell에서 빠져나오면 컨테이너가 정지된다.
Ctrl+p, Ctrl+q를 차례대로 입력하여 컨테이너를 정지하지 않고, 컨테이너에서 빠져나올 수 있다.
컨테이너 실행(데몬 demon으로 실행)
-d (Detached) 백그라운드로 실행
$ docker run -d --name {컨테이너명 or ID} -p 3306:3306 {이미지명 or ID}
컨테이너 시작
실행과 차이점은 정지된 컨테이너를 시작만 해주고 Bash Shell에 접속은 하지 않음
run의 경우는 컨테이너가 안 만들어져 있을 경우 사용할 수 있음
$ docker start {컨테이너명 or ID}
컨테이너 재시작
$ docker restart {컨테이너명 or ID}
컨테이너 접속
실행되어 있는 컨테이너에 접속(Bash Shell 표시)
$ docker attach {컨테이너명 or ID}
컨테이너 명령 실행
외부에서 컨테이너 안의 명령을 실행
$ docker exec {컨테이너명 or ID} {명령} {매개 변수}
ex) docker exec {컨테이너명 or ID} echo "Hello World"
Hello World // 컨테이너 bash에서 실행한 결과
컨테이너 목록 출력
-a 옵션을 사용하면 정지된 컨테이너까지 모두 출력, 옵션을 사용하지 않으면 실행되고 있는 컨테이너만 출력
$ docker ps
$ docker ps -a
컨테이너 로그 확인
로그 종료 - Ctrl+c
$ docker logs -f {컨테이너명 or ID}
컨테이너 연결
웹 서버 컨테이너, DB 컨테이너가 있다고 가정할 때, 접근할 수 있어야 하는데 이때 --link 옵션으로 컨테이너를 연결
먼저 DB 이미지를 컨테이너로 실행
$ docker run -d --name {컨테이너명 or ID} {이미지명 or ID}
이제 Web 컨테이너를 생성하면서 DB 컨테이너와 연결
--link {컨테이너명 or ID}:{별칭}
$ docker run -d --name {컨테이너명 or ID} -p 8080:8080 --link {컨테이너명 or ID}:{별칭} {이미지명 or ID}
MySQL 시
$ docker run -d --name {컨테이너명} -e MYSQL_ROOT_PASSWORD={password} -p 3306:3306 {이미지명}:{별칭}
Postgresql 시
$ docker run -d --name {컨테이너명} -e POSTGRES_PASSWORD={password} -p 5432:5432 {이미지명}:{별칭}
컨테이너 정보 확인
docker inspect 명령으로 컨테이너의 세부 정보 확인
$ docker inspect {컨테이너명 or ID}
컨테이너 정지
$ docker stop {컨테이너명 or ID}
컨테이너 삭제
삭제할 컨테이너는 구동이 중지되어 있어야 한다
$ docker rm {컨테이너명 or ID}
이미지 삭제
$ docker rmi {이미지명 or ID}
기존의 모든 Volume 삭제
$ docker volume rm $(docker volume ls -q)
컨테이너 전체 중지, 삭제
$ docker stop $(docker ps -aq)
$ docker rm $(docker ps -aq)
컨테이너 전체 강제 중지 삭제
$ docker rm -f $(docker ps -aq)
이미지 전체 삭제
이미지 삭제는 2가지 방법이 존재한다. 첫 번째 "docker image prune -a" 명령어로 삭제할 경우 y/n으로 한 번 더 확인한다.
그리고 이미지명이 지정이 안되어 있을 경우 삭제가 안된다.
$ docker image prune -a
$ docker rmi $(docker images -q)
🔗 Reference
'DevOps' 카테고리의 다른 글
[Docker] Redis 설치 (0) | 2023.06.28 |
---|---|
Dockerfile & docker-compose 작성 (0) | 2022.07.31 |
댓글