Docker 시작 개인 Tips 세트

7942 단어 Docker

개요


Docker를 처음 배울 때 발견한 내용을 요약했습니다.
아래에 소개한 지령은 모두 기본적인 지령인데 Docker를 배울 때 이렇게 하면 안 됩니까?이런 의문에서 총결해 낸 것이다
공부하면서 수시로 추가하고 싶어요.

Tips


한 번만 시작하는 컨테이너 실행 후 자동 삭제


컨테이너를 만들어 보면 런할 때마다 컨테이너가 늘어나기 때문이다
그 컨테이너들을 단독으로 꺼버릴 때마다 귀찮아요.
그래서--rm 매개 변수를 추가하여 실행이 완료되면 자동으로 용기를 폐기합니다
단, 매개 변수-d와 공존할 수 없습니다
> docker run --rm -it xxxxxx-image command

run 명령으로 현재 디렉토리 참조


호스트 디렉토리를 마운트하고 현재 디렉토리를 가져오는 데 사용
명령을 실행할 때 현재 디렉터리를 가져올 수 있습니다
- Powerrshell 시(${PWD})
> docker run -v ${PWD}:/usr/src/mount_dir hoge-image:hoge-tag
  • 명령 프롬프트의 경우(%cd%)
  • > docker run -v %cd%:/usr/src/mount_dir hoge-image:hoge-tag
    

    컨테이너에 창 디렉토리를 마운트할 때


    docker 설정에서 윈도우즈 드라이브 공유 설정이 필요합니다

    PG 내(nodejs)에서 Docker file 정의 환경 변수 참조


    Dockerfile
    # HOGEHOGE_ENVという名の環境変数にtest_envを定義
    ENV HOGEHOGE_ENV test_env
    
    또는
    command
    # 値にスペースを含む場合は、ダブルクオートで括りましょう
    # 例)-e HOGEHOGE="test env"
    > docker run -d -e HOGEHOGE=text_env hogehoge-image
    

    app.js
    // process.envから参照することが可能
    process.env.HOGEHOGE_ENV
    

    운행 중인 컨테이너에 명령을 내리다

    exec를 사용하여 실행 중인 컨테이너에 명령을 내릴 수 있습니다.
    참조 -> docker exec
    > docker exec -i hogehoge-contaner /bin/bash -c "echo 'test command'"
    

    시작 실패 컨테이너 로그 보기

    > docker logs コンテナ名/ID
    

    모든 컨테이너 삭제

    > docker rm $(docker ps -aq)
    

    모든 이미지 삭제

    > docker rmi $(docker images -aq)
    

    사용하지 않은 음량 삭제

    docker volume rm $(docker volume ls -qf dangling=true)
    
    docker
    > docker volume prune
    

    태그가 none 이미지를 병합하여 삭제합니다.

    > docker rmi $(docker images -f dangling=true -q)
    

    중지된 컨테이너를 요약하고 삭제합니다.

    > docker rm $(docker ps -q -f status=exited)
    

    컨테이너에서 호스트 네트워크로 연결된 시스템 액세스(Windows)


    호스트 내부 서비스(웨어하우스, Redmine 등)를 연결하는 데 사용되는 설정 방법

    컨테이너 시간대 설정


    다음 환경 변수를 추가하여 컨테이너의 시간대를 설정합니다.
    TZ=Asia/Tokyo
    

    Windows Docker 버전 강제 제거 방법


    Windows Docker를 업데이트한 후 부팅할 수 없음(초기화되었음에도 불구하고) 마운트 해제 후에도 응답이 없으며 막다른 골목에 처했을 때
    Docker 강제 제거 방법
    다음 명령을 실행하면

  • 다음 명령을 실행하여 Docker 관련 구성 요소를 강제로 삭제합니다
    $ErrorActionPreference = "SilentlyContinue"
    
    kill -force -processname 'Docker for Windows', com.docker.db, vpnkit, com.docker.proxy, com.docker.9pdb, moby-diag-dl, dockerd
    
    try {
        ./MobyLinux.ps1 -Destroy
    } Catch {}
    
    $service = Get-WmiObject -Class Win32_Service -Filter "Name='com.docker.service'"
    if ($service) { $service.StopService() }
    if ($service) { $service.Delete() }
    Start-Sleep -s 5
    Remove-Item -Recurse -Force "~/AppData/Local/Docker"
    Remove-Item -Recurse -Force "~/AppData/Roaming/Docker"
    if (Test-Path "C:\ProgramData\Docker") { takeown.exe /F "C:\ProgramData\Docker" /R /A /D Y }
    if (Test-Path "C:\ProgramData\Docker") { icacls "C:\ProgramData\Docker\" /T /C /grant Administrators:F }
    Remove-Item -Recurse -Force "C:\ProgramData\Docker"
    Remove-Item -Recurse -Force "C:\Program Files\Docker"
    Remove-Item -Recurse -Force "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Docker"
    Remove-Item -Force "C:\Users\Public\Desktop\Docker for Windows.lnk"
    Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath}  | ? { $_.DisplayName -eq "Docker" } | Remove-Item -Recurse -Force
    Get-ChildItem HKLM:\software\classes\installer\products | % {Get-ItemProperty $_.pspath} | ? { $_.ProductName -eq "Docker" } | Remove-Item -Recurse -Force
    Get-Item 'HKLM:\software\Docker Inc.' | Remove-Item -Recurse -Force
    Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\Run -name "Docker for Windows" | Remove-Item -Recurse -Force
    #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.ToString().Contains("Docker for Windows.exe") } | Remove-Item -Recurse -Force $_.PSPath
    #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | Where-Object { $(Get-ItemPropertyValue $_) -Contains "Docker" }
    
  • 프로그램 추가 및 제거에 Docker for Windows를 등록하여 CCleaner 등의 도구로 삭제
  • 참조: https://success.docker.com/KBase/How_to_completely_remove_Docker

    이전 Docker 버전 다운로드


    아래 링크에서 다운로드
    or
    chocolatey에서 설치
    https://chocolatey.org/packages/docker-for-windows

    locale 구성


    Amazonlinux 컨테이너에 localeLANG=ja_JP.UTF-8이 설정되어 있지만 반영되지 않습니다.
    다음 설정을 통해locale를 정확하게 식별합니다
    RUN localedef -v -c -i ja_JP -f UTF-8 ja_JP.UTF-8; echo "";
    
    env LANG=ja_JP.UTF-8
    RUN rm -f /etc/localtime
    RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    
    참조: https://qiita.com/yuki2006/items/6cea8c352e38f047b52a#comment-8e863c71962008035d0d

    Docker의 기존 네트워크에 연결할 때


    default 항목에 external 옵션을 지정하면 기존 네트워크에 연결할 수 있습니다
    docker-compose.yml
    networks: 
      default:
        external: 
          name: xxxxx_xxxxxxxx
    

    컨테이너 및 호스트 파일의 소유자


    용기의 id/gid와 호스트의 id/gid가 같으면 같은 사용자로 간주합니다
    참조: https://unskilled.site/docker%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%86%85%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A8%E3%81%AE%E9%96%A2%E4%BF%82/

    Windows Docker를 사용하여 컨테이너 내에서 Docker 이미지 만들기

  • dind Docker 이미지 사용

  • 컨테이너에 호스트의 Docker sock을 설치하여 사용
    docker run에서만 sock을 마운트합니다. (Windows Docker도 마찬가지입니다.)
    > docker run -v /var/run/docker.sock:/var/run/docker.sock xxx
    
    docker-compose의 경우 미리 설정해야 합니다$Env:COMPOSE_CONVERT_WINDOWS_PATHS=1
  • 최대 시스템 덮어쓰기


    컨테이너에서 시스템의 상한 값을 덮어쓰고 실행하기 위해서 ulimits 파라미터를 지정해야 합니다.
    참고로 용기 내에서ulimit 명령을 실행해도 반영되지 않기 때문에 상술한 매개 변수는 필수적이다
    예를 들어 파일 열기 상한선을 높이는 등
    ※ 호스트의 시스템 상한치를 같은 값으로 미리 설정해야 합니다
    docker run:
    http://docs.docker.jp/engine/reference/commandline/run.html#ulimits-ulimit
    docker-compose:
    http://docs.docker.jp/compose/compose-file.html#ulimits

    좋은 웹페이지 즐겨찾기