(!) [Docker Desktop] 은 2022.02.01 부로 250인 이상의 사업장에서는 유료화로 전환되었다. 개인 & 250인 이하의 사업장에 한하여 제한적인 기능으로 Docker Desktop을 무료로 이용할 수 있다.
[Docker 다운로드 사이트 링크]
https://docs.docker.com/docker-for-mac/install/
- [Download from Docker Hub] 클릭하여 다운 - Docker.dmg 파일 다운받아 설치
Docker아이콘을 눌러보면 Docker desktop is running에 초록불이 뜨면 실행이 완료.
[Docker 설치 완료후 확인]
docker version 명령어입력시 설치된 모습을 확인 (설치당시에 최신 버전은 19.03.8 이다)
[Docker 이미지 내려받기]
Docker 컨테이너를 생성 & 실행하기 전에, 컨테이너에 실행할 이미지를 먼저 다운받아야 한다.
(물론 아래에서 사용될 docker run + 이미지명 명령어를 입력하면, 알아서 다운로드 해주긴 한다)
# 도커 이미지 검색 (예시: ubuntu)
yunsang:~ nodo3482$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 13961 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
neurodebian NeuroDebian provides neuroscience research s… 88 [OK]
open-liberty Open Liberty multi-architecture images based… 51 [OK]
ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 46 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 38
ubuntu/mysql MySQL open source fast, stable, multi-thread… 28
ubuntu/apache2 Apache, a secure & extensible open-source HT… 26
ubuntu/prometheus Prometheus is a systems and service monitori… 22
kasmweb/ubuntu-bionic-desktop Ubuntu productivity desktop for Kasm Workspa… 21
# 도커 이미지 다운로드
yunsang:~ nodo3482$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
4d32b49e2995: Pull complete
Digest: sha256:bea6d19168bbfd6af8d77c2cc3c572114eb5d113e6f422573c93cb605a0e2ffb
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
(!) 여기서 [이미지명]:[태그] 의 형태로 태그를 지정할 수 있는데, 미지정시 최신버전을 의미하는 latest가 붙어서 사용이 된다. 필요시 태그에 이미지, 운영체제 버전 등의 정보를 입력하여 받아올 수 있다.
[Docker 컨테이너 생성하기 및 실행]
먼저 필요한 이미지를 선택한 후에, 컨테이너 생성 & 실행해보자.
https://hub.docker.com/search?q=&type=image&page=1
=> docker에서 이용할 수 있는 이미지들 참고 (출처. docker 공식 사이트)
(본인은 ubuntu 16.04를 실행하였다)
docker run이란? 컨테이너를 실행시키는 명령어라고 보면 된다.
docker run [OPTIONS] IMAGE [COMMAND] [ARG....]
(* 이때 OPTIONS에 여러 옵션을 넣으려면 위와같이 띄워쓰기하여 작성하면 됨)
이때, docker run --help를 쳐보면 run에 대한 수많은 옵션들이 나올 것인데, 기본적으로 ubuntu를 실행시키기 위한 것들로만 옵션을 구성하였다.
[docker run]
-a, —attach=[STDIN | STDOUT | STDERR]: 표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러 출력(STDERR)을 연결
--cidfile=“파일명”: 컨테이너 ID를 파일로 출력
-d: 컨테이너를 백그라운드에서 실행
-i, --interactive: 컨테이너 표준 입력 열기
-t, --tty: pseudo-TTY를 사용
-u, --user=“사용자명”: 사용자명을 입력
-p: 지정하는 포트번호를 사용 (web서버로 사용하기 위해 80포트를 사용)
--name: 컨테이너명을 지정
-v: volume을 mount (내 하드디스크내에 있는 폴더와 가상공간(docker)의 폴더를 연결)
=> 아래에서 추가적으로 설명을 진행.
--link: 다른 Container와 연결 (web서버 사용목적이므로, DB Container를 생성해서 연결)
--rm: 커맨드 실행 완료 후, 컨테이너 자동 삭제
--restart always: 프로그램에서 예상하지 못한 오류가 발생하거나 리눅스 시스템에서 도커 서비스가 중지되는 경우에 자동으로 재시작할 수 있도록 설정
--restart 옵션 설명 | ||
값 | 컨테이너 비정상 종료 시 | 도커 서비스 시작 시 |
no (default) | 컨테이너를 재시작하지 않음 | 컨테이너를 시작하지 않음 |
on-failure | 컨테이너를 재시작함 | 컨테이너를 시작함 |
always | 컨테이너를 재시작함 | 컨테이너를 시작함 |
unless-stopped | 컨테이너를 재시작함 | 사용자가 직접 정지하지 않은 컨테이너만 시작함 |
컨테이너를 생성하고나서 docker ps -a (현재 실행중인 컨테이너) 명령어를 입력해보면 (-a 는 모든 컨테이너. -d 옵션이 빠진 컨테이너까지 모두 확인)
위와같이 생성된 컨테이너를 확인할 수 있다.
[컨테이너에 들어가보기]
ubuntu 컨테이너를 생성할때 부여했던 옵션을 통해 -t (pseudu-TTY) 터미널에 접속할 수 있다.
docker exec [OPTIONS] CONTAINER명 COMMAND [ARG...]
[docker exec]
-i : 키보드를 통한 데이터 전송 옵션 (STDIN)
-t : pseudo-TTY 접속
(컨테이너명과 bash (정확히는 /bin/bash)를 입력)
ubuntu 터미널이 뜨는것을 확인할 수 있는데, 간단하게 ubuntu 버전 확인과, 파일&폴더를 볼 수 있는 간단한 명령어를 실행해보았다.
이렇게 ubuntu 컨테이너가 생성되어 실행되고 접속되는 모습을 확인할 수 있다.
추가.Docker mysql 컨테이너 실행
# mariaDB
$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name test-db -v /Users/we/study/db:/var/lib/mysql mariadb:latest --character-set-server=utf8 --collation-server=utf8_general_ci --default-time-zone=+09:00
바인드 마운트로 호스트와 컨테이너 연결
컨테이너를 실행할때 [-v (=-volume)] 옵션을 사용하였는데, 로컬저장소와 컨테이너 내부의 파일을 바인드 마운트를 진행할 수 있다.
볼륨이란 도커가 직접 관리하며 컨테이너에 제공하는 호스트의 공간이다. -v [호스트의 디렉터리경로 혹은 볼륨이름]:[컨테이너의 디렉터리] 옵션을 주어서 지정이 가능하다. 위의 예제에서는 [-v /Users/we/study/db:/var/lib/mysql]를 사용하였다. (컨테이너가 날아가도 영구적으로 보존할 수 있도록, DB 컨테이너의 정보를 저장하였다)
바운드 마운트 vs 볼륨
두 개념은 호스트(여기서는 나의 PC) 파일 시스템과 도커 컨테이너 내부를 연결하여 사용하는 점은 동일하다. 데이터베이스의 디렉터리나 서버 첨부 파일 디렉터리처럼 컨테이너가 바뀌어도 없어지면 안되는 자료들을 이 방법으로 보존할 수 있다.
두 개념의 차이점은 관리포인트가 다르다. 바인드마운트는 호스트 머신의 디렉터리에 의존하는 반면, 볼륨은 도커 영역안에서 관리된다. 볼륨으로 마운트하는 경우, 볼륨이름을 지정해주어야 한다.
또다른 차이점으로 바인드 마운트의 경우 외부(호스트)에서 컨테이너 안쪽으로 내용을 추가할 수 있지만, 볼륨은 불가능하다. (관리포인트가 도커라서 그런듯)
볼륨 사용방법
# 볼륨 생성
[root@m-k8s ~]# docker volume create nginx-volume
nginx-volume
# 볼륨 조회
[root@m-k8s ~]# docker volume inspect nginx-volume
[
{
"Driver": "local",
"Labels": {},
"MountPoint": "/var/lib/docker/volumes/nginx-volume/_data",
"Name": "nginx-volume",
"Options": {},
"Scope": "local"
}
]
# 볼륨으로 생성된 디렉터리를 확인
[root@m-k8s ~]# ls /var/lib/docker/volumes/nginx-volume/_data
# 컨테이너 실행 & 볼륨 마운트
[root@m-k8s ~]# docker run -d -v nginx-volume:/usr/share/nginx/html \
-p 8082:80 --restart always --name nginx-volume nginx
91618585bcfc19658ebf0791f500435db7d7sd7ab89d90s87a61oaqwl
참고자료
= 서적 - 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커, 길벗 - 제 4장
= https://boying-blog.tistory.com/31
수정
2022.03.31 - 용어수정, docker 이미지 다운로드 설명추가.
2022.04.04 - 바운드 마운트 vs 볼륨 내용 추가.
'Docker & Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes) - 기본적인 사용방법 (0) | 2022.01.29 |
---|---|
쿠버네티스(Kubernetes) - 이해하기 (0) | 2022.01.22 |
인프라 환경 관련 개념정리 (0) | 2022.01.20 |
Docker - 명령어 (0) | 2021.10.20 |
Docker - Jenkins 설치 및 배포 (Spring boot 프로젝트) (0) | 2021.09.15 |