JavaRush /Блоги Java /Random-TG /Аввалин шиносоӣ бо Докер
Viacheslav
Сатҳи

Аввалин шиносоӣ бо Докер

Дар гурӯҳ нашр шудааст
Контейнеризатсия механизмест, ки аксар вақт дар амал истифода мешавад. Масалан, вақте ки шумо дар headhunter ҷустуҷӯ мекунед, шумо то имрӯз 477 ҷойҳои холӣ хоҳед ёфт, ки Docker-ро зикр мекунанд. Аз ин рӯ, ин фикри бад нест, ки бо он чӣ аст, шинос шавед. Ман умедворам, ки ин баррасии кӯтоҳ ба ташаккули идеяи аввал кӯмак мекунад. Хуб, вай онро бо маводи иловагӣ, ба монанди курсҳо дар Udemy дастгирӣ мекунад. Аввалин шиносоӣ бо Docker - 1

Муқаддима

Дар ин баррасии кӯтоҳ ман мехоҳам ба мавзӯъе, ба монанди контейнерсозӣ, дахл кунам. Ва шумо бояд аз фаҳмидани он ки контейнеризатсия дар асл чист. Мувофиқи Википедиа, " Контейнеризатсия " виртуализатсияи сатҳи системаи амалиётӣ (яъне сахтафзор НЕ ) мебошад, ки дар он ядрои системаи амалиётӣ ба ҷои танҳо як мисолҳои фазои корбарии ҷудогонаро нигоҳ медорад. " Фазои корбар " фазои суроғаи хотираи виртуалии системаи оператсионӣ мебошад, ки барои барномаҳои корбар ҷудо карда шудааст. Намунаҳои фазои корбар (одатан контейнерҳо номида мешаванд) аз нуқтаи назари корбар ба як мисоли системаи оператсионӣ комилан шабеҳанд. Ядро ҷудокунии пурраи контейнерро таъмин мекунад, бинобар ин барномаҳо аз контейнерҳои гуногун наметавонанд ба ҳамдигар таъсир расонанд. Маълум мешавад, ки контейнеризатсия виртуализатсияи нармафзор аст, яъне виртуализатсия дар сатҳи системаи амалиётӣ, ки барои он ядрои системаи амалиётӣ масъул аст. Яке аз хусусиятҳои хоси ин равиш дар он аст, ки ҳама контейнерҳо як ядрои умумиро истифода мебаранд, ки ҳамон системаи оператсионии ҳост (яъне он системае, ки контейнерҳо дар он ҷойгиранд). Ин ба шумо имкон медиҳад, ки аз сарбории тақлид кардани сахтафзори виртуалӣ ва ба кор андохтани як намунаи мукаммали системаи оператсионӣ халос шавед. Мо гуфта метавонем, ки ин виртуализатсияи "сабук" аст. Ядро қисми марказии ОС мебошад, ки барномаҳоро бо дастрасии ҳамоҳангшуда ба захираҳои компютерӣ, аз қабor вақти протсессор, хотира, сахтафзорҳои беруна ва дастгоҳҳои вуруду баромади беруна таъмин менамояд. Ядро инчунин маъмулан системаи файлӣ ва хидматҳои протоколи шабакавиро таъмин мекунад. Умуман, ин дor тамоми система аст. Барои маълумоти иловагӣ, баррасии маводи " Маълумоти умумӣ дар бораи контейнерҳо " муфид хоҳад буд . Ва чанд калимаи дигар барои пурра кардани муқаддима. Ҳоло мо фаҳмидем, ки системаи амалиётӣ ядро ​​дорад. Он изолятсияро барои мисолҳои фазои корбар таъмин мекунад. Дар ин замина, шумо метавонед бо истилоҳи " гурӯҳҳо " дучор шавед. Ин номи худи механизми ядрои Linux аст, ки ба шумо имкон медиҳад, ки ба ин ноил шавед. Аз ин рӯ, мо метавонем бигӯем, ки роҳи контейнеризатсия аз системаҳои Linux оғоз ёфт. Аммо, аз Windows 10 сар карда, дастгирии контейнеризатсия низ пайдо шуд. Барои кор бо виртуализатсия, шумо бояд дастгирии виртуализатсияро дар BIOS-и компютери худ танзим кунед. Чӣ тавр ин корро кардан аз компютер вобаста аст. Масалан, он метавонад чунин бошад:
Аввалин шиносоӣ бо Docker - 2
Дар Windows шумо метавонед инро бо роҳҳои гуногун тафтиш кунед. Масалан, шумо метавонед як утorтаи махсусро аз вебсайти Microsoft зеркашӣ кунед: Воситаи муайянкунии виртуализатсия бо ёрии сахтафзор . Хуб, бояд як консепсияи муҳими дигар - Гипервизорро қайд кард. Гипервизор як монитори мошини маҷозӣ, барномаест барои таъмини иҷрои параллелии якчанд системаҳои оператсионӣ дар як компютер. Гипервизор кафолат медиҳад, ки системаҳои амалиётӣ аз ҳамдигар ҷудо карда шудаанд ва захираҳоро байни OS-ҳои иҷрошаванда мубодила мекунанд. Яке аз чунин гипервизорҳо Oracle VirtualBox мебошад .
Аввалин шиносоӣ бо Docker - 3

