Docker - 설치 및 기본 명령어
04 Oct 2021 | devOpsDocker - 설치 및 기본 명령어
1. Docker 설치 [리눅스용]
- AWS EC2 ubuntu 20.04를 기준으로 한다
- 최신 패키지와 리스트 업데이트를 진행한다
sudo apt update
- https 관련 패키지를 설치한다
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- docker repo 접근을 위한 GPG key 설정을 한다
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- docer repo 등록
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
로 docker repo까지 포함하여 최신 패키지 리스트 업데이트- docker 설치
sudo apt install docker-ce
- docker 실행 확인
sudo systemctl status docker
- 매번 sudo를 사용하면 귀찮으므로 docker group에 포함시킨다
- 현 사용자(ubuntu) ID를 docker group 그룹에 포함
sudo usermod -aG docker ${USER}
- 터미널 재접속
- 현재 로그인된 ID가 docker group에 포함되어있는지 확인
id -nG
- docker 그룹에 포함되어 있다면, sudo 없이 docker 명령어 사용이 가능하다
-
docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
위 1.28.2는 강의와 같은 환경을 위해 설정하였지만 최신버전은 docker compose늬 릴리즈노트를 보고 바꾸면 된다
-
실행 권한 주기
sudo chmod +x /usr/local/bin/docker-compose
-
docker 버전 확인으로 설치가 잘 되었는지 확인
docker-compose --version
2. Docker 주요 명령어
-
sudo systemctl status docker
: docker 실행중인지 확인 -
docker login
: cli 사용을 위해 로그인 필요 docker search {검색명}:[태그명]
: docker hub에서 image 검색--limit=5
: 검색 결과를 5개로 추려서- [OFFICIAL] : 공식 이미지
- 태그명 안붙이면 default로
:latest
가 된다
-
docker pull {이미지명}
: 해당 이미지를 다운로드 docker images
: 다운로드 받은 이미지 리스트를 출력-q
: 리스트 중 IMAGE ID만 추려서 출력
docker image rm {이미지:태그}
: 다운로드 받은 이미지 삭제- {IMAGE ID} 로도 삭제 가능, 겹치지 않는 앞부분만 적어도 됨
docker rmi
도 동일한 기능
docker create {이미지명}
: 이미지로 컨테이너 생성- 이미지는 컨테이너로 생성해야 실행이 가능하다
- –name {컨테이너이명} : 컨테이너명을 주고 컨테이너 생성
docker ps
: 현재 실행중인 컨테이너 리스트 출력-a
: 실행중이지 않은 리스트까지 포함해서 출력-q
: 컨테이너 아이디만 출력- 하나의 이미지로 여러 컨테이너 생성 가능
docker rm {컨테이너명 or 컨테이너 ID}
: 컨테이너 삭제- 이미지명을 적지 않도록 주의
-
docker start {컨테이너명}
: 컨테이너 시작 -
docker run
: 우분투 자체만 컨테이너를 만들 경우, 터미널 및 입력을 연결해주어야함-
우분투 컨테이너의 입력을 가상 터미널에 할당해주어, PC 상에서의 입력이 우분투 컨테이너 입력에 들어갈 수 있게 해줌
-
우분투 컨테이너의 bash 쉘은 입력을 받을 수 있는 상태로, 종료되지 않고 실행중 상태가 됨
-
-i
: 컨테이너 입력을 열어놓는 옵션 -
-t
: 가상 터미널을 할당하는 옵션 (주로 -it 옵션 같이 사용) -
--name
: 컨테이너 이름을 설정하는 옵션 -
-d
: 컨테이널르 백그라운드에서 실행하는 옵션 -
--rm
: 컨테이너 종료 시 컨테이너를 자동으로 삭제하는 옵션 -
-p
: 호스트와 컨테이너 포트를 연결하는 옵션-
docker를 실행한 PC를 Host PC라고 한다
- apache, nginx 등 웹서버 컨테이너 실행 시, Private IP가 할당되어 외부에서 접근이 불가능하다 (172.17.0.0 ~ 172.17.255.255)
- 호스트 PC IP에 특정 port로 접근 시, 해당 port를 docker 컨테이너의 특정 Private IP의 특정 port로 변환해주는 것을 NAPT(Network Address Port Translation)라 하고 도커의 내부적인 기능이다
docker run -d -p 9999:80 --name mywebserver httpd
Host PC의 9999 포트로 접속하면, 이를 mywebserver 컨테이너의 80 포트로 포트워딩을 해준다는 의미
-
-
-v
: 호스트와 컨테이너 디렉토리를 연결하는 옵션 -
-it 옵션의 의미 :
- pseudo tty(teletypewriter) : 리눅스에서 콘솔, 터미널을 의미
- tty를 통해 리눅스에 키보드 입력을 전달할 수 있으며, 두번째 tty부터 가상의 tty라고 한다
- docker 컨테이너에 표준 입력을 열어놓고, pseudo tty를 만들어 표준 입력을 pseudo tty에 연결
- 따라서, 키보드 입력을 pseudo tty를 통해, 컨테이너의 표준 입력으로 전달할 수 있도록 해준다
-
pull + create + start를 run 명령어로 한방에 해결 가능
-
-
docker stop {ID 혹은 name}
: 해당 컨테이너 종료 /restart
로 재시작 -
docker pause {ID 혹은 name}
: 해당 컨테이너 일시정지 /unpause
로 일시정지 해제 -
docker system df
: 사용하고 있는 이미지, 컨테이너 등 저장매체 현황 확인- ubuntu는 크기가 커서 초경량 시스템을 위한 리눅스 패키지인 alpine 태그가 붙은 이미지를 사용한다
- ex)
docker run httpd:alpine
-
docker container stats
: 실행중인 컨테이너의 리소스 사용현황을 확인 -
docker exec {name} /bin/bash
: 외부에서 컨테이너 진입 시 사용- alpine의 경우 /bin/sh
- 터미널 여러개 키고 작업 시 사용하면 편리하며 attach로 접근하면 기존 실행한 터미널의 컨테이너는 꺼진다
-
docker attach {ID 혹은 name}
: 백그라운드로 실행한다면 쉘 입력이 불가능하기 때문에 명령어로 해당 컨테이너에 연결하여 입력이 가능하도록 한다 -
docker stop $(docker ps -a -q)
: 모든 컨테이너 중지 -
docker rm $(docker ps -a -q)
: 모든 컨테이너 삭제 docker rmi -f $(docker images -q)
: 모든 이미지 삭제
참고자료
인프런 - 풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]