docker를 사용해보자 (docker 기본 명령어 사용해보기)
이번 시간에는 이전에 배운 개념을 토대로 docker 를 직접 사용해 봅시다.
💡 목차
이번 시간에 학습할 부분은 아래와 같다. 전체적으로 무엇을 배울지 미리 확인하고 가자.
- 도커 다운로드
-
도커 설치 확인 (docker version)
- docker version 명령어에 대한 의미를 살펴 보자.
-
docker 이미지 다루기 - 자주 사용 하는 명령어 정리
- docker 이미지를 다루는 명령어를 살펴 봅니다.
-
docker 컨테이너 다루기 - 자주 사용 하는 명령어 정리
- docker 컨테이너를 다루는 명령어를 살펴 봅니다.
-
docker 실습
- docker 명령어를 직접 사용해 봅시다.
-
docker 기타 명령어 정리
- 그 외 기다 명령어를 살펴 봅니다.
1. 도커 다운로드
아래 주소를 통해 도커를 다운로드 해보자.
- 맥 : https://docs.docker.com/docker-for-mac/
- 윈도우: https://docs.docker.com/docker-for-windows/
- 리눅스: https://docs.docker.com/install/linux/docker-ce/centos/
🔹 docker 설치 for centos7
centos7 에 docker 를 설치하는 방법입니다.
2. 도커 설치 확인 (docker version)
아래 명령어는 mac 에서 진행한 결과 입니다.
🔹 docker version
$ docker version
설치 완료 후 도커가 정상적으로 동작하는지 해당 명령어를 입력합니다.🔹 docker version 결과
이전에 설명한 Docker architecture 에서 도커의 구조는 클라이언트-서버 가 존재한다고 하였습니다. 여기 결과에 Client/Server가 존재하는 이유도 이와 같습니다. 이 명령어 결과의 의미는 다시 정리해보면 아래와 같습니다.
도커 문서 참조 - docker Client-Server 구조
- client: 현재 나의 컴퓨터. OS/Arch 를 보면 제 컴퓨터가 mac이라서 darwin/amd64 라고 확인할 수 있습니다.
- server: 실제 컨테이너를 생성 및 실행하며 이미지를 관리합니다. Client가 명령어를 전달하면 Server가 명령어를 받아 실행합니다.
3. docker 이미지 다루기 - 자주 사용 하는 명령어 정리
🔹 docker search
$ docker search [검색할 이미지명]
docker hub에 존재하는 이미지 리스트를 확인할 수 있다.🔸 예시
🔹 docker pull
$ docker pull [저장소 이름]/[이미지 이름]:[태그]
이미지를 다운로드를 한다.키 | 의미 |
---|---|
저장소 이름 | 이미지가 저장된 장소. 없는 경우는 기본 이미지로 도커 허브의 공식 이미지 |
이미지 이름 | 다운 받을 이미지 이름. 예를 들어 ubuntu, nginx |
태그 | 이미지 관리 버전. 일반적으로 18.04와 같은 버전을 명시. 태그 생략 시 latest 의미. |
🔸 예시
- ubuntu 라는 이미지 이름. 태그는 18.04 의 이미지를 다운로드 한다.
- 저장소: 도커 허브에 존재. 도커허브사이트 에서 확인 가능
🔹 docker images
$ docker images
이미지 목록 확인하기🔸 예시
- 이전 예제에서 다운받은 이미지 리스트를 확인할 수 있다.
🔹 docker rmi
$ docker rmi 이미지1 [이미지2, 이미지3 ...]
이미지 제거하기🔸 예시
- 다운 받았던 이미지를 삭제하고, 다시 ‘docker images’ 명령어로 목록을 확인하자
- 제거 방식은 docker rmi [도커이름:태그] 또는 [image id]
4. docker 컨테이너 다루기 - 자주 사용 하는 명령어 정리
🔹 docker run
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull)를 한 후 컨테이너를 생성(create)하고 시작(start)한다.🔸 OPTIONS
옵션 | 의미 |
---|---|
-d | detached mode로 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
—name | 컨테이너 이름 설정 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
—rm | 프로세스 종료시 컨테이너 자동 제거 |
—link | 컨테이너 연결 [컨테이너 명:별칭] |
🔸 예시 1
- ubuntu:18.04 컨테이너를 실행하는 예시로 해당 이미지가 없어서 다운로드(pull)한 뒤, 컨테이너를 실행한다.
🔸 예시 2
- - - name: test라는 컨테이너 이름 설정
- -it: 컨테이너 내부로 들어가 bash 입력이 가능
- - - rm: 프로세스 종료되면 자동으로 도커 컨테이너 종료
🔹 docker ps
$ docker ps [OPTIONS]
컨테이너 목록 확인. 옵션 없이 사용하는 경우 실행중인 컨테이너만 출력.🔸 OPTIONS
옵션 | 의미 |
---|---|
–all , -a | 모든 컨테이너를 보여준다. (컨테이너가 실행중이지 않는 것이라도, stop된 컨테이너도 보여줌 ) |
🔸 예시
- STATUS 를 통해 컨테이너의 상태를 확인 가능.
- Exited: 정지된 상태 , UP: 실행 중인 상태
🔹 docker rm
$ docker rm [OPTIONS] 컨테이너1 [컨테이너2...]
컨테이너를 제거🔸 OPTIONS
옵션 | 의미 |
---|---|
–force , -f | 실행중인 컨테이너를 강제로 제거한다. (uses SIGKILL) |
🔸 예시
$ docker rm -f test
🔹 docker start
$ docker start [OPTIONS] 컨테이너1 [컨테이너2...]
stop된 컨테이너를 실행하기🔹 docker stop
$ docker stop [OPTIONS] 컨테이너1 [컨테이너2...]
실행 중인 컨테이너를 stop 하기🔹 docker logs
$ docker logs [OPTIONS] CONTAINER
도커 컨테이너의 로그 확인하기🔸 OPTIONS
옵션 | 의미 |
---|---|
–follow , -f | 실시간 로그 생성 |
–tail | 마지막 number 숫자 줄 만큼만 출력 |
🔸 예시
$ docker logs -f <컨테이너 명>
🔹 docker exec
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
실행 중인 컨테이너에 들어갈 때 사용🔸 예시
$ docker exec -it <컨테이너 명> /bin/bash
5. docker 실습
🔹 컨테이너 외부 노출하기 (run -p 사용) - nginx
nginx 를 띄워서 확인해보자
- -p 옵션 : -p [호스트 포트]:[컨테이너 포트]
- localhost:8080 접속하기
🔹 워드프레스 + mysql
🔸 mysql 컨테이너 생성
- 환경 설정 확인 : mysql docker hub site
🔸 워드프레스 컨테이너 생성
- 환경 설정 확인: wordpress docker hub site
- -p 80: 호스트의 포트 하나와 컨테이너 80 포트 연결
- —link: 다른 컨테이너 ip 대신 별명으로 접근하도록 설정. [컨테이너 명]:[호스트 별칭]
🔸 사이트 접속
- wordpress 호스트포트는 지정을 안해줘 자동으로 설정되었다. docker ps 명령어로 포트를 확인하자!
- localhost:[해당포트] 에 접속
워드프레스에 접속 결과
🔸 컨테이너 로그 보기
접속이나 페이지 이동 시, 새로운 로그를 확인 할 수 있습니다.
$ docker logs -f wordpress
🔹docker 볼륨 (run -v 사용)
컨테이너는 삭제와 동시에 데이터도 같이 삭제 됩니다. mysql 같은 db는 볼륨 생성을 해서 데이터 보존이 필요합니다. 이번에는 위 예제를 약간 변경하여 볼륨을 이용해 봅시다.
🔸 mysql 컨테이너 생성
- 환경 설정 확인 : mysql docker hub site
-
-v : 호스트와 컨테이너의 디렉토리를 연결. [호스트의 공유 디렉터리]:[컨테이너의 공유 디렉터리]
- 호스트의 공유 디렉터리: 내 컴퓨터에 원하는 디렉터리로 변경해도 좋습니다. - 아래 예제를 하기 위해 해당 디렉터리를 생성 후, 진행해 주세요.
- 컨테이너의 공유 디렉터리: mysql 데이터 저장하는 기본 디렉터리가 /var/lib/mysql 입니다.
🔸 워드프레스 컨테이너 생성 (변경 없음)
- 환경 설정 확인: wordpress docker hub site
🔸 볼륨 공유 확인하기
- 내 컴퓨터 호스트의 공유 디렉터리 로 이동 후, 확인
-
컨테이너 공유 디렉터리에 파일 존재 확인
- 호스트의 공유 디렉터리와 동일함을 알 수 있다.
6. docker 기타 명령어 정리
위에서 배운 명령어 외 기타 명령어 입니다.
🔹 docker history
$ docker history [OPTIONS] [이미지 명:tag]
이미지의 히스토리를 확인할 수 있습니다.🔸 OPTIONS
옵션 | 의미 |
---|---|
–no-trunc | 출력을 자르지 않고, 히스토리 명령어를 끝까지 보여준다. |
🔸 예시
베이스 이미지의 경우 아래와 같은 history 를 확인할 수 있다.
🔹 docker cp
$ docker cp [컨테이너 이름]:[가져올 파일의 경로] [호스트 경로]
컨테이너 안에 있는 파일을 꺼낼 수 있습니다.🔸 예시
위에서 진행한 컨테이너의 hosts 파일을 가져와 봅시다.
🔹 docker inspect
$ docker inspect [이미지 또는 컨테이너 이름]
이미지 또는 컨테이너의 세부 정보를 출력합니다.🔸 예시
마무리
이번 시간에는 도커를 직접 사용해 봤습니다. 다음 시간에는 아래의 내용을 학습할 예정입니다. 😀
- docker hub에 올려보기 Dockerfile 만들기
- docker hub에 이미지 올려보기