Докер

Пас, чӣ гуна виртуализатсия равшан аст. Аммо чӣ тавр истифода бурдани он? Ва дар ин ҷо Докер ба кӯмаки мо меояд. Docker нармафзорест барои автоматикунонии ҷобаҷогузорӣ ва идоракунии барномаҳо дар муҳити контейнерӣ. Бояд аз он оғоз кунем, ки Docker бо чунин консепсия ба монанди Docker Enginge муаррифӣ мешавад. Ва шумо бояд аз вебсайти расмии Docker ва бахши " Баррасии Docker " оғоз кунед.
Аввалин шиносоӣ бо Docker - 4
Ҳуҷҷатҳо мегӯяд, ки докер аз:
  • Сервери Docker раванди Docker Daemon номида мешавад (dockerd).
  • Интерфейси сатри фармон, ки бо номи CLI (докер) низ маълум аст.
  • API REST, ки тавсиф мекунад, ки чӣ гуна барномаҳо метавонанд бо демон "сӯҳбат" кунанд ва ба он чӣ кор кунанд.
Пеш аз он ки мо ба дигар ғарқ шавем, биёед докерро насб кунем, яъне демони докерро насб кунем. Вебсайти Docker дастурҳо оид ба насби " Docker for Windows " дорад. Ҷолиб он аст, ки Docker талаботи системаи худро дорад. Ва агар шумо мисли ман Windows-и кӯҳна дошта бошед, масалан Windows 7, пас шумо бояд Docker Toolbox -ро истифода баред.
Аввалин шиносоӣ бо Docker - 5

Қуттии асбобҳои Docker

