Android

Paano bumuo ng mga imahe ng docker na may dockerfile

Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.

Docker file рецепт для Docker images. Как рождается Docker контейнер c помощью Docker build.

Talaan ng mga Nilalaman:

Anonim

Ang isang imahe ng Docker ay ang blueprint ng mga lalagyan ng Docker na naglalaman ng application at lahat ng kailangan mo upang patakbuhin ang application. Ang isang lalagyan ay isang runtime halimbawa ng isang imahe.

Sa tutorial na ito, ipapaliwanag namin kung ano ang Dockerfile, kung paano lumikha ng isa, at kung paano bumuo ng isang imahe ng Docker na may Dockerfile.

Ano ang Dockerfile

Ang Dockerfile ay isang text file na naglalaman ng lahat ng mga utos na maaaring tumakbo ang isang gumagamit sa linya ng command upang lumikha ng isang imahe. Kasama dito ang lahat ng mga tagubilin na kailangan ni Docker upang mabuo ang imahe.

Ang mga imahe ng docker ay binubuo ng isang serye ng mga layer ng filesystem na kumakatawan sa mga tagubilin sa Dockerfile ng imahe na bumubuo ng isang maipapatupad na application ng software.

Kinukuha ng file ng Docker ang sumusunod na form:

# Comment INSTRUCTION arguments

INSTRUCTION ay hindi sensitibo sa kaso, ngunit ang kombensyon ay ang paggamit ng UPPERCASE para sa mga pangalan nito.

Nasa ibaba ang listahan na may isang maikling paglalarawan ng ilan sa mga ginagamit na tagubilin sa Dockerfile:

  • ARG - Ang tagubiling ito ay nagbibigay-daan sa iyo upang tukuyin ang mga variable na maaaring maipasa sa build-time. Maaari ka ring magtakda ng isang default na halaga. MULA - Ang batayang imahe para sa pagbuo ng isang bagong imahe. Ang tagubiling ito ay dapat ang unang pagtuturo sa di-komento sa Dockerfile. Ang tanging pagbubukod mula sa panuntunang ito ay kung nais mong gumamit ng isang variable sa argumento FROM . Sa kasong ito, FROM ay maaaring masundan ng isa o higit pang mga tagubilin sa ARG . LABEL - Ginamit upang magdagdag ng metadata sa isang imahe, tulad ng paglalarawan, bersyon, may-akda..etc. Maaari mong tukuyin ang higit sa isang LABEL , at ang bawat pagtuturo sa LABEL ay isang pares na may halaga na key. RUN - Ang mga utos na tinukoy sa tagubiling ito ay isasagawa sa panahon ng proseso ng pagtatayo. Ang bawat pagtuturo ng RUN lumilikha ng isang bagong layer sa tuktok ng kasalukuyang imahe. ADD - Ginamit upang kopyahin ang mga file at direktoryo mula sa tinukoy na mapagkukunan hanggang sa tinukoy na patutunguhan sa imahe ng docker. Ang mapagkukunan ay maaaring mga lokal na file o direktoryo o isang URL. Kung ang mapagkukunan ay isang lokal na ark archive, pagkatapos ito ay awtomatikong mai-unpack sa imahe ng Docker. COPY - Katulad sa ADD ngunit ang mapagkukunan ay maaaring lamang isang lokal na file o direktoryo. ENV - Ang tagubiling ito ay nagbibigay-daan sa iyo upang tukuyin ang isang variable ng kapaligiran. CMD - Ginamit upang tukuyin ang isang utos na naisasagawa kapag nagpatakbo ka ng isang lalagyan. Maaari ka lamang gumamit ng isang pagtuturo sa CMD sa iyong Dockerfile. ENTRYPOINT - Katulad sa CMD , tinutukoy ng tagubiling ito kung anong utos ang isasagawa kapag nagpapatakbo ng isang lalagyan. WORKDIR - Itinatakda ng direktiba na ito ang kasalukuyang direktoryo ng pagtatrabaho para sa mga tagubilin sa RUN , CMD , ENTRYPOINT , COPY , at ADD . USER - Itakda ang username o UID na gagamitin kapag nagpapatakbo ng anumang mga sumusunod na tagubilin sa RUN , CMD , ENTRYPOINT , COPY , at ADD . VOLUME - Pinapagana kang mag-mount ng direktoryo ng host machine sa lalagyan. HALIMBAWA - Ginamit upang tukuyin ang port kung saan nakikinig ang lalagyan sa runtime.

