我正在學習 Docker,希望能得到一些智慧。
我目前對 Docker 的假設是 Dockerfile 和由此構建的影像只存盤實際環境本身。而不是應用程式檔案/服務器。我們利用 Volumes 在容器中存盤和運行應用程式代碼。在需要動態安裝的生產 Docker 示例中。一個人如何在影像本身中使用應用程式代碼(因為它沒有存盤在影像中......對嗎?)。
當我在開發中使用我的 Docker Image 時,我啟動了一個容器,其中安裝了我的本地作業目錄的卷。這是我的命令。
docker run -v $(pwd):/app image_name
1.我是否在實際的Dockerfile中從GitHub拉取來添加和使用容器中的應用程式代碼?
2. 有沒有辦法將應用程式代碼存盤在 Docker Image 本身上?
例如,這是我非常簡單的 Dockerfile:
FROM ruby:3.1.1-alpine3.15
RUN apk update -q
RUN apk add bash yarn git build-base nodejs mariadb-dev tzdata
ENV RAILS_ENV development
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
COPY package.json /app/package.json
COPY yarn.lock /app/yarn.lock
RUN gem install bundler
RUN gem update bundler
RUN bundle install
COPY entrypoint.sh /usr/bin
RUN chmod x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
提前感謝您,任何建議將不勝感激。
uj5u.com熱心網友回復:
Dockerfile 用于創建帶有命令列指令串列的自動構建。你可以在你的鏡像中復制整個代碼庫,一個簡單的 rails dockerfile 就像:
FROM ruby:2.6.6-alpine
RUN apk update && apk add bash build-base nodejs postgresql-dev tzdata git openssh
RUN mkdir /project
WORKDIR /project
ENV RAILS_ENV development
COPY Gemfile Gemfile.lock ./
RUN gem install bundler --no-document
RUN bundle install --no-binstubs --jobs $(nproc) --retry 3
COPY . .
CMD ["rails", "server", "-b", "0.0.0.0"]
此處COPY . .將在最終影像中復制當前目錄的內容(您的代碼)。您可以使用 docker-compose 構建多個影像,例如。網路應用 資料庫:
碼頭工人-compose.yml
services:
db:
image: 'postgres:11-alpine'
volumes:
- 'postgres:/var/lib/postgresql/data'
ports:
- '5432:5432'
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
container_name: 'project-db'
restart: on-failure
web:
depends_on:
- 'db'
build:
context: .
dockerfile: ./Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
ports:
- '3000:3000'
environment:
- DATABASE_HOST=db
container_name: 'project-rails'
restart: on-failure
volumes:
db:
postgres:
在這里,您定義卷、檔案夾以在映像出現故障時保留。當您第一次構建鏡像時(例如docker-compose up --build),Docker如果您的機器上還沒有基礎鏡像,它將下載基礎鏡像,它將構建并運行它們。當您更新代碼庫并啟動新構建時,Docker將快取未更改的影像層并僅重建您修改的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/475540.html