Барои насб кардани Docker дар мошинҳои кӯҳна, ки ба талаботи система ҷавобгӯ нестанд. Вебсайт чунин мегӯяд, "Legacy Desktop Solution". Биёед ба саҳифаи " Docker Toolbox " равем ва онро зеркашӣ кунем. Ин маҷмӯа тақрибан 211 мегаbyte вазн дорад. Мо онро ҳамчун пешфарз насб хоҳем кард, яъне мо бо ҳама чиз бидуни тағир додани парчамҳо бо мулоимӣ розӣ мешавем. Пас аз насб, мо тафтиш мекунем, ки ҳама чиз хуб аст. Дар оянда майдони чанги мо хати фармондихй хохад шуд. Ман тавсия медиҳам, ки хати фармони Windows-ро истифода набаред, зеро бо он мушкилоти ноаён вуҷуд дорад. Беҳтар аст, ки shell-ро истифода баред. Дар Windows, роҳи аз ҳама тавсияшавандаи гирифтани он насб кардани системаи идоракунии versionи git мебошад , он ҳоло ҳам муфид хоҳад буд. Чунки бо он "маҷмӯа" ба мо лозим хоҳад буд. Барои ин барраси ман git bash -ро истифода хоҳам кард. Шумо инчунин метавонед bash-ро бо CYGWIN насб кунед . Биёед bash ё git bash -ро оғоз кунем. Биёед боварӣ ҳосил кунем, ки мо мошини Docker-ро насб кардаем, ки бо номи Docker Machine маъруф аст: docker-machine -version Ин мошини Docker чист? Docker Machine як утorтаест барои идоракунии ҳостҳои докеронидашуда (инҳо ҳостҳое мебошанд, ки дар онҳо Docker Engine насб шудааст). Агар мо фавран пас аз насб кардани Docket Toolbox мошинҳои докерро бо истифода аз фармон дидан кунем docker-machine ls, мо рӯйхати холиро мебинем:
Аввалин шиносоӣ бо Docker - 6
Мошини нав созем. Барои ин, мо бояд фармони эҷодро иҷро кунем : docker-machine create -- driver virtualbox javarush: Мо сабти эҷоди мошини докерро мебинем:
Аввалин шиносоӣ бо Docker - 7
Он чизе ки моро дар ин ҷо ба худ ҷалб мекунад, ин аст. Boot2Docker чист? Ин тақсимоти минималистии Linux барои идора кардани Engine Docker аст (мо мефаҳмем, ки Docker ба шарофати асбобҳои виртуализатсияи Linux кор мекунад ва дар Windows механизми зарурӣ танҳо аз Windows 10 оғоз ёфт). Ин тақсимот ба тақсимоти " Tiny Core Linux " асос ёфтааст . Инчунин дар бораи VirtualBox VM зикр шудааст. Ин барои он аст, ки мо муайян кардем --driver virtualbox. Дар VirtualBox аз тасвири Boot2Docker мошини нави виртуалӣ сохта шуд. Пас аз эҷод, мо метавонем VirtualBox-ро оғоз кунем (зеро VirtualBox бо Docker Toolbox насб карда шудааст) ва мошини виртуалии сохташударо барои мошини докер бубинед:
Аввалин шиносоӣ бо Docker - 8
Пас аз эҷод, аз мо хоҳиш карда мешавад, ки фармони " docker-machine env " -ро иҷро кунем, то тағирёбандаҳои муҳити зистро ба даст орем, ки бояд барои пайвастшавӣ ба мошини докер танзим карда шаванд:
Аввалин шиносоӣ бо Docker - 9
Пас аз иҷрои ин фармон бо истифода аз docker-machine, мо ба ҳости дурдасти dockerized пайваст мешавем (дар ин ҳолат, виртуалии дар Virtual Box ҷойгиршуда) ва метавонем фармонҳои докерро ба таври маҳаллӣ иҷро кунем, ки гӯё мо онҳоро дар ҳости дурдаст иҷро карда истодаем. Барои санҷидани он, мо метавонем фармони " docker info " -ро иҷро кунем. Агар пайвастшавӣ ба мошини докер муқаррар карда нашавад, мо хатогиро мегирем. Ва агар ҳамааш хуб бошад, маълумот дар бораи докер дар мошини докер. Ҳоло вақти фаҳмидани он аст, ки чӣ тавр Docker умуман кор мекунад ва чӣ тавр истифода бурдани он.
Аввалин шиносоӣ бо Docker - 10

Контейнерҳои Docker

