docker使用

tongyf發表於2024-08-05

建立並執行容器:

FROM python:3.10-slim
WORKDIR /app
COPY . .
RUN pip install numpy
CMD ["python","a.py"]

首先建立一個Dockerfile
然後FROM指定基礎映象,WORKDIR指定之後所有docker命令工作路徑,COPY把檔案從一個本地路徑複製到映象路徑(這裡就是把當前目錄的所有內容複製到映象路徑/app下),RUN指定建立映象時執行的命令,CMD指定容器執行時執行的命令
之後,

docker build -t myapp .

-t後面跟映象名,.表示在當前目錄尋找Dockerfile

docker run -p 80:5000 -d myapp

-p指定從本地主機到容器的埠對映(前面是本地埠,後面是容器埠),-d指定容器後臺執行,最後是映象名
一些其他指令:

docker ps #列舉所有容器
docker stop <id> #停止容器
docker restart <id> #重啟容器
docker rm <id> #刪除容器
docker exec -it <id> /bin/bash #啟動遠端容器

為防止資料隨著容器刪除消失,可以建立volume資料卷

docker volume create my_volume

在docker run的時候透過-v引數指定容器用的資料卷以及掛載到容器的哪個路徑上

docker run -p 80:5000 -d myapp -v my_volume:/etc/myapp

連線兩個容器:

建立一個 docker-compose.yml 檔案以連線兩個 Docker 映象,可以透過定義服務和網路來實現。以下是一個示例,以及每個引數的解釋:

示例 docker-compose.yml

version: '3.8'

services:
  app:
    image: your_app_image:latest
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      - DATABASE_HOST=db
      - DATABASE_PORT=5432
      - DATABASE_USER=user
      - DATABASE_PASSWORD=password
    networks:
      - app-network
    depends_on:
      - db

  db:
    image: postgres:13
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=your_database
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
    networks:
      - app-network

networks:
  app-network:

volumes:
  db-data:

引數解釋

  1. version:

    • 定義 docker-compose 檔案的版本。這決定了可用的功能和語法。
  2. services:

    • 定義了多個服務,每個服務會執行一個容器。
  3. app:

    • image: 使用的映象名(例如 your_app_image:latest)。
    • build: 構建映象的配置。
      • context: Dockerfile 所在的目錄。
      • dockerfile: Dockerfile 的檔名。
    • ports: 對映主機和容器的埠。格式為 "主機埠:容器埠"
    • environment: 環境變數列表,用於配置容器內部的應用。
    • networks: 該服務所連線的網路。
    • depends_on: 定義服務的依賴關係,確保服務按順序啟動。
  4. db:

    • image: 使用的映象名(例如 postgres:13)。
    • volumes: 資料卷,用於持久化資料。
      • db-data:/var/lib/postgresql/data: 將主機上的 db-data 卷掛載到容器內的指定路徑。
    • environment: 環境變數列表,用於配置資料庫。
  5. networks:

    • 定義網路。在這個例子中,只有一個網路 app-network,用於連線 appdb 服務。
  6. volumes:

    • 定義資料卷。在這個例子中,只有一個資料卷 db-data,用於持久化資料庫的資料。

執行 docker-compose.yml

  1. 確保你已經安裝了 Docker 和 Docker Compose。

  2. 在包含 docker-compose.yml 檔案的目錄中執行以下命令:

    docker-compose up
    

    這將會啟動定義的服務並建立網路和卷。

  3. 若要在後臺執行服務,可以使用:

    docker-compose up -d
    

透過這種方式,你可以輕鬆地管理和連線多個 Docker 容器,並使用 docker-compose.yml 檔案進行配置和部署。

相關文章