[linux] Minikube에서 로컬 도커 이미지를 사용하는 방법은 무엇입니까?
함께 사용하려는 도커 이미지가 여러 개 있습니다. minikube
. 먼저 로컬 이미지를 직접 사용하는 대신 동일한 이미지를 업로드 한 다음 다운로드하지 않아도됩니다. 어떻게해야합니까?
내가 시도한 것들 :
1. 나는이 명령을 실행 하려고 시도했다.
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
출력 :
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
그것은 단지 어떤 상태에 머물러 있지만 준비 상태에 도달하지는 않습니다.
2. 레지스트리를 만든 다음 이미지를 넣으려고했지만 작동하지 않습니다. 잘못 수행했을 수도 있지만이 작업을 수행하기위한 적절한 지침을 찾을 수 없습니다.
로컬 kubernetes 인스턴스에서 로컬 도커 이미지 사용 지침을 제공하십시오.
운영체제 : ubuntu 16.04
Docker : Docker 버전 1.13.1, 빌드 092cba3
Kubernetes :
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/amd64"}
누군가 docker-compose를 사용하여 솔루션을 얻는 데 도움을 줄 수 있다면 정말 좋을 것입니다. 감사.
편집하다 :
로드 된 이미지 eval $(minikube docker-env
:
REPOSITORY TAG IMAGE ID CREATED SIZE
fluxcapacitor/jupyterhub latest e5175fb26522 4 weeks ago 9.59 GB
fluxcapacitor/zeppelin latest fe4bc823e57d 4 weeks ago 4.12 GB
fluxcapacitor/prediction-pmml latest cae5b2d9835b 4 weeks ago 973 MB
fluxcapacitor/scheduler-airflow latest 95adfd56f656 4 weeks ago 8.89 GB
fluxcapacitor/loadtest latest 6a777ab6167c 5 weeks ago 899 MB
fluxcapacitor/hdfs latest 00fa0ed0064b 6 weeks ago 1.16 GB
fluxcapacitor/sql-mysql latest 804137671a8c 7 weeks ago 679 MB
fluxcapacitor/metastore-1.2.1 latest ea7ce8c5048f 7 weeks ago 1.35 GB
fluxcapacitor/cassandra latest 3cb5ff117283 7 weeks ago 953 MB
fluxcapacitor/apachespark-worker-2.0.1 latest 14ee3e4e337c 7 weeks ago 3.74 GB
fluxcapacitor/apachespark-master-2.0.1 latest fe60b42d54e5 7 weeks ago 3.72 GB
fluxcapacitor/package-java-openjdk-1.8 latest 1db08965289d 7 weeks ago 841 MB
gcr.io/google_containers/kubernetes-dashboard-amd64 v1.5.1 1180413103fd 7 weeks ago 104 MB
fluxcapacitor/stream-kafka-0.10 latest f67750239f4d 2 months ago 1.14 GB
fluxcapacitor/pipeline latest f6afd6c5745b 2 months ago 11.2 GB
gcr.io/google-containers/kube-addon-manager v6.1 59e1315aa5ff 3 months ago 59.4 MB
gcr.io/google_containers/kubedns-amd64 1.9 26cf1ed9b144 3 months ago 47 MB
gcr.io/google_containers/kube-dnsmasq-amd64 1.4 3ec65756a89b 5 months ago 5.13 MB
gcr.io/google_containers/exechealthz-amd64 1.2 93a43bfb39bf 5 months ago 8.37 MB
gcr.io/google_containers/pause-amd64
답변
는 AS README가 설명합니다, 당신은 Minikube에서 부두 노동자 디먼을 다시 사용할 수 있습니다eval $(minikube docker-env)
.
이미지를 업로드하지 않고 사용하려면 다음 단계를 수행하십시오.
- 환경 변수를 설정
eval $(minikube docker-env)
- (예를 들어 Minikube의 부두 노동자 데몬으로 이미지를 구축
docker build -t my-image .
) - (예 : 빌드 태그와 같은 포드 사양의 이미지를 설정
my-image
) - 설정
imagePullPolicy
하기 위해Never
, 그렇지 않은 경우는 Kubernetes 이미지를 다운로드하려고합니다.
중요 사항 :eval $(minikube docker-env)
현재 쉘 세션에 대한 환경 변수 만 설정하므로 사용하려는 각 터미널 에서 실행해야합니다 .
답변
@ svenwltr의 솔루션을 기반으로 나를 위해 일한 것은 다음과 같습니다.
# Start minikube
minikube start
# Set docker env
eval $(minikube docker-env)
# Build image
docker build -t foo:0.0.1 .
# Run in minikube
kubectl run hello-foo --image=foo:0.0.1 --image-pull-policy=Never
# Check that it's running
kubectl get pods
답변
이 답변은 minikube로 제한되지 않습니다!
로컬 레지스트리를 사용하십시오.
docker run -d -p 5000:5000 --restart=always --name registry registry:2
이제 이미지에 태그를 올바르게 지정하십시오.
docker tag ubuntu localhost:5000/ubuntu
localhost는 레지스트리 컨테이너를 실행하는 시스템의 dns 이름으로 변경해야합니다.
이제 이미지를 로컬 레지스트리로 푸시하십시오.
docker push localhost:5000/ubuntu
다시 당길 수 있어야합니다.
docker pull localhost:5000/ubuntu
이제 로컬 레지스트리를 사용하도록 yaml 파일을 변경하십시오.
레지스트리에 이미지를 유지하기 위해 적절한 위치에 볼륨을 마운트하는 것을 고려하십시오.
최신 정보:
Eli가 언급했듯이 http 를 사용하려면 안전하지 않은 로컬 레지스트리를 추가해야합니다 (localhost 를 사용할 때는 적용되지 않지만 로컬 호스트 이름을 사용하는 경우에는 적용됨)
프로덕션 환경에서 http를 사용하지 말고 보안을 유지하기 위해 노력하십시오.
답변
이 답변을 기반으로 @Farhad의 답변에 추가하면 ,
로컬 레지스트리를 설정하는 단계입니다.
로컬 머신에서 설정
로컬 컴퓨터에서 호스트 이름 설정 : /etc/hosts
이 줄을 추가 하려면 편집
docker.local 127.0.0.1
이제 로컬 레지스트리를 시작하십시오 (비 데몬 모드를 실행하려면 -d를 제거하십시오).
docker run -d -p 5000:5000 --restart=always --name registry registry:2
이제 이미지에 태그를 올바르게 지정하십시오.
docker tag ubuntu docker.local:5000/ubuntu
이제 이미지를 로컬 레지스트리로 푸시하십시오.
docker push docker.local:5000/ubuntu
이미지가 푸시되었는지 확인하십시오.
curl -X GET http://docker.local:5000/v2/ubuntu/tags/list
미니 쿠베 설치
미니 쿠비에 ssh : minukube ssh
/etc/hosts
이 줄을 추가 하려면 편집
docker.local <your host machine's ip>
액세스 확인 :
curl -X GET http://docker.local:5000/v2/ubuntu/tags/list
이제 당기려고하면 http 액세스 오류가 발생할 수 있습니다.
안전하지 않은 액세스 활성화 :
이 로컬 설정에서 항상 minkube를 사용하려는 경우 기본적으로 안전하지 않은 레지스트리를 사용하기위한 미니 쿠브를 작성하십시오 (기존 클러스터에서는 작동하지 않음).
minikube start --insecure-registry="docker.local:5000"
그렇지 않으면 아래 단계를 따르십시오.
systemctl stop docker
docker serice 파일을 편집하십시오. systemctl status docker
그것은 수 있습니다 :
/etc/systemd/system/docker.service.d/10-machine.conf 또는 /usr/lib/systemd/system/docker.service
이 텍스트를 추가하십시오 (192.168.1.4를 ip로 대체하십시오)
-비보안 레지스트리 docker.local : 5000-비보안 레지스트리 192.168.1.4:5000
이 줄로
ExecStart = / usr / bin / docker 데몬 -H tcp : //0.0.0.0 : 2376 -H unix : ///var/run/docker.sock –tlsverify –tlscacert /etc/docker/ca.pem- tlscert /etc/docker/server.pem –tlskey /etc/docker/server-key.pem –label provider = virtualbox-안전하지 않은 레지스트리 10.0.0.0/24
systemctl daemon-reload
systemctl start docker
당기십시오 :
docker pull docker.local:5000/ubuntu
이제 로컬 레지스트리를 사용하도록 yaml 파일을 변경하십시오.
containers: - name: ampl-django image: dockerhub/ubuntu
에
containers: - name: ampl-django image: docker.local:5000/nymbleup
프로덕션 환경에서 http를 사용하지 말고 보안을 유지하기 위해 노력하십시오.
답변
허용되는 답변 외에도 run
다음 명령을 사용하여 원래 원하는 것을 얻을 수 있습니다 ( 명령을 사용하여 배포 작성 ).
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1
Kubernetes-dev 포럼에서 발전기에 대한 정보를 찾았습니다.
를 사용
kubectl run
하는 경우 기본적으로imagePullPolicy
설정되어 있는 매니페스트가 생성Always
됩니다. 당신은 얻을이 명령을 사용할 수imagePullPolicy
의IfNotPresent
를 위해 작동합니다minikube
:
kubectl run --image=<container> --generator=run-pod/v1
댄 로렌 크
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
답변
한 가지 방법은 이미지를 로컬로 빌드 한 다음 수행하는 것입니다.
docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)
minikube docker-env
다른 사용자 / sudo에서 실행중인 올바른 정보를 반환하지 않을 수 있습니다. 대신 당신은 실행할 수 있습니다sudo -u yourUsername minikube docker-env
.
다음과 같은 것을 반환해야합니다.
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/chris/.minikube/certs"
export DOCKER_API_VERSION="1.23"
# Run this command to configure your shell:
# eval $(minikube docker-env)
답변
minikube env를 설정 한 후 로컬 환경으로 돌아 오려면 다음 명령을 사용하십시오.
eval $(docker-machine env -u)