Ҳамин тавр, мо докер дорем. Ба ҳар ҳол ин докер чист? Ҳуҷҷатҳои Docker ва бахши " Оғоз " ба мо дар фаҳмидани ин кӯмак мекунанд . Қисми муқаддимаи ин бахш консепсияҳои Docker-ро муаррифӣ мекунад . Дар он гуфта мешавад, ки Docker як платформа барои таҳия, ислоҳ ва иҷро кардани барномаҳо дар контейнерҳо мебошад. Аз ин рӯ, чизи асосӣ барои Docker контейнерҳост. Ҳатто агар шумо ба логотипи докер нигоҳ кунед, он наҳангест, ки дар пушт контейнерҳоро нигоҳ медорад. Аммо контейнер чист? Дар оянда дар бахши " Тасвирҳо ва контейнерҳо " гуфта мешавад, ки контейнер як намунаи иҷрокунандаи тасвир аст. Ва Image ин "баста" аст, ки ҳама чизҳои барои барнома заруриро дар бар мегирад (рамз, муҳити зист, китобхонаҳо, танзимот ва ғайра). Акнун биёед худамон кӯшиш кунем. Вебсайти Docker дорои бахше бо номи " Намунаҳои Docker " мебошад, ки " Docker барои шурӯъкунандагон " -ро дар бар мегирад. Намунаҳои ин ҷо ба ман ҷолибтар ба назар мерасанд. Ҳамин тавр, мо ногаҳон хостем бо Alpine Linux шинос шавем ва мо метавонем ин корро бо истифода аз контейнерҳои Docker иҷро кунем. Барои ба даст овардани тасвир, мо бояд онро "кашад" ё "кашад". Аз ин рӯ, мо фармони docker pull -ро иҷро мекунем :docker pull apline
Аввалин шиносоӣ бо Docker - 11
Тавре ки мебинем, мо аз ягон ҷо зеркашӣ карда истодаем. Бо нобаёнӣ, Docker ба анбори худ дар шабака назар мекунад https://hub.docker.com . Пас аз бомуваффақият дарёфт кардани тасвир, мо метавонем рӯйхати тасвирҳои дастрасро тавассути иҷро кардани фармони docker images тафтиш кунем :
Аввалин шиносоӣ бо Docker - 12
Ҳоло мо тасвири apline дорем. Азбаски контейнер як намунаи иҷрокунандаи тасвир аст, биёед ин тасвирро оғоз кунем. Биёед бо истифода аз фармон контейнерро оғоз кунем docker run alpine. Тавре ки мебинем, ҳеҷ чиз рӯй надодааст. Агар мо фармони docker psнамоиш додани ҳама контейнерҳои фаъолро иҷро кунем, мо низ чизе ба даст намеорем. Аммо агар мо иҷро кунем, docker ps -aмо ҳама контейнерҳоро мебинем:
Аввалин шиносоӣ бо Докер - 13
Гап дар он аст, ки мо Docker-ро дар реҷаи интерактивӣ оғоз накардаем. Аз ин ру, у фармонро ичро карда истод. Фармон кушодани терминал буд. Биёед ҳамин корро кунем, аммо дар реҷаи интерактивӣ (бо парчами -it ):
Аввалин шиносоӣ бо Docker - 14
Тавре ки шумо мебинед, як хатогиро бартараф карда, бо истифода аз маслиҳат, мо ба контейнер расидем ва дар он кор карда метавонем! Барои баромадан аз контейнер бе қатъ кардани кори он, шумо метавонед -ро пахш кунед Ctrl + p + q. Агар мо ҳозир кор кунем docker ps, мо як контейнери фаъолро мебинем. Барои ворид кардани контейнери аллакай коркунанда, фармони docker exec -ро иҷро кунед :
Аввалин шиносоӣ бо Докер - 15
Ман тавсия медиҳам, ки тавсифи намунаи Docker-ро хонед, то тавсифи аълои он, ки ин ҳама чӣ гуна рух медиҳад: " 1.0 Иҷроиши аввалин контейнери шумо ". Ба ман маъқул аст, зеро дар он ҷо ҳама чиз ба таври хеле дастрас ва фаҳмо навишта шудааст. Барои мухтасар такрор кардан, мо бо истифода аз docker-machine ба мошини маҷозӣ бо Docker Daemon пайваст мешавем. Бо истифода аз CLI тавассути REST API, мо хоҳиш мекунем, ки тасвири кӯҳиро оғоз кунем. Docker онро пайдо мекунад ва аз ин рӯ онро зеркашӣ намекунад. Docker як контейнери нав эҷод мекунад ва фармонеро, ки мо дар ин контейнер муқаррар кардем, иҷро мекунад. Ва хамаи ин, албатта, хуб аст. Аммо барои чӣ ба мо ҳамаи ин лозим аст? Ва дар ин ҷо мо бояд бифаҳмем, ки чӣ тавр докер тасвирро эҷод мекунад. Ва ӯ онҳоро дар асоси файли docker эҷод мекунад.
Аввалин шиносоӣ бо Docker - 16

файли докер

