Docker 컨테이너 일반 작업

부팅 컨테이너
시작 용기는 두 가지 방식이 있는데, 하나는 거울을 기반으로 새 용기를 만들고 시작하는 것이고, 다른 하나는 종료 상태 (stopped) 의 용기를 다시 시작하는 것이다.Docker의 컨테이너가 너무 가벼워서 사용자가 언제든지 컨테이너를 삭제하고 새로 만들 때가 많습니다.
새로 만들기 및 시작
예를 들어 다음 명령은 "Hello World"를 출력한 다음 용기를 종료합니다.
$ docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world

이것은 로컬에서 직접 실행하는/bin/echo'hello world'와 거의 다를 것이 없다.
다음 명령은 사용자가 상호작용을 할 수 있도록 bash 단말기를 시작합니다.
$ docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#

그 중에서, - t 옵션은 Docker가 위조 단말기 (pseudo-tty) 를 분배하여 용기의 표준 입력에 귀속시키고, - i는 용기의 표준 입력을 열어 놓는다
docker run을 사용하여 컨테이너를 만들 때 Docker가 백그라운드에서 실행하는 표준 작업은 다음과 같습니다.
  • 로컬에 지정된 미러가 있는지 확인하고 존재하지 않으면 공유 창고에서
  • 다운로드
  • 미러링을 이용한 컨테이너 생성 및 시작
  • 은 파일 시스템을 할당하고 읽기 전용 미러링 계층 외부에 읽기 및 쓰기 계층
  • 을 마운트합니다.
  • 숙주 호스트가 설정한 브리지 인터페이스에서 가상 인터페이스를 연결하여 용기에서
  • 주소 탱크에서 ip 주소를 용기에 설정
  • 사용자 지정 애플리케이션 실행
  • 실행 완료 후 용기가 종료됨
  • 종료된 용기를 시작하면 docker container start 명령을 사용하여 종료된 용기를 직접 실행할 수 있습니다.
    수호 상태 실행
    더 많은 경우, 명령을 실행한 결과를 현재 숙박 호스트에 출력하지 않고, Docker를 백엔드에서 실행해야 한다.이때, - d 파라미터를 추가하여 실현할 수 있다.
    $ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
    cb30b87566d0550ec5f1232d148c5ffed6546c347889e58a6405579f2af73f2a

    - d 파라미터를 사용하여 시작하면 유일한 id를 되돌려줍니다.결과를 docker logs [container ID or NAMES]로 볼 수 있습니다.-d 매개 변수를 사용하지 않으면출력된 결과(stdOUT)는 숙박 호스트에 인쇄됩니다.
    docker container ls 명령을 사용하여 컨테이너 정보를 봅니다.
    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    cb30b87566d0        ubuntu              "/bin/sh -c 'while t…"   2 minutes ago       Up 2 minutes                            goofy_mcclintock

    용기의 출력 정보를 얻으려면 docker container logs 명령을 사용하십시오.
    $ docker container logs goofy_mcclintock
    hello world
    hello world
    hello world
    ......

    주: 용기가 오래 실행될지 여부는 dockerrun이 지정한 명령과 관련이 있으며, - d 파라미터와는 무관합니다.
    컨테이너 종료
    실행 중인 용기를 종료하려면 docker container stop을 사용하십시오.형식: docker container stop [ ] CONTAINER [CONTAINER...]또한 Docker 컨테이너에 지정된 적용이 종료되면 컨테이너도 자동으로 종료됩니다.예를 들어 터미널 용기만 시작하고 사용자가 exit 명령이나 Ctrl + d를 통해 터미널을 종료하면 생성된 용기가 종료됩니다.
    종료 상태의 컨테이너는 docker container ls -a 명령으로 볼 수 있습니다.예컨대
    $ docker container stop goofy_mcclintock
    goofy_mcclintock
    
    $ docker container ls -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES
    cb30b87566d0        ubuntu              "/bin/sh -c 'while t…"   20 minutes ago      Exited (137) 23 seconds ago                        goofy_mcclintock

    docker container start 명령을 통해 종료 상태의 용기를 시작합니다.docker container restart 명령을 통해 실행 중인 용기를 종료한 다음 다시 시작합니다.
    용기에 들어간다
    - d 파라미터를 사용할 때 용기가 시작되면 백엔드에 들어갑니다.docker exec 명령이나 docker attach 명령을 사용하여 용기에 들어가서 작업합니다. docker exec 명령을 사용하는 것을 추천합니다. 이유는 아래에 설명됩니다.
    exec 명령-i -t 매개 변수 docker exec 뒤에 여러 개의 매개 변수를 따라갈 수 있습니다. 이것은 주로 -i -t 매개 변수를 설명합니다.- i 파라미터만 사용할 때, 위조 단말기가 분배되지 않았기 때문에, 인터페이스에 우리가 익숙한 Linux 명령 알림부호가 없지만, 명령 실행 결과는 여전히 되돌아갈 수 있습니다.-i -t 매개 변수를 함께 사용할 때 익숙한 Linux 명령 프롬프트를 볼 수 있습니다.
    $ docker run --name webserver -d -p 80:80 nginx
    1eec473ab0a32ad938e06644d4b15046a708bbf5a8e22f0f9e4ebf4918b8df15
    
    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    1eec473ab0a3        nginx               "nginx -g 'daemon of…"   22 seconds ago      Up 22 seconds       0.0.0.0:80->80/tcp   webserver
    
    $ docker exec -it webserver bash
    root@1eec473ab0a3:/# echo '

    Hello, Docker!

    ' > /usr/share/nginx/html/index.html root@1eec473ab0a3:/# exit

    # 컨테이너 파일이 수정되었으므로 docker diff 명령을 통해 변경 사항을 확인할 수 있습니다.
    이 stdin에서 exit를 사용하면 용기가 멈추지 않습니다.더 많은 매개 변수 설명은 docker exec --help를 사용하여 보십시오.
    attach 명령 docker attach는 Docker 자체 명령입니다.다음 예제에서는 명령을 사용하는 방법을 보여 줍니다.
    $ docker attach webserver

    주의: 이 stdin에서 exit를 사용하면 용기가 정지됩니다.
    컨테이너 로그 보기
    docker logs 명령을 사용하면 컨테이너의 로그를 볼 수 있습니다.
    명령 형식:
    $ docker logs [OPTIONS] CONTAINER
      Options:
            --details               
        -f, --follow               
            --since string        timestamp     ,     , 42m( 42  )
            --tail string                ,    all
        -t, --timestamps          
            --until string        timestamp     ,     , 42m( 42  )

    예:
    #          ,     100 :
    $ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
    
    #    30     :
    $ docker logs --since 30m CONTAINER_ID
    
    #          :
    $ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
    
    #        :
    $ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
    

    컨테이너를 미러로 저장
    용기를 실행할 때 (볼륨을 사용하지 않으면), 우리가 한 파일 수정은 용기 저장소에 기록됩니다.Docker는 용기의 저장층을 거울로 저장할 수 있는 docker commit 명령을 제공합니다.다시 말하면 기존의 거울을 토대로 용기의 저장층을 겹쳐 새로운 거울을 구성하는 것이다.앞으로 우리가 이 새 렌즈를 실행할 때, 원래 용기의 마지막 파일 변화를 가지게 될 것이다.
    docker commit의 구문 형식은 다음과 같습니다.
    docker commit [  ]  [[:]]

    다음 명령을 사용하여 컨테이너를 미러로 저장할 수 있습니다.
    $ docker commit --author "QiangSH" --message "       " webserver nginx:v2
    sha256:749af9532d166d2cd5f88025a79e0e39658375761eef0200925cb82093b4514f
    
    $ docker image ls -a
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               v2                  749af9532d16        48 seconds ago      109MB
    nginx               latest              c82521676580        4 weeks ago         109MB

    여기서 --author는 지정된 수정의 작성자이고 --message는 이번 수정의 내용을 기록합니다.이것은git버전 제어와 비슷하지만, 이 정보는 생략하고 비워 둘 수 있습니다.
    docker commit
  • 은 대량의 무관한 내용이 추가될 수 있으며, 조심하지 않아 치우면 거울이 매우 비대해진다.
  • 거울을 만드는 사람을 제외하고는 어떤 명령을 집행했는지, 어떻게 생성했는지 알 수 없다.
  • 변경 사항의 결과는 현재 레이어에 표시, 추가, 수정을 하는 것일 뿐 이전 레이어는 변경되지 않으며 각 변경 사항에 따라 미러가 한 번 더 비대해지고 삭제된 이전 레이어의 물건은
  • 을 잃어버리지 않습니다.
    컨테이너 삭제
    종료된 컨테이너를 삭제합니다. 형식은 docker container rm [ ] CONTAINER [CONTAINER...]입니다.
    $ docker container rm awesome_payne
    awesome_payne

    실행 중인 용기를 삭제하려면 - f 파라미터를 추가할 수 있습니다.Docker는 SIGKILL 신호를 컨테이너에 보냅니다.
    종료 상태의 모든 용기를 청소하려면 docker container ls-a 명령을 사용하면 종료 상태를 포함한 모든 용기를 볼 수 있습니다. 수량이 너무 많으면 하나하나 삭제하는 것이 번거로울 수 있습니다. 다음 명령으로 종료 상태의 용기를 모두 청소할 수 있습니다.
    $ docker container prune
    WARNING! This will remove all stopped containers.
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    545f8f6d19286efae28307d06ed1acc034d07f109e907c01892471a6f89e772d
    cb30b87566d0550ec5f1232d148c5ffed6546c347889e58a6405579f2af73f2a
    ......

    컨테이너 내보내기 및 가져오기
    컨테이너 내보내기 로컬 컨테이너를 내보내려면 docker export 명령을 사용할 수 있습니다.
    $ docker container ls -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    16168d4b66b1        ubuntu              "/bin/bash"         18 minutes ago      Up 18 minutes                           happy_bardeen
    
    $ docker export 16168d4b66b1 > ubuntu.tar

    이렇게 하면 컨테이너를 로컬 파일로 내보냅니다.
    컨테이너 스냅샷을 가져오려면 docker import을 사용하여 컨테이너 스냅샷 파일에서 거울로 가져올 수 있습니다. 예를 들어
    $  cat ubuntu.tar | docker import - test/ubuntu:v1.0
    sha256:91b174fec9ed55d7ebc3d2556499713705f40713458e8594efa114f261d7369a
    
    $ docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    test/ubuntu         v1.0                91b174fec9ed        10 seconds ago      69.8MB
    ubuntu              latest              735f80812f90        3 weeks ago         83.5MB

    또한 URL 또는 디렉토리를 지정하여 가져올 수도 있습니다(예: $ docker import http://example.com/exampleimage.tgz example/imagerepo).
    주: 사용자는 docker load를 사용하여 이미지 저장 파일을 로컬 이미지 라이브러리로 가져올 수도 있고, docker import을 사용하여 용기 스냅샷을 로컬 이미지 라이브러리로 가져올 수도 있습니다.이러한 차이점은 컨테이너 스냅샷 파일은 모든 히스토리와 메타데이터 정보(즉 컨테이너 당시의 스냅샷 상태만 저장)를 버리고 미러 저장 파일은 전체 기록을 저장하며 크기가 커진다는 것입니다.또한 컨테이너 스냅샷 파일에서 가져올 때 탭과 같은 메타데이터 정보를 다시 지정할 수 있습니다.
    데이터 공유와 지속화
    참조:https://docs.docker.com/storage/bind-mounts/번역:https://blog.csdn.net/kikajack/article/details/79474286
    개인 창고 이미지 관리
    개인 창고를 만들면 도커 태그를 사용해서 창고로 전송할 수 있습니다.예를 들어 사유 창고 주소는 127.0.0.1:5000이다.먼저 이 컴퓨터에서 이미 있는 거울을 보십시오.
    $ docker image ls
    REPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ubuntu                            latest              ba5877dc9bec        6 weeks ago         192.7 MB

    docker tag를 사용하여 ubuntu: latest 이 거울을 127.0.0.1: 5000/ubuntu: latest로 표시합니다.형식은 docker tag IMAGE[:TAG] [REGISTRY HOST[:REGISTRY PORT]/] REPOSITORY[:TAG]
    $ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
    $ docker image ls
    REPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ubuntu                            latest              ba5877dc9bec        6 weeks ago         192.7 MB
    127.0.0.1:5000/ubuntu:latest      latest              ba5877dc9bec        6 weeks ago         192.7 MB

    docker push를 사용하여 표시된 이미지를 업로드합니다.
    $ docker push 127.0.0.1:5000/ubuntu:latest
    The push refers to repository [127.0.0.1:5000/ubuntu]
    373a30c24545: Pushed
    a9148f5200b0: Pushed
    cdd3de0940ab: Pushedfc56279bbb33: Pushed
    b38367233d37: Pushed
    2aebd096e0e2: Pushed
    latest: digest: sha256:fe4277621f10b5026266932ddf760f5a756d2facd505a94d2da12f4f52f71f5a size: 1568

    curl로 창고의 거울을 보십시오.
    $ curl 127.0.0.1:5000/v2/_catalog
    {"repositories":["ubuntu"]}

    여기에서 {"repositories": ["ubuntu"]}를 볼 수 있습니다. 이것은 거울이 성공적으로 업로드되었음을 나타냅니다.
    이미 있는 거울을 삭제한 다음 개인 창고에서 이 거울을 다운로드해 보십시오.
    $ docker image rm 127.0.0.1:5000/ubuntu:latest
    
    $ docker pull 127.0.0.1:5000/ubuntu:latest
    Pulling repository 127.0.0.1:5000/ubuntu:latest
    ba5877dc9bec: Download complete
    511136ea3c5a: Download complete
    9bad880da3d2: Download complete
    25f11f5fb0cb: Download complete
    ebc34468f71d: Download complete
    2318d26665ef: Download complete
    
    $ docker image ls
    REPOSITORY                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    127.0.0.1:5000/ubuntu:latest       latest              ba5877dc9bec        6 weeks ago         192.7 MB

    docker 태그 삭제
    REPOSITORY                                   TAG                 IMAGE ID            CREATED              SIZE
    hub.doge.com/ubuntu                      latest              9c2500c524c6        About a minute ago   199.9 MB
    hub.doge.net/ubuntu                      latest              9c2500c524c6        About a minute ago   199.9 MB

    예를 들어 이런 거울 id는 똑같다. 나는 그중의 하나만 남기고hub를 삭제하고 싶다.doge.com/ubuntu
    docker rmi -f hub.doge.com/ubuntu:latest

    주의사항은 127.0.0.1:5000을 창고 주소로 사용하고 싶지 않다면, 예를 들어 본 네트워크의 다른 호스트도 거울을 개인 창고로 보낼 수 있도록 합니다.너는 예를 들어 192.168.199.100:5000과 같은 인터넷 주소를 사유창고 주소로 해야 한다. 이때 너는 거울을 성공적으로 전송할 수 없다는 것을 발견할 수 있다.
    Docker에서 기본적으로 HTTPS 이외의 방법으로 미러를 밀어 넣을 수 없기 때문입니다.Docker의 설정 옵션을 통해 이 제한을 취소할 수 있습니다

    좋은 웹페이지 즐겨찾기