hub - what is docker




আমি কীভাবে ডকার পাত্রে পরিবেশের পরিবর্তনশীলগুলি পাস করব? (7)

আমি ডকারে নতুন, এবং ধারক থেকে কোনও বাহ্যিক ডাটাবেস কীভাবে অ্যাক্সেস করা যায় তা অস্পষ্ট। সংযোগের স্ট্রিং-এ হার্ড-কোডের সর্বোত্তম উপায়?

# Dockerfile
ENV DATABASE_URL amazon:rds/connection?string

Env কে JSON এ রূপান্তর করতে jq ব্যবহার করে:

env_as_json=`jq -c -n env`
docker run -e HOST_ENV="$env_as_json" <image>

এর জন্য জেকিউ সংস্করণ 1.6 বা আরও নতুন প্রয়োজন

এই পুস্ট হোস্ট এনভিএসকে জসন হিসাবে, মূলত ডকফাইফিলের মতো:

ENV HOST_ENV  (all env from the host as json)

অন্য উপায় হ'ল /usr/bin/env ক্ষমতাগুলি ব্যবহার করা:

docker run ubuntu env DEBUG=1 path/to/script.sh

আপনি here ডারার docker run .. দিয়ে কমান্ড ব্যবহার করে পাস করতে পারবেন docker run .. কমান্ডটি here উল্লিখিত হিসাবে এবং @ ইরাতা দ্বারা উল্লিখিত here
তবে, এই পদ্ধতির সম্ভাব্য খারাপ দিকটি হ'ল আপনার শংসাপত্রগুলি প্রক্রিয়া তালিকাতে প্রদর্শিত হবে, যেখানে আপনি এটি চালান run
এটিকে আরও সুরক্ষিত করার জন্য, আপনি একটি কনফিগারেশন ফাইলে আপনার শংসাপত্রগুলি লিখতে পারেন এবং here বর্ণিত হিসাবে --env-file দিয়ে docker run । তারপরে আপনি সেই কনফিগারেশনের ফাইলটির অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন যাতে সেই মেশিনে অ্যাক্সেস থাকা অন্যরা আপনার শংসাপত্রগুলি না দেখে।


আপনি যদি নিজের ধারক (গুলি) স্পিন করার পদ্ধতি হিসাবে 'ডকার-কমপোজ' ব্যবহার করে থাকেন তবে ডকারের ধারকটিতে আপনার সার্ভারে সংজ্ঞায়িত পরিবেশের পরিবর্তনশীলটি পাস করার জন্য একটি কার্যকর উপায় রয়েছে।

আপনার docker-compose.yml ফাইলটিতে, ধরা যাক যে আপনি একটি বেসিক হাপি-জেএস ধারকটি কাটাচ্ছেন এবং কোডটি দেখতে এমন দেখাচ্ছে:

hapi_server:
  container_name: hapi_server
  image: node_image
  expose:
    - "3000"

ধরা যাক যে স্থানীয় সার্ভারে আপনার ডকার প্রজেক্টটি চালু রয়েছে এমন একটি এনভায়রনমেন্ট ভেরিয়েবল রয়েছে যার নাম 'NODE_DB_CONNECT' রয়েছে যা আপনি নিজের হ্যাপি-জেএস কনটেইনারটিতে যেতে চান এবং আপনি এর নতুন নামটি 'HAPI_DB_CONNECT' হতে চান। তারপরে docker-compose.yml ফাইলে আপনি স্থানীয় পরিবেশের পরিবর্তনশীলটিকে docker-compose.yml দিতেন এবং নামটির নতুন নামকরণ করুন:

hapi_server:
  container_name: hapi_server
  image: node_image
  environment:
    - HAPI_DB_CONNECT=${NODE_DB_CONNECT}
  expose:
    - "3000"

আমি আশা করি এটি আপনাকে আপনার ধারকটির যে কোনও ফাইলে একটি ডাটাবেস সংযুক্ত স্ট্রিংটিকে হার্ড-কোডিং এড়াতে সহায়তা করবে!


পরিবেশ পরিবর্তনশীল (ডিফল্ট []) সেট করতে -e বা --env মান ব্যবহার করুন।

একটি সূচনা স্ক্রিপ্ট থেকে একটি উদাহরণ:

 docker run  -e myhost='localhost' -it busybox sh

আপনি যদি কমান্ড লাইন থেকে একাধিক পরিবেশ ব্যবহার করতে চান তবে প্রতিটি পরিবেশের আগে পরিবর্তনশীল -e পতাকা ব্যবহার করুন।

