프로그래밍/Docker

[Docker] Docker Desktop에서 Docker 다루기

Victory_HA 2022. 3. 31. 22:36

Windows10 에 Docker Desktop 설치하기

nginx이미지 파일을 컨테이너로 띄우기

  • powershell에서 docker images 명령어로 도커 이미지 확인

  • 이미지가 확인 되었다면 docker run -p 4567:80 -d nginx:latest 명령어로 컨테이너를 생성합니다.

  • 도커 컨테이너 아이디를 다음 명령어에 추가하여 컨테이너에 접속합니다. docker exec -it [ContainerID] /bin/bash
    • 정확히 말하면 exec명령어를 사용하여 해당 컨테이너의 bash프로그램을 실행합니다.

nginx의 index.html 내용 확인

  • nginx 컨테이너 내부에 존재하는 html을 확인해봅시다.
  • 웹브라우저 창에서 localhost:4567주소로 접속했을 때, html의 내용이 웹 표시됩니다.
    • html 경로는 Container에서 /usr/share/nginx/html/index.html 입니다.
    • index.html의 내용이 웹브라이저 창에 표시되는 것입니다.

index.html 내용 수정하기

  • 수정하기에 앞서 vim을 설치해야합니다.
    • vim은 txt편집기라고 생각하시면 됩니다.

vim 설치하기

  • #apt-get update #apt-get upgrade #apt-get install vim
  • vi /usr/share/nginx/html/index.html명령어를 입력하면 index.html파일의 내용을 수정할 수 있습니다.

수정 후 index.html

  • html에 test0822 텍스트를 추가했습니다.

Docker image 관리하기

Docker hub 저장소 생성하기

  • docker hub는 도커 이미지를 관리하는 컨테이너 이미지 라이브러리 입니다.
  • docker hub사용하기 : https://galid1.tistory.com/324Container를 Docker Image로 저장하기

현재 Container를 Image로 만들기

  • host에서 'docker commit [ContainerID] [저장할 이미지 이름]' 입력하여 현재 내용 수정 한 Container를 이미지로 저장 합니다.
  • docker 이미지 리스트에서 저장 확인 할 수 있습니다.

  • docker hub에서 repository를 생성합니다.

Docker Image를 Docker hub에 푸쉬하기

  • host에서 docker login 입력하여 도커 hub에 접속합니다.
    • ID, Password 입력합니다.

Docker 이름, 태그 변경하기

  • docker hub에 push하기에 앞서 이미지는 repository,tag가 존재해야합니다.
  • docker tag [이미지 ID] [저장소이름:태그] 명령어로 이미지를 저장합니다.
    • Docker Hub에 생성한 ID는 administrator이고, 생성한 Repository 이름이 test_repo라면,
    • docker tag [이미지 ID] administrator/test_repo:1.0으로 저장합니다.
    • 여기서 tag는 구분자 혹은 버전 이라고 생각하시면 됩니다.

  • docker hub의 test_repo에 1.0이란 태그로 이미지를 저장했습니다.

Docker 개인 저장소 생성

  • 개인 저장소도 docker image가 존재한다
  • 이미지 다운로드 : docker pull registry:latest
  • 도커 실행 : docker run -d -p 5000:5000 --name local_repo -v D:\docker_repo:/tmp/registry registry

개인저장소에 이미지 저장하기

  • 이미지 tag 설정 : docker tag [현재 이미지의 repository:tag] [DOCKER_REGISTRY_IP:DOCKER_REGISTRY_PORT]/[tag]
    • docker tag 0822testfile:0822test localhost:5000/0822testfile:1.0 입력
  • 이미지 push
    • docker push localhost:5000/0822testfile:0822test 입력
  • 이미지 pull
    • docker pull localhost:5000/0822testfile:0822test개인 저장소의 image list 확인은 어떻게?
  • 보통 'Docker registry web'과 Docker에서 지원하는 'RestApi'를 사용한다.
  • API(Application Programming Interface)란
  • 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것
  • REST API의 정의
    • REST 기반으로 서비스 API를 구현한 것
    • 최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글 맵, 공공 데이터 등), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.
  • 출처 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
  • 참고 : https://docs.docker.com/registry/spec/api/

Docker 컨테이너 서로 연결하기

  • 도커 1.9.0 버전부터 네트워크를 생성할 수 있는 기능이 정식으로 추가되었습니다.
  • 네트워크를 생성하고 컨테이너를 연결시키면 해당 네트워크 안에 속한 컨테이너끼리는 서로 접속할 수 있습니다.
  • 추후 --link 옵션은 사라질 예정입니다. (https://docs.docker.com/network/links/)
  1. 먼저 docker network create 명령으로 hello-network를 생성합니다.$ sudo docker network create hello-network
  2. DB 컨테이너를 생성하면서 hello-network에 연결합니다.$ sudo docker run --name db -d --network hello-network mongo
  3. web 컨테이너를 생성하면서 hello-network에 연결합니다.$ sudo docker run --name web -d -p 80:80 --network hello-network nginx
  4. web 컨테이너에서 Bash 셸을 실행한 뒤에 ping을 실행해봅니다.$ sudo docker exec -it web bash
    root@ed384f006421:/# ping db PING db (172.18.0.2): 56 data bytes 64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.023 ms 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.061 ms 64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.058 ms

Docker 볼륨

Dockerfile로 이미지 생성하기

  • VisualStudioCode Open합니다.
  • 폴더를 새로 생성 후 Dockerfile을 생성합니다.
  • 아래 내용을 Dockerfile에 입력합니다.
# 베이스 이미지를 명시해준다.
From alpine

# 추가로 필요한 파일을 받는다.
# Run command

# 컨테이너 시작시 실행 될 명령어를 명시해준다. 
cmd ["echo","hello!"]
  • VisualStudioCode의 상단에 'Terminal'을 열고 아래 명령어 입력합니다.
  • > docker build ./ 혹은 > docker build -t 저장소(프로젝트이름):태그 ./
  • 마지막에 Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them메시지가 보인다면 빌드에 성공한 것 입니다.
  • docker images명령어로 리스트 확인 합니다.
  • Repository, tag가 둘 다 'none'인 이미지 혹은 내가 태깅한 레포지토리:태그 로 이미지가 보입니다.
    • none으로 확인되는 경우 해당 이미지에 태깅을 해줍니다.
    docker tag [imageID] baseImage:1.0
  • docker images명령어로 리스트 확인하면 태깅 된 이미지를 확인 할 수 있습니다.
  • docker run [레포지토리:태그] 명령어를 입력하여 컨테이너를 실행합니다.
  • 'hello' 문장이 표시되면서 컨테이너가 실행되면 베이스이미지 생성 성공입니다.
  • 참고 : https://joke00.tistory.com/306

도커안에서 도커 실행하기