Тавре ки дар истиноди Dockerfile гуфта шудааст , файли докер файли матнист, ки тамоми фармонҳоро барои гирифтани тасвир дар бар мегирад. Дар асл, ҳамаи тасвирҳое, ки мо мегирем (ҳатто Alpine, аз мисоли боло) аз файли докер сохта шудаанд. Биёед тасвири худро бо барномаи Java созем. Ва аввал ба мо ин барномаи Java лозим аст. Ман тавсия медиҳам, ки системаи сохтани Gradle-ро истифода барем, ки шумо метавонед дар ин шарҳи кӯтоҳ бештар дар бораи он хонед: " Муқаддимаи мухтасар ба Gradle ". Дар эҷоди лоиҳаи " Gradle Build init plugin " ба мо кӯмак мекунад. Биёед бо истифода аз Gradle як барномаи нави Java эҷод кунем: gradle init --type java-application Ин фармон лоиҳаи Java-и шаблонро эҷод мекунад. Ин як барномаи мустақил аст, аммо мо мехоҳем як барномаи веб эҷод кунем. Биёед синфҳои App ва AppTest-ро хориҷ кунем (онҳо аз ҷониби Gradle Build Init Plugin ба таври худкор тавлид шудаанд). Барои зуд эҷод кардани веб-барнома, мо аз дастури Gradle истифода мебарем: " Сохтани Java Web Applications ". Мувофиқи дастур, биёед иҷро кунем: Дар ин ҷо шумо бояд эҳтиёт бошед. Мисли ҳамеша дар мисолҳо хатогиҳо вуҷуд доранд. Ин ҷост ин:
Аввалин шиносоӣ бо Docker - 17
Акнун, барои санҷидани он, биёед плагини gretty-ро ба build.gradle илова кунем, тавре ки дар бахши " Илова кардани плагини gretty ва иҷро кардани барнома " нишон дода шудааст:
plugins {
    id 'war'
    id 'org.gretty' version '2.2.0'
}
HelloServletҶолиб он аст, ки Гретти хатогиро дар , ки дар боло тавсиф шудааст, намебинад . Ин далели он аст, ки барнома метавонад дар муҳитҳои гуногун рафтор кунад. Gretty метавонад кор кунад, ки serverи муқаррарии мустақил хато кунад. Танҳо санҷиши дуруст кор кардани барнома боқӣ мемонад. Биёед:gradle appRun
Аввалин шиносоӣ бо Докер - 18
Агар ҳамааш хуб бошад, пас фармонро gradle warбарои ҷамъоварии бойгонӣ бо ҷанги васеъшавӣ истифода баред (архиви веб). Бо нобаёнӣ, gradle онро дар \build\libs. Ҳоло мо омодаем файли докери худро нависем. Бо истифода аз " истинод Dockerfile " мо як Dockerfile эҷод мекунем. Биёед дар решаи лоиҳаи Java-и худ файлеро бо номи "Dockerfile" созем (дар ҳамон ҷое, ки скрипти созед). Биёед онро барои таҳрир кушоем. Ин файл формати худро дорад, ки дар қисмати " Reference Dockerfile: Format " тавсиф шудааст. Ҳар як файли докер бо баёнияи FROM бо нишон додани "тасвири асосӣ" оғоз мешавад. Метавон гуфт, ки ин симои волидайн аст, ки мо симои худро дар асоси он месозем. Интихоби тасвири волидайн барои мо хеле осон аст. Барномаи веб ба serverи веб ниёз дорад. Масалан, мо метавонем веб-serverи Tomcat-ро истифода барем. Мо ба анбори расмии Docker меравем, ки он маркази docker номида мешавад . Мо ба он ҷо менигарем, то бубинем, ки оё тасвире, ки ба мо лозим аст, вуҷуд дорад:
Аввалин шиносоӣ бо Докер - 19
Инчунин бояд фаҳмид, ки тасвири tomcat номида мешавад. Аммо гайр аз ном тег дорад. Tag мисли version аст. Тасвирҳои Tomcat-и versionҳои гуногун дар кадом versionи Tomcat истифода мешаванд, кадом versionи jre ва кадом тасвири асосӣ фарқ мекунанд. Масалан, мо метавонем тасвиреро ба даст орем, docker pull tomcat:9-jre8-alpine Он versionи 9-и tomcat, jre versionи 8 ва тасвири кӯҳиро ҳамчун асос истифода мебарад. Ин метавонад барои кам кардани андозаи тасвири мо муҳим бошад:
Аввалин шиносоӣ бо Docker - 20
Чунон ки мебинем, тафовут калон аст. Агар мо тасвири худро дар асоси tomcata alpine созем, мо танҳо бо 100 мегаbyte оғоз мекунем, на бо 600. Мувофиқи он, мо мундариҷаи зеринро ба dockerfile қаблан сохташуда илова мекунем:
# Базовый образ, "наследуемся" от него
FROM tomcat:9-jre8-alpine
# Копируем из Build Context'а собранный web archive в каталог томката
COPY build/libs/docker.war /usr/local/tomcat/webapps/docker.war
# Меняем рабочий каталог на томкатовский
WORKDIR /usr/local/tomcat
# Открываем порт 8080 для контейнера, т.к. его слушает томкат
EXPOSE 8080
Ва акнун биёед фармони сохтани тасвирро иҷро кунем: docker build -t jrdocker ..
Аввалин шиносоӣ бо Докер - 21
-t- ин тег аст, яъне тасвири ҷамъшударо чӣ ном бояд кард. Нуқта дар охири он маънои онро дорад, ки мо директорияи ҷориро (директорие, ки дар он файли докерфайл ҷойгир аст ва мо фармонро аз куҷо иҷро кардем) ба Build context. Build context- ин контексти он файлҳоест, ки ҳангоми сохтани файли докер дастрасанд. Тавре ки шумо мебинед, ба шарофати ин мо тавонистем файли ҷангии ҷамъшударо ба тасвири худ, ба феҳристи веб-server нусхабардорӣ кунем. Акнун биёед тасвири худро иҷро кунем:docker run -d --rm -p 8888:8080 jrdocker
Аввалин шиносоӣ бо Докер - 22
Барои фаҳмидани он ки server оғоз шудааст, шумо метавонед ба гузориш аз контейнер нигаред. Журналро бо истифода аз фармони docker logs гирифтан мумкин аст, бо нишон додани контейнер бо ID ё номаш. Барои намуна:
Первое знакомство с Docker - 23
Хуб, фаромӯш накунед, ки мо ҳамеша метавонем ба як контейнери ҷорӣ бо ном бо фармон равем: winpty docker exec -it NameКонтейнера sh Ҳоло танҳо пайваст шудан аст. Пештар, мо EXPOSE -ро муайян карда будем , яъне мо дастрасӣ ба порти 8080-ро аз дохor контейнер иҷозат додем.Вақте ки худи контейнерро оғоз кардем, мо теги -p ( портҳои воридотӣ ) ​​-ро муайян кардем ва ба ин васила порти 8080-ро дар контейнер (веб-serverи Tomcat) мутақобила кардем. дар он ҷо мунтазири пайвастшавӣ аст) бо порти 8888 дар мошин бо демони докер. Тавре ки мо дар ёд дорем, мо демони докерро на мустақим, балки тавассути мошини докер оғоз кардем. Аз ин рӯ, биёед бори дигар бо истифода аз фармони docker-machine ls дар бораи мошинҳои докери худ маълумот пурсем ва бо server дар контейнер тамос гирем:
Первое знакомство с Docker - 24
Ҳамин тариқ, шумо ва ман наваHow барномаи веби худро дар контейнери Docker оғоз кардем! )^аминро низ кайд кардан мехостам. Дар сурати мушкилоти дастрасӣ, шумо бояд дар хотир доред, ки мошини Docker пеш аз ҳама як мошини виртуалии Virtual BOx мебошад. Мумкин аст бо танзимоти шабакаи мошини виртуалӣ мушкилот вуҷуд дошта бошад. Конфигуратсияи кории VMBox метавонад чунин бошад:
Первое знакомство с Docker - 25
Первое знакомство с Docker - 26