উদাহরণ:

 sudo docker run -d -t -i -e NAMESPACE='staging' -e PASSWORD='foo' busybox sh

দ্রষ্টব্য: কনটেইনারটির নাম পরিবেশ পরিবর্তনের পরে রাখা উচিত, তার আগে নয় Make

আপনার যদি অনেকগুলি ভেরিয়েবল সেটআপ করতে হয় তবে --env-file পতাকা ব্যবহার করুন

উদাহরণ স্বরূপ,

 $ docker run --env-file ./my_env ubuntu bash

অন্য কোনও সহায়তার জন্য ডকার সহায়তাটি দেখুন:

 $ docker run --help

অফিসিয়াল ডকুমেন্টেশন: docs वातावरण- docs


যদি আপনার স্থানীয়ভাবে একটি env.sh এ পরিবেশের পরিবর্তনশীল থাকে এবং ধারক শুরু হওয়ার সাথে সাথে সেট আপ করতে চান, আপনি চেষ্টা করতে পারেন

COPY env.sh /env.sh
COPY <filename>.jar /<filename>.jar
ENTRYPOINT ["/bin/bash" , "-c", "source /env.sh && printenv && java -jar /<filename>.jar"]

এই কমান্ডটি ব্যাশ শেল দিয়ে env.sh শুরু করবে (আমি একটি বাশ শেল চাই কারণ source বাশ কমান্ড), env.sh ফাইল (যা পরিবেশের ভেরিয়েবলগুলি সেট করে) উত্স দেয় এবং জার ফাইলটি কার্যকর করে।

env.sh মতো দেখায়,

#!/bin/bash
export FOO="BAR"
export DB_NAME="DATABASE_NAME"

আমি প্রকৃত উত্স কমান্ডটি কাজ করে তা পরীক্ষা করার জন্য printenv কমান্ড যুক্ত করেছি। আপনি যখন সোর্স কমান্ডটি ঠিকঠাক কাজ করেছে বা পরিবেশের ভেরিয়েবলগুলি আপনার ডকার লগগুলিতে উপস্থিত হবে তা নিশ্চিত করার সময় আপনার সম্ভবত এটি অপসারণ করা উচিত।


docker-compose ব্যবহার করে, নীচের উদাহরণটি দেখায় যে কীভাবে আপনি ডকার-কমপোজ.আইএমএল উভয়র মধ্যে শেল এনভ ভেরিয়েবলের উত্তরাধিকারী হতে পারেন এবং ফলস্বরূপ চিত্রগুলি তৈরি docker-compose দ্বারা ডাকা যে কোনও ডকফেরাইল (গুলি)। Dockerfile RUN কমান্ডে যদি পরিবেশের সাথে সুনির্দিষ্ট কমান্ডগুলি কার্যকর করতে হয় তবে আমি এটি দরকারী পেয়েছি।

(আপনার শেলটিতে RAILS_ENV=development ইতিমধ্যে পরিবেশে বিদ্যমান রয়েছে)

ডকার-কম্পোজ.আইএমএল :

version: '3.1'
services:
  my-service: 
    build:
      #$RAILS_ENV is referencing the shell environment RAILS_ENV variable
      #and passing it to the Dockerfile ARG RAILS_ENV
      #the syntax below ensures that the RAILS_ENV arg will default to 
      #production if empty.
      #note that is dockerfile: is not specified it assumes file name: Dockerfile
      context: .
      args:
        - RAILS_ENV=${RAILS_ENV:-production}
    environment: 
      - RAILS_ENV=${RAILS_ENV:-production}

ডকফেরাইল :

FROM ruby:2.3.4

#give ARG RAILS_ENV a default value = production
ARG RAILS_ENV=production

#assign the $RAILS_ENV arg to the RAILS_ENV ENV so that it can be accessed
#by the subsequent RUN call within the container
ENV RAILS_ENV $RAILS_ENV

#the subsequent RUN call accesses the RAILS_ENV ENV variable within the container
RUN if [ "$RAILS_ENV" = "production" ] ; then echo "production env"; else echo "non-production env: $RAILS_ENV"; fi

এইভাবে ফাইলগুলিতে বা docker-compose build / up কমান্ডগুলিতে পরিবেশের ভেরিয়েবল নির্দিষ্ট করার দরকার নেই:

docker-compose build
docker-compose up




dockerfile