Upang, ibukod ang mga file at direktoryo mula sa pagdaragdag sa imahe, lumikha ng isang .dockerignore file sa direktoryo ng konteksto. Ang syntax ng .dockerignore ay katulad sa isa sa Git's .gitignore file.

Para sa isang kumpletong sanggunian at detalyadong paliwanag ng mga tagubilin sa Dockerfile tingnan ang opisyal na pahina ng sangguniang Dockerfile.

Lumikha ng isang Dockerfile

Ang pinaka-karaniwang senaryo kapag lumilikha ng mga imahe ng Docker ay upang hilahin ang isang umiiral na imahe mula sa isang pagpapatala (karaniwang mula sa Docker Hub) at tukuyin ang mga pagbabagong nais mong gawin sa base na imahe. Ang pinaka-karaniwang ginagamit na imahe ng base kapag lumilikha ng mga imahe ng Docker ay Alpine dahil maliit ito at na-optimize na tatakbo sa RAM.

Ang Docker Hub ay serbisyo sa registry na nakabase sa cloud na kasama sa iba pang mga pag-andar ay ginagamit para sa pagpapanatili ng mga imahe ng Docker alinman sa isang pampubliko o pribadong imbakan.

Sa halimbawang ito, gagawa kami ng isang imahe ng Docker para sa server ng Redis. Gagamitin namin ang pinakabagong ubuntu 18.04 bilang isang imahe ng base.

Una, lumikha ng isang direktoryo na naglalaman ng Dockerfile at lahat ng kinakailangang mga file:

mkdir ~/redis_docker

Mag-navigate sa direktoryo at lumikha ng mga sumusunod na Dockerfile:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Ipaliwanag natin ang kahulugan ng bawat linya sa Dockerfile:

  • Sa linya 1 tinukoy namin ang base image.Ang pagtuturo ng RUN na nagsisimula sa linya 3 ay i-update ang index ng apt, i-install ang package na "redis-server" at linisin ang apt cache. Ang mga utos na ginamit sa mga tagubilin ay kapareho ng mga utos na gagamitin mo upang mai-install ang redis sa server ng Ubuntu. Ang pagtuturo ng LAYUNIN ay tumutukoy sa port kung saan nakikinig ang redis server. Sa huling linya, ginagamit namin ang pagtuturo ng CMD upang itakda ang default na utos. ipapatupad iyon kapag tumatakbo ang lalagyan.

I-save ang file at isara ang editor.

Pagbuo ng Imahe

Ang susunod na hakbang ay ang pagbuo ng imahe. Upang gawin ito patakbuhin ang sumusunod na utos mula sa direktoryo kung saan matatagpuan ang Dockerfile:

docker build -t linuxize/redis.

Ang opsyon -t tumutukoy sa pangalan ng imahe at opsyonal na isang username at tag sa format na 'username / imagename: tag'.

Ang output ng proseso ng pagtatayo ay magmukhang katulad nito:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Kapag ang proseso ng build ay nakumpleto ang bagong imahe ay nakalista sa listahan ng imahe:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Pagpapatakbo ng isang lalagyan

Ngayon na ang imahe ay nilikha na nagpapatakbo ka ng isang lalagyan mula dito sa pamamagitan ng pagpapatakbo:

docker run -d -p 6379:6379 --name redis linuxize/redis

Ang mga pagpipilian na -d nagsasabi sa Docker na patakbuhin ang lalagyan sa hiwalay na mode, ang pagpipilian na -p 6379:6379 ay ilalathala ang port 6379 sa host machine at ang pagpipilian ng --name redis tinukoy ang pangalan ng lalagyan. Ang huling argument na linuxize/redis ay ang pangalan ng imahe, na ginagamit upang patakbuhin ang lalagyan.

Kapag nagsimula ang lalagyan, gamitin ang sumusunod na utos upang ilista ang lahat ng mga lalagyan na tumatakbo:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Upang mapatunayan na gumagana ang lahat dahil dapat itong gamitin ang redis-cli upang kumonekta sa lalagyan ng redis-cli :

redis-cli ping

Ang redis server ay dapat tumugon sa PONG .

Konklusyon

Sakop lamang ng tutorial na ito ang mga pangunahing kaalaman sa paggamit ng Dockerfiles upang makabuo ng mga imahe. Upang malaman ang higit pa tungkol sa kung paano sumulat ng Dockerfiles at ang inirekumendang pinakamahusay na kasanayan makita ang Pinakamahusay na kasanayan para sa pagsusulat ng Dockerfiles.

docker