[Linux] Docker

:)·2024년 6월 24일
0

Linux

목록 보기
16/17
post-thumbnail

개념

리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트

  • container =emulator

명령어

  • 포트 포워딩 상태로(백그라운드) 최초 실행 후 진입
    docker run -d -p 80:80 --name sevas_web ID
    docker exec -it sevas_web /bin/bash
    • 최초 시작 전 반드시 로그인 docker login
    • 환경 확인 docker system info
    • 저장소 확인 docker system df
    • 최초 이미지 불러오기
      1. 도커 이미지 찾기
        -Docker search [이미지명]
        docker search oraclelinux
      2. 도커 이미지 가져오기
        -Docker pull [이미지명][기본 latest]
        웹에서 직접들어가서 tag까지 가져오기 - docker pull oraclelinux:8
      3. 도커 이미지 확인
        -Docker image ls
      4. 도커 이미지 삭제
        -Docker image rm [IMAGE_ID]
    • Container
      1. 실행 run, attach ,exec
        1. run : 새로운 컨테이너를 생성해 실행하는 명령어 (보통 최초한번만 실행-명령이 끝나면 종료)

          1. docker run --name [컨테이너 이름 지정][Repository]:[TAG] → 포어그라운드= 웹페이지 접속x / ctrl +c만 가능
          • 명령어

            옵션 설명
            -i
            --interactive 컨테이너의 표준 입력(stdin)을 활성화. (주로 -it 함께 사용)
            -t
            --tty tty (가상 터미널)을 할당, 리눅스에 키보드를 통해 표준 입력(stdin)을 전달할 수 있게한다. (주로 -it 함께 사용)
            --name 컨테이너 이름을 지정.
            -d
            --detach 컨테이너를 백그라운드로 실행.
            --rm docker run 명령어가 끝나면, 컨테이너 자동 삭제.
            -p
            --publish 호스트와 컨테이너의 포트를 연결 (포트포워딩).
            -p <호스트 포트>:<컨테이너 포트>
            ex) -p 80:8888 → 호스트에 8888로 접속하면, 컨테이너 내부의 80포트로 자동 접속.
            -v
            --volume 호스트와 컨테이너의 디렉토리 연결(마운트)
            -v <호스트 절대경로>:<컨테이너 절대경로>
            ex) -v /Users:/usr. → 컨테이너 /usr에 저장하는 파일은 호스트의 /Users 디렉토리에 저장.
            --restart 컨테이너 종료시, 재시작 정책 설정
            --restart="always" 항상 재시작
            --restart="on-failure" 종료 스테이터스가 0이 아닐 때 재시작

            --privileged 컨테이너 안에서 호스트의 리눅스 커널 기능을 모두 사용

            • --rm 옵션과 --restart 옵션은 동시 사용 x
            • 상태 Exited 비활성화 / UP 활성화
          • 실습 확인: docker container ps -a

            docker run --name sevas_web nginx:latest → 포어그라운드 ctrl+p,ctrl+q 안됨 , ctrl+c (EXIT상태됨)
            docker run -it --name sevas2_web nginx:latest → 포어그라운드+가상터미널할당 ( -it ) ctrl+pq 로 나가서 유지

            docker run -d --name sevas3_web nginx:latest → 백그라운드실행
            docker run -d --name sevas4_web -p 80:80 nginx:latest → 백그라운드실행 + DNAT설정 (웹페이지 출력됨)

        2. exec : 실행 중인 컨테이너에 명령어를 전달(외부 -> 내부)

          1. 진입해서 명령 실행 docker exec -it
          2. 명령만 실행 docker exec
          3. exec로 실행한 도커(Exited 상태) 실행 : docker start sevas_web uname -a
        3. attach : 실행 중인 컨테이너에 직접 들어가 명령어를 실행 (내부 접근) → 로그 내용 볼 때 사용, 잘 안씀

          1. docker attach
            docker attach sevas_web

          -it (접속유지)
          -d: 백그라운드

          연결 종료 후 나가기: ctrl +c
          연결 유지한 채 나가기: ctrl +pq

      2. 확인
        1. 동작 중인 컨테이너: docker container ls
        2. 시작한 컨테이너: docker container ps -a
        3. 컨테이너 ID: docker container ps -a -q
      • 보통 최초 실행 시 run 사용 docker exec -it /bin/bash로 들어가서 작업
      1. 멈추기 docker stop [container ID] / 모두 멈추기 docker stop $(docker ps -a -q)

      2. 지우기 docker rm [container ID] / 모두 지우기 docker rm $(docker ps -a -q)

      3. 도커 내부에서 명령어 사용

        apt update
        apt install bet-tools
        apt install vim
        index 찾기 find / -name index.html -> /usr/share/ngnix/html

    • image
      • 호출 docker image ls
      • 저장 docker image save -o export.tar nginx:latest
        docker image save -o export.tar [IMAGE ID]
      • 로드 docker image load -i export.tar
      • 빌드 docker container commit -a "계정명" web_01 헤드:버전
        docker container commit -a "sevas2" web_01 web_01:1.0
      • 삭제 docker image rm [이름]
    • docker hub이용
      1. 회원가입
      2. create repositories
      3. docker image tag 이름:버전 계정/이름:버전 -> 태그 부여
        ex) docker image tag sevas_web:1.0 sevas2/sevas_web:1.0
      4. docker push sevas2/sevas_web:1.0
      • repositories의 이름과 허브의 repositories이름이 같아야 함
profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글