最新有个项目需要docker,随现学了一下,下面是一些常用命令:

需要编写两个文件:

Dockerfile

# 使用 Python 官方基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将代码和依赖文件拷贝到容器
COPY . .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 暴露 Flask 的默认端口
EXPOSE 5000

# 启动命令
CMD ["source", ".env"]
CMD ["python", "app.py"]

docker-compose.yml:

version: '3.8'

services:
  flask-app:
    build: .
    ports:
      - "5000:5000"
    environment:
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_HOST=${DB_HOST}
      - DB_NAME=${DB_NAME}
      - OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID}
      - OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET}
    depends_on:
      - mysql
    networks:
      - backend

  mysql:
    image: mysql:8.0
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql  # 持久化 MySQL 数据
      - ./amps_backup.sql:/docker-entrypoint-initdb.d/amps_backup.sql  # 复制备份文件到容器
    ports:
      - "3306:3306"
    networks:
      - backend

networks:
  backend:
    driver: bridge

volumes:
  mysql_data:
    driver: local  # 持久化存储数据

需要注意的是这个里面有两个容器,所以单独的docker run不行,需要docker-compose来运行。

1. Install Docker Compose

sudo apt-get install docker-compose

2.set environment to .env

DB_USER={your mysql username}
DB_PASSWORD=2
DB_ROOT_PASSWORD=rootpassword
DB_HOST=mysql
DB_NAME=amps
OSS_ACCESS_KEY_ID={your access key}
OSS_ACCESS_KEY_SECRET={your secret key}
OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com
OSS_REGION=cn-hangzhou
OSS_BUCKET_NAME=lscp-tools-data
pdb_folder_path=AMP-SEMiner/

3.Use Docker Compose

Start the service:

sudo docker-compose up --build

Stop service:

sudo docker-compose down

Other commands:

Execute the following command to delete useless resources in Docker, including unused images, containers, networks, and volumes:

sudo docker system prune -a
  • This command will delete the following:

  • stopped container

  • Image not used by any container

  • unused network

  • unused volume


到此为止,该项目就完成了,以下是常规的docker常用命令:

4. 上传镜像

# 1. 登录 Docker Hub
docker login

# 2. 查看构建的镜像
docker images

# 3. 标记镜像 (替换 <your-image-id> 为实际的镜像 ID)
docker tag <your-image-id> jackkuo666/amp_seminer_portal_backend:v1
或者直接文件夹下:
```bash
docker build -t jackkuo666/amp_seminer_portal_backend:v1 .

5. 推送镜像到 Docker Hub

docker push jackkuo666/amp_seminer_portal_backend:v1

拉取镜像:

docker pull jackkuo666/amp_seminer_portal_backend:v1

运行容器:

docker run -d --name amp-seminer-backend -p 5000:5000 jackkuo666/amp_seminer_portal_backend:v1

查看运行的容器:

docker ps -a
docker logs -f amp-seminer-backend

删除环境

docker ps -a
docker stop  amp-seminer-backend
docker ps -a
docker rm amp-seminer-backend

删除镜像

docker images
docker rmi f75c9dc119c7

进入容器(可选):

docker exec -it amp-seminer-container /bin/bash

停止容器(可选):

docker stop amp-seminer-container
docker run -d --name amp-seminer-container -p 5000:5000 jackkuo/amp-seminer-portal:latest

查看本地 Docker 镜像

docker image ls

例如,查看容器 flask-app_1 的日志:

docker logs flask-app_1

如果你不确定容器的名称或 ID,可以使用以下命令列出所有正在运行的容器:

docker ps -a
ocker rm amp_seminer_portal_backend

6. 要删除本地 Docker 镜像,可以使用以下命令。

查看本地镜像

首先,查看本地 Docker 镜像:

docker images

这将显示一个镜像列表,类似于:

REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
jackkuo666/amp_seminer_portal_backend   v1        d9671def5ff3   2 hours ago     1.2GB
ubuntu                          latest    5e2d1c3e4f77   3 days ago      64MB

删除单个镜像

如果你知道镜像的 IMAGE IDREPOSITORY:TAG,可以使用以下命令来删除该镜像。

  1. 使用 IMAGE ID 删除镜像
docker rmi IMAGE_ID

例如:

docker rmi d9671def5ff3
  1. 使用 REPOSITORY:TAG 删除镜像
docker rmi REPOSITORY:TAG

例如:

docker rmi jackkuo666/amp_seminer_portal_backend:v1

删除多个镜像

如果你想删除多个镜像,可以将它们的 IMAGE IDREPOSITORY:TAG 作为空格分隔的列表传递给 docker rmi

docker rmi IMAGE_ID_1 IMAGE_ID_2 IMAGE_ID_3

例如:

docker rmi d9671def5ff3 5e2d1c3e4f77

强制删除镜像

如果该镜像有依赖的容器(即该镜像正在被某个容器使用),你可能会遇到删除失败的情况。你可以使用 -f(强制删除)来删除镜像,即使有容器在使用它:

docker rmi -f IMAGE_ID

删除所有未使用的镜像

如果你想删除所有没有被任何容器使用的镜像(即 dangling 镜像),可以运行:

docker image prune

如果你想删除所有未使用的镜像,包括 dangling 镜像,可以使用 -a 选项:

docker image prune -a

删除所有镜像

如果你想删除所有本地镜像,可以运行:

docker rmi $(docker images -q)

注意

  • 如果你尝试删除的镜像正在运行或者有容器依赖于它,你将需要先停止并删除相关容器,然后再删除镜像。
  • 使用 docker rmi 命令时,确保该镜像没有正在运行的容器。可以使用 docker ps -a 查看所有容器(包括已停止的容器)。

删除容器

如果需要删除相关容器,可以使用以下命令停止并删除容器:

  1. 停止容器
docker stop container_id
  1. 删除容器
docker rm container_id

7. 总结:一些常用命令

docker run -d   --name amp_seminer_portal_backend   -p 5000:5000   jackkuo666/amp_seminer_portal_backend:v2
docker ps -a
docker logs -f amp_seminer_portal_backend
docker stop amp_seminer_portal_backend
docker rm amp_seminer_portal_backend
如果你想删除所有未使用的镜像,包括 dangling 镜像,可以使用 -a 选项:
docker image prune -a 
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