docker使用

创建并运行容器:

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 文件进行配置和部署。

posted @ 2024-08-05 12:19  tongyf  阅读(7)  评论(0编辑  收藏  举报