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:
参数解释
-
version:
- 定义
docker-compose
文件的版本。这决定了可用的功能和语法。
- 定义
-
services:
- 定义了多个服务,每个服务会运行一个容器。
-
app:
image
: 使用的镜像名(例如your_app_image:latest
)。build
: 构建镜像的配置。context
: Dockerfile 所在的目录。dockerfile
: Dockerfile 的文件名。
ports
: 映射主机和容器的端口。格式为"主机端口:容器端口"
。environment
: 环境变量列表,用于配置容器内部的应用。networks
: 该服务所连接的网络。depends_on
: 定义服务的依赖关系,确保服务按顺序启动。
-
db:
image
: 使用的镜像名(例如postgres:13
)。volumes
: 数据卷,用于持久化数据。db-data:/var/lib/postgresql/data
: 将主机上的db-data
卷挂载到容器内的指定路径。
environment
: 环境变量列表,用于配置数据库。
-
networks:
- 定义网络。在这个例子中,只有一个网络
app-network
,用于连接app
和db
服务。
- 定义网络。在这个例子中,只有一个网络
-
volumes:
- 定义数据卷。在这个例子中,只有一个数据卷
db-data
,用于持久化数据库的数据。
- 定义数据卷。在这个例子中,只有一个数据卷
运行 docker-compose.yml
-
确保你已经安装了 Docker 和 Docker Compose。
-
在包含
docker-compose.yml
文件的目录中运行以下命令:docker-compose up
这将会启动定义的服务并创建网络和卷。
-
若要在后台运行服务,可以使用:
docker-compose up -d
通过这种方式,你可以轻松地管理和连接多个 Docker 容器,并使用 docker-compose.yml
文件进行配置和部署。