Docker - 설치, pull, run, 기본 명령어
본 게시물은 스스로의 공부를 위한 글입니다.
틀린 내용이 있을 수 있습니다.
📒 Docker 설치
- Linux
curl -s https://get.docker.com/ | sudo sh //리눅스 배포판에 따라 자동으로 최신버전 도커 설치
sudo usermod -aG docker ubuntu //ubuntu 유저 권한 추가
- Windows, MacOs
- 도커는 기본적으로 리눅스 프로그램이다.
- 그럼 윈도우나 맥이면 도커를 사용할 수 없는 걸까?
- 아니! 리눅스os를 가상머신에 깔고 도커를 설치하면 된다.
- 근데.. 너무 귀찮지 않아?
- 아니! 도커가 알아서 리눅스 os까지 다 설치해주거든~
- 도커 사이트에서 설치 가능하다.
- 설치확인 : Docker Desktop 실행 후
docker version
📒 Docker 용어
우리가 스마트폰에서 app store
에서 program
을 다운로드 후 process
를 실행하는 것처럼, 도커는 docker hub
에서 image
을 다운로드 받아 container
로 실행한다.
이때 docker hub
에서 image
를 다운로드 하는것을 pull
이라 하고, image
를 contatiner
로 실행하는 것을 run
이라 한다.
- app store = docker hub -> pull을 통해 image 다운
- program = image -> run을 통해 container 실행
- process = container
📌 run 명령어
-
run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull) 한 후 컨테이너를 생성(create)하고 시작(start)한다.
- 따라서 별도로 pull할 필요 없이, 바로 run 명령어로 시작하면 된다.
-
도커 컨테이너 실행
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
- run 옵션
-d
: detached mode (백그라운드 모드)-p [hostPort]:[ContainerPort]
: 호스트와 컨테이너의 포트를 연결-v
: 호스트와 컨테이너의 디렉토리를 연결-e
컨테이너 내에서 사용할 환경변수 설정--name
컨테이너 이름 설정--rm
프로세스 종료시 컨테이너 자동 제거-it
-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션--network
네트워크 연결
예제를 통해 설치와 실행 방법에 대해 알아보자
🎈 예제0 - 아파치 웹 서버 이미지 다운, 실행, 삭제
- 도커허브에서 httpd 검색 (아파치는 httpd이다.)
- 사이트 오른편에
docker pull httpd
을 볼 수 있다.
- 사이트 오른편에
- 터미널에
docker pull httpd
입력 -> 이미지가 다운로드 된다.- 사실 바로 run 명령어를 입력해도 저장된 이미지가 없으면 자동으로 pull해준다.
docker images
를 통해 현재 도커에 설치되어 있는 이미지들 확인TAG
= 이미지 버전,IMAGE ID
= 이미지 식별자
docker run httpd
를 통해 container로 실행docker run --name [컨테이너이름] httpd
를 통해 컨테이너에 이름 붙여주기 가능
docker ps
를 통해 현재 실행중인 container 확인- 이때 컨테이너의
CONTAINER ID
또는NAMES
를 확인해두자
- 이때 컨테이너의
docker stop [CONTAINER ID]
또는docker stop [NAMES]
를 통해 실행 중인 컨테이너 중지- 도커에서 컨테이너 중지와 컨테이너 삭제는 다르다.
docker ps -a
를 통해 중지된 컨테이너도 모두 확인 가능하다.- 정지된 컨테이너를 다시 실행시키고 싶으면
docker start [NAMES]
를 통해 가능- 로그를 실시간으로 확인하고 싶다면
docker logs -f [names]
- 로그를 실시간으로 확인하고 싶다면
- 컨테이너를 삭제하고 싶다면
docker rm [names]
입력- 도커는 기본적으로 실행중인 컨테이너는 지우지 못한다.
docker stop
을 통해 중지시킨 후 삭제해야 한다.- 강제로 삭제하고 싶다면
docker rm --force [names]
를 통해 가능
- 이미지까지 지우고 싶다면
docker rmi [REPOSITORY]
를 통해 가능
🎈 예제1 - 도커 컨테이너에 우분투 설치와 실행
docker run ubuntu:20.04
- 설치는 정상적으로 되나, 따로 명령어를 지정하지 않았으므로 바로 컨테이너 종료
docker run --rm -it ubuntu:20.04 /bin/sh //우분투 설치 및 bash 실행
docker run --rm -it centos:8 /bin/sh //centOs 설치 및 셸 실행
-
컨테이너 내부에 들어가기 위해 sh를 실행하고, 키보드 입력을 위해
-it
옵션을 줬다. -
--rm
옵션이 없다면 컨테이너가 종료되더라도 삭제되지 않고 남아 있어 수동으로 삭제해야 한다. -
exit
를 하면 종료된다.
🎈 예제2 - hashicorp/http-echo
docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"
-text
뒤 문자열을 그대로 출력해줌-p 5678:5678 ~
내 pc의 5678포트가 컨테이너의 5678포트로 연결- 브라우저에
localhost:5678
에 접속하면 메시지를 볼 수 있다.
🎈 예제3 - MySQL
docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7
-d
: 백그라운드로 실행을 해서 로그가 안보임-e MYSQL_ALLOW_EMPTY_PASSWORD=true
: 비밀번호 입력을 안하겠다.--name mysql
: 이름 설정
- MySQL 실행
exec
: 현재 구동 중인 컨테이너에 접속(백그라운드 실행 컨테이너 내부 접속)
docker exec -it mysql mysql
- 이처럼 도커는 다양한 데이터베이스를 손쉽게 생성/삭제할 수 있기 때문에 개발할때도 많이 사용한다.
📒 도커 기본 명령어
📌 컨테이너
docker ps
: 현재 실행중인 컨테이너 확인docker ps -a
: 중지된 컨테이너도 확인하려면 -a옵션
docker stop [options] container [container...]
- 실행중인 컨테이너를 중지(하나 또는 여러개(띄어쓰기) 중지 가능). 여기서 컨테이너는 컨테이너id 또는
--name
으로 지정된 이름을 입력한다.
- 실행중인 컨테이너를 중지(하나 또는 여러개(띄어쓰기) 중지 가능). 여기서 컨테이너는 컨테이너id 또는
docker rm [options] container [container..]
종료된 컨테이너를 완전히 제거docker logs [options] container [container]
컨테이너가 정상적으로 동작하는지 확인하는 좋은 방법은 로그를 확인하는 것이다.- 옵션:
-f
계속 대기하면서 새로 생기는 로그들도 보여준다.
- 옵션:
Ctrl + P, Q
컨테이너 정지하지 않고 빠져나오기docker rename [변경전컨테이너이름] [변경후컨테이너이름]
컨테이너 이름 변경
📌 이미지
-
docker images [options] [repository[:tag]]
도커가 다운로드한 이미지 목록을 보여줌 -
docker pull [options] name[:tag|@digest]
이미지를 다운로드- 하지만
docker run ~
했을 때, 이미지 파일이 없다면 자동으로 pull한다.
- 하지만
-
docker rmi [options] image [image...]
이미지id를 입력하면 이미지삭제가 된다. 단, 컨테이너가 실행중인 이미지는 삭제되지 않는다.
📌 네트워크
-
docker network create [options] networkName
도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만든다. -
docker network connect [options] networkName container
기존에 생성된 컨테이너에 네트워크를 추가한다. -
예제 - mysql과 wordpress를 한 네트워크에 묶기
docker network create app-network //네트워크를 만들고
docker network connect app-network mysql //--name mysql로 만든 컨테이너를 네트워크에 속하게하기
//워드프레스를 네트워크에 속하게 하고 mysql을 이름으로 접근한다.
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
📌 Volume
-
-v 호스트경로:컨테이너내부경로
호스트와 컨테이너 디렉터리를 연결해준다. -
즉, 앱 데이터를 유지할 수 있는 옵션
-
컨테이너를
rm
으로 지우면 데이터도 함께 삭제된다. -
하지만
run
할때-v
옵션을 주면 삭제 후 다시 설치해도 그 폴더로 다시 연결되기 때문에 데이터를 복구할 수 있다. -
도커툴박스는 가상머신을 이용하기 때문에 로컬경로에는 보이지 않는다. 경로를 만든 경우 가상머신에 생성이 된다.
docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--network=app-network \
--name mysql \
-v /my/own/datadir:/var/lib/mysql \
mysql:5.7
Reference
생활코딩-도커
인프런 초보를 위한 도커 안내서(subicura)
Author And Source
이 문제에 관하여(Docker - 설치, pull, run, 기본 명령어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gmtmoney2357/Docker-설치-pull-run-기본-명령어저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)