[docker] 컨테이너가 종료되면 데이터가 손실됩니다

Docker의 대화 형 자습서FAQ 에도 불구하고 컨테이너가 종료되면 데이터가 손실됩니다.

여기에 설명 된대로 Docker를 설치했습니다 :
우분투 13.04에서 아무런 문제없이 http://docs.docker.io/en/latest/installation/ubuntulinux .

그러나 종료하면 모든 데이터가 손실됩니다.

iman@test:~$ sudo docker version
Client version: 0.6.4
Go version (client): go1.1.2
Git commit (client): 2f74b1c
Server version: 0.6.4
Git commit (server): 2f74b1c
Go version (server): go1.1.2
Last stable version: 0.6.4


iman@test:~$ sudo docker run ubuntu ping
2013/10/25 08:05:47 Unable to locate ping
iman@test:~$ sudo docker run ubuntu apt-get install ping
Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  iputils-ping
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 56.1 kB in 0s (195 kB/s)
Selecting previously unselected package iputils-ping.
(Reading database ... 7545 files and directories currently installed.)
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ...
Setting up iputils-ping (3:20101006-1ubuntu1) ...
iman@test:~$ sudo docker run ubuntu ping
2013/10/25 08:06:11 Unable to locate ping
iman@test:~$ sudo docker run ubuntu touch /home/test
iman@test:~$ sudo docker run ubuntu ls /home/test
ls: cannot access /home/test: No such file or directory

또한 동일한 결과로 대화식 세션으로 테스트했습니다. 내가 무언가를 잊었습니까?

편집 : 새로운 의사 사용자에게 중요

@으로 모하메드-noureldin 등은 실제로는 말했다 하지 종료 용기 . 매번 새 컨테이너를 만듭니다.



답변

컨테이너에 대한 변경 사항 을 커밋 한 다음 실행해야합니다. 이 시도:

sudo docker pull ubuntu

sudo docker run ubuntu apt-get install -y ping

그런 다음이 명령을 사용하여 컨테이너 ID를 얻으십시오.

sudo docker ps -l

컨테이너에 변경 사항을 커밋하십시오.

sudo docker commit <container_id> iman/ping

그런 다음 컨테이너를 실행하십시오.

sudo docker run iman/ping ping www.google.com

이 작동합니다.


답변

docker run컨테이너를 시작하는 데 사용 하면 실제로 지정한 이미지를 기반으로 새 컨테이너생성 됩니다.

여기에있는 다른 유용한 답변 외에도 기존 컨테이너가 종료 된 후에 다시 시작할 수 있으며 변경 사항이 여전히 남아 있습니다.

docker start f357e2faab77 # restart it in the background
docker attach f357e2faab77 # reattach the terminal & stdin


답변

컨테이너 데이터를 유지하는 방법은 다음과 같습니다.

  1. 도커 볼륨

  2. 도커 커밋

    a) 우분투 이미지에서 컨테이너를 만들고 bash 터미널을 실행하십시오.

       $ docker run -i -t ubuntu:14.04 /bin/bash
    

    b) 터미널 설치 컬 내부

       # apt-get update
       # apt-get install curl
    

    c) 컨테이너 터미널을 종료

       # exit
    

    d) 다음 명령을 실행하여 컨테이너 ID를 기록하십시오.

       $ docker ps -a
    

    e) 컨테이너를 새로운 이미지로 저장

       $ docker commit <container_id> new_image_name:tag_name(optional)
    

    f) 말림이 설치된 새 이미지를 볼 수 있는지 확인하십시오.

       $ docker images
    
       $ docker run -it new_image_name:tag_name bash
          # which curl
            /usr/bin/curl
    

답변

뿐만 아니라 Unferth의 대답 , 생성하는 것이 좋습니다 Dockerfile을 .

빈 디렉토리 에서 다음 내용으로 “Dockerfile”이라는 파일을 만듭니다 .

FROM ubuntu
RUN apt-get install ping
ENTRYPOINT ["ping"]

Dockerfile을 사용하여 이미지를 작성하십시오 . 16 진수 이미지 번호를 기억할 필요가 없도록 태그를 사용하겠습니다.

$ docker build -t iman/ping .

그런 다음 컨테이너 에서 이미지실행하십시오 .

$ docker run iman/ping stackoverflow.com


답변

귀하의 질문에 대해 훨씬 간단한 답변을 얻었습니다. 다음 두 명령을 실행하십시오.

sudo docker run -t -d ubuntu --name mycontainername /bin/bash
sudo docker ps -a

위의 ps -a 명령은 모든 컨테이너의 목록을 반환합니다. 이미지 이름- ‘ubuntu’를 참조하는 컨테이너 이름을 사용하십시오. docker auto는 컨테이너의 이름을 생성합니다 (예 :– 'lightlyxuyzx'옵션을 사용하지 않는 경우).

-t 및 -d 옵션은 중요하며 작성된 컨테이너는 분리되어 있으며 -t 옵션을 사용하여 아래에 제공된대로 다시 연결할 수 있습니다.

–name 옵션을 사용하면 내 경우 ‘mycontainername’으로 컨테이너 이름을 지정할 수 있습니다.

sudo docker exec -ti mycontainername bash

위의 명령은 bash 쉘을 사용하여 컨테이너에 로그인하는 데 도움이됩니다. 이 시점에서 컨테이너의 변경 사항은 docker에 의해 자동으로 저장됩니다. 예를 들어- apt-get install curl컨테이너 내부 문제없이 컨테이너를 종료하면 docker가 변경 사항을 자동으로 저장합니다.

다음 사용시에는이 컨테이너로 작업 할 때마다이 두 명령을 실행하면됩니다.

이 아래 명령은 중지 된 컨테이너를 시작합니다.

sudo docker start mycontainername

sudo docker exec -ti mycontainername bash

포트와 공유 공간이있는 또 다른 예는 다음과 같습니다.

docker run -t -d --name mycontainername -p 5000:5000 -v ~/PROJECTS/SPACE:/PROJECTSPACE 7efe2989e877 /bin/bash

내 경우 : 7efe2989e877-이전 컨테이너를 사용하여 얻은 이미지입니다.

도커 ps -a


답변

컨테이너에 데이터를 유지하려는 경우 도커 볼륨을 확인할 수 있습니다. https://docs.docker.com/engine/tutorials/dockervolumes/를 방문 하십시오 . docker documentation은 시작하기에 매우 좋은 장소입니다


답변

내 제안은 docker compose와 함께 docker를 관리하는 것입니다. 프로젝트의 모든 도커 컨테이너를 관리하는 쉬운 방법입니다. 버전을 매핑하고 다른 컨테이너를 연결하여 함께 사용할 수 있습니다.

문서는 docker의 문서보다 이해하기 매우 쉽습니다.

도커 작성 문서

베스트