Қабатҳо

Мо аллакай фаҳмидем, ки тасвирҳо аз dockerfiles сохта мешаванд ва докерфилҳо маҷмӯи фармонҳо мебошанд. Мо инчунин фаҳмидем, ки файли докер дорои волидайн аст. Ва андозаи тасвирҳо гуногун аст. Ҷолиб он аст, ки шумо метавонед таърихи сохтани тасвирро бо истифода аз фармони таърихи docker бубинед . Барои намуна:
Первое знакомство с Docker - 27
Инро гуфтан муҳим аст, то бифаҳмем, ки дар асл ҳар як тасвир маҷмӯи тасвирҳост. Ҳар як тағир додани тасвир (ҳар фармони нав дар файли докер) қабати наверо эҷод мекунад, ки ID-и худро дорад. Шумо метавонед бештар дар бораи қабатҳо дар ҳуҷҷатҳои " Docker: Тасвирҳо ва қабатҳо " хонед. Ман инчунин тавсия медиҳам, ки мақолаи Ҳабреро хонед: " Тасвирҳо ва контейнерҳо дар тасвирҳо ."

Хулоса

Умедворам, ки ин шарҳи мухтасар барои таваҷҷуҳи шумо ба контейнерсозӣ кофӣ буд. Дар зер пайвандҳо ба маводи иловагӣ мавҷуданд, ки метавонанд муфид бошанд: #Вячеслав
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION