https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
Mac에서 Docker 사용하기(Docker for Mac)
도커를 Mac에서 사용하려면 Docker for mac을 설치하면 된다. 프로그램이 마치 네이티브처럼 설치된 것 같지만, 도커는 리눅스 컨테이너이므로 실제로는 가상머신에 설치되어 있다. Docker는 가상머신이라는 느낌이 들지 않게 잘 만들어져 있다. 특히 포트 연결을 위해 도커 컨테이너의 특정 포트를 가상머신에 연결하고 다시 mac의 포트에 연결해야 하는데 이런 추가적인 부분을 도커는 아주 자연스럽게 처리한다. docker for mac은 xhyve라는 macOS에서 제공하는 가상환경을 이용한다.
설치확인하기
설치가 완료되었다면 아래 명렁어를 통해 확인해보자
docker version
output:
Client:
Cloud integration: 1.0.14
Version: 20.10.6
API version: 1.41
Go version: go1.16.3
Git commit: 370c289
Built: Fri Apr 9 22:46:57 2021
OS/Arch: darwin/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:44:56 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
output에서 확인할 수 있는 특이한 점은 버전 정보가 클라이언트와 서버로 나뉘어져 있다는 것이다. 도커는 하나의 실행파일이지만 실제로는 클라이언트와 서버역할을 각각 할 수 있다. 도커 명령어를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 받아 터미널에 출력한다.
기본값이 도커 서버의 소켓을 바라보고 있기 때문에 사용자는 의식하지 않고 마치 바로 명령을 내리는 것 같은 느낌을 받는다. 이러한 설계가 mac의 터미널에서 명령어를 입력했을 때 가상 서버에 설치된 도커가 동작하는 이유이다.
컨테이너 실행하기
도커를 실행하는 명령어는 아래와 같다.
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
다음은 자주 사용하는 옵션들이다.
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
–link | 컨테이너 연결 [컨테이너명:별칭] |
Ubuntu 20.04 Container
ubuntu 20.04 컨테이너를 생성하고 컨테이너 내부에 들어가보자.
docker run ubuntu:16.04
run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없으면 다운로드(pull) 한 후 컨테이너를 생성(create)하고 시작(start)한다.
만약 이미지가 저장이 되어있다면, 컨테이너는 정상적으로 실행(생성)된 다음 곧바로 종료된다. 명령어를 전달하지 않았기 때문이다. 컨테이너는 프로세스이기 때문에 실행중인 프로세스가 없으면 컨테이너는 종료된다.
이번에는 /bin/bash 명령어를 입력해서 unbuntu:20.04 컨테이너를 실행해 보겠다.
~ » docker run --rm -it ubuntu:20.04 /bin/bash
> ls
> bash: unexpected EOF while looking for matching `''
bash: syntax error: unexpected end of file
root@85050840609f:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@85050840609f:/# cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
컨테이너 내부에 들어가기 위해 bash 쉘을 실행하고 키보드 입력을 위해 -it 옵션을 준다. 추가적으로 프로세스가 종료되면 컨테이너가 자동으로 삭제되도록 --rm 옵션도 추가한다.
cat /etc/issue와 ls를 실행하보니 ubuntu 환경임을 알 수 있다.
도커 기본 명령어
앞서 도커의 run 명령어를 이용해 여러개의 컨테이너를 실행했다. 이제 컨테이너의 상태를 살펴보고 어떤 이미지가 설치되어 있는지 확인하는 기본 명령어를 알아보자.
컨테이너 목록 확인하기(ps)
docker ps [OPTIONS]
input:
docker ps
output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85050840609f ubuntu:20.04 "/bin/bash" 8 minutes ago Up 8 minutes pedantic_maxwell
33594b8d97e0 postgis/postgis "docker-entrypoint.s…" 2 weeks ago Up 5 days 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp crowdquake-web_postgres_1
컨테이너 중지하기(stop)
docker stop [OPTIONS] CONTAINER [CONTAINER...]
따로 특별한 옵션은 없다.
중지시키려면 stop 뒤에 container의 id를 입력하면 된다.
컨테이너 제거하기(rm)
docker rm [OPTIONS] CONTAINER [CONTAINER...]
실행시켜 보면 컨테이너가 말끔히 삭제된다. 호스트 OS는 아무런 흔적도 남아있지 않고 컨테이너만 격리된 상태로 실행되었다가 삭제되었다. 아래 명령어를 통해 중지된 컨테이너 ID를 가져와서 한 번에 모두 삭제한다.
docker rm -v $(docker ps -a -q -f status=exited)
apt update시켜줘야 잘 돌아간다.
'DevOps > Docker' 카테고리의 다른 글
Docker를 이용해 AWS EB에 Webapp 배포하기 (0) | 2022.03.14 |
---|---|
MacOS Docker-Ubuntu VSCode (0) | 2021.09.11 |
MacOS Docker Linux GUI (0) | 2021.09.11 |