[도커] - 컨테이너와 이미지 활용

yeom yaloo·2024년 1월 31일
0

FISA

목록 보기
50/61
post-thumbnail

도커 사용

인프라 개발자가 개발도 열심히 해야 하는 이유는 요즘에 코드로 파일을 구성하기 때문이다.

[도커 로그인]

1. 로그인하기

docker login
username: 본인 도커허브 아이디
password: 보인 도커허브 비밀번호

[도커 컨테이너 생성, 실행 정지, 삭제]

1. 도커에서의 검색

  • docker search openjdk
  • docker ps
    • 현재 실행중인 컨테이너 목록 출력
  • docker ps -a
    • 실행중이지 않은 컨테이너 목록 모두 출력
  • docker images
    • 도커 내부에 깔린 이미지 목록 출력

2. 도커에서의 삭제

  • 컨테이너 삭제
    • docker rm 컨테이너명
  • 이미지 삭제
    • docker rmi 이미지명

3. 도커에서의 컨테이너 생성

  • docker run 컨테이너 생성
  • 8080 톰캣 포트에 8080으로 매핑하는 것을 의미 (이미지 기본 포트 번호:매핑포트번호)
  • --name: 컨테이너 이름 부여
  • -p: 포트 번호

3-1. curl 명령어로 해당 서버가 잘 돌아가나 확인

  • nginx랑 tomcat에 매핑된 포트 번호로 curl 요청 날리면 잘 나오는지 확인이 가능하다.

3-2. host에서 docker 내부로 파일 옮기기

  • 호스트 내부에 만든 index.html 파일을 이동 없이 docker 내부의 nginx의 index.html을 덮어 쓴다.

4. 이미지 생성

docker commit mynginx newmynginx

  • 파일 작성 없이 commit만 하는 작업

4-1. 버전 설정 관련(TAG)

  • docker commit mynginx newmynginx
  • docker commit mynginx newmynginx:1.0

4-2 레포지토리

  • 이미지를 보관하기 위한 서비스
  • 이미지를 배포하는 장소

4-3. commit

username@servername:~$ docker push 도커허브아이디/newmynginx:1.0
The push refers to repository [docker.io/도커허브아이디/newmynginx]
**An image does not exist locally with the tag: 도커허브아이디/newmynginx**
  • 오류 해결을 위한 작업 진행
  • docker image tag newmynginx:1.0 도커허브아이디/newmynginx:1.0

[번외로 nginx에 관해서..]

1. nginx의 특징

  • index.html 기본 제공
  • 이를 사용자들이 수정해서 사용하면 된다.
  • index.html 특징

2. index.html 편집

2-1. guest os에서 container 안에 명령어로 bash 없이 바로 편집하는 방법

  • docker exec mynginx sh -c 'ls /usr/share/nginx/html': 리스트 확인
  • docker exec mynginx sh -c 'cat /usr/share/nginx/html/index.html'

2-2. 실제 컨테이너에 접속해서 bash를 이용해서 편집하는 방법

  • docker exec -it <컨테이너명 혹은 컨테이너아이디> bash: bash 명령어로 해당 컨테이너 편집
  • cd /usr/share/nginx/html: 해당 index.html에 있는 곳까지
  • vi index.html: 해당 파일 수정

3. index.html 수정

  • 수정한 경우라면 tomcat:9.0 이미지는 모두 동일하지만
  • nginx의 경우엔 index.html을 수정했기 때문에 모두 다르다.

4. guest os 확인

  • curl localhost:80
  • curl 명령어를 날려서 확인

5. host os 확인

  • 포트 포워딩을 진행해주어야 사용이 가능하다.

  • 웹 환경에서도 화면으로 확인이 가능해야 한다.

[host에서 container로 파일 복사하기]

1. 호스트란?

  • 컨테이너 os 관점에서의 host를 의미한다.
  • nginx가 설치된 컨테이너는 guest os를 의미한다.
  • nginx 컨테이너가 설치된 os - ubuntu가 host이다.

1-1. 그럼 window 관점에서는?

  • host: window
  • guest: ubuntu

2. 컨테이너 파일 확인

해당 컨테이너의 파일 확인
docker exec mynginx sh -c 'ls /usr/share/nginx/html'

3. 호스트에서 컨테이너로 파일 복사하기

  • docker cp woori.html mynginx:/usr/share/nginx/html
  • 해당 컨테이너에 직접적으로 접속하지 않아도 호스트에 있던 파일을 컨테이너로 복사하는 것을 확인할 수 있다.

4. 동기화?

  • 호스트에서 해당 woori.html 파일을 수정한다면 컨테이너에 복사한 파일이 동기화 될까?
    • 결론은 동기화가 불가이다.
  • 공유 자원을 호스트와 컨테이너가 같이 사용할 때 동기화 해줘야 하는 경우가 생긴다.
    • 마운트를 적용하면 이를 해결할 수 있다.

[동기화, 마운트]

위의 작업에서 host 파일을 container로 옮기는 작업을 진행했다.
일반적으로는 이 작업 후에 호스트 파일을 수정한다고 컨테이너 파일이 같이 수정되지 않는다.
이때 가끔은 공유 자원처럼 호스트에 있는 파일 수정에 컨테이너 파일도 같이 수정이 되어야 하는 경우가 있다. 이를 동기화라하고 이 작업을 위해서는 마운트라는 기술을 살펴보도록 하자

1. 마운트

[이미지 history]

1. --no-trunc

  • 해당 메시지 출력이 잘리지 않고 모두 출력할 수 있게 --no-trunc로 옵션 설정을 진행
profile
즐겁고 괴로운 개발😎

0개의 댓글