目 录CONTENT

文章目录

Docker

Administrator
2025-06-07 / 0 评论 / 0 点赞 / 7 阅读 / 0 字

Ez编程 Docker 学习笔记

一.docker 简介

官网:www.docker.com

dockerhub官网:https://hub.docker.com

compose文件编写规范:https://docs.docker.com/reference/compose-file/

dockerhub官网:https://hub.docker.com


一、容器生命周期管理

1.1 容器创建与启动

# 基础启动(前台运行,退出即停止)
docker run <镜像名>

# 后台运行并命名容器
docker run -d --name <容器名> <镜像名>

# 带端口映射
docker run -d -p <宿主机端口>:<容器端口> --name <容器名> <镜像名>

# 挂载数据卷
docker run -d -v <宿主机路径>:<容器路径> --name <容器名> <镜像名>

# 设置环境变量
docker run -d -e "ENV_VAR=value" --name <容器名> <镜像名>

# 限制资源(内存/CPU)
docker run -d --memory="1g" --cpus="1.5" --name <容器名> <镜像名>

# 指定网络
docker run -d --network=<网络名> --name <容器名> <镜像名>

1.2 容器状态管理

Bash# 启动已停止的容器
docker start <容器ID或名>

# 停止容器(默认10秒等待时间)
docker stop <容器ID或名>

# 强制立即停止容器
docker kill <容器ID或名>

# 重启容器
docker restart <容器ID或名>

# 暂停/恢复容器进程
docker pause <容器ID或名>
docker unpause <容器ID或名>

1.3 容器删除

Bash# 删除已停止的容器
docker rm <容器ID或名>

# 强制删除运行中的容器
docker rm -f <容器ID或名>

# 删除所有停止的容器
docker container prune

二、容器操作与调试

2.1 交互操作

Bash# 进入运行中的容器(推荐exec方式)
docker exec -it <容器名> /bin/bash

# 以root用户进入容器
docker exec -u root -it <容器名> /bin/sh

# 创建临时交互式容器(退出自动删除)
docker run -it --rm <镜像名> /bin/bash

2.2 信息查看

Bash# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看容器详细信息
docker inspect <容器ID或名>

# 查看容器日志(实时跟踪)
docker logs -f --tail 100 <容器ID或名>

# 查看容器资源使用统计
docker stats <容器ID或名>

2.3 文件操作

Bash# 从容器复制文件到宿主机
docker cp <容器名>:<容器路径> <宿主机路径>

# 从宿主机复制文件到容器
docker cp <宿主机路径> <容器名>:<容器路径>

三、镜像管理

3.1 镜像操作

Bash# 拉取镜像(默认最新标签)
docker pull <镜像名>

# 推送镜像到仓库
docker push <用户名>/<镜像名>:<标签>

# 查看本地镜像列表
docker images 或 docker image ls

# 删除镜像(需先删除关联容器)
docker rmi <镜像ID或名>

# 删除未被使用的镜像
docker image prune -a

3.2 镜像构建

Bash# 构建镜像(指定Dockerfile路径)
docker build -t <镜像名>:<标签> -f /path/to/Dockerfile .

# 查看镜像构建历史
docker history <镜像名>

# 多阶段构建示例
docker build -t <最终镜像名> --target=production .

3.3 镜像导入/导出

Bash# 保存镜像为归档文件
docker save -o <文件名>.tar <镜像名>

# 从归档文件加载镜像
docker load -i <文件名>.tar

# 导出容器文件系统为tar包
docker export <容器ID> > <文件名>.tar

# 从tar包导入为镜像
docker import <文件名>.tar <镜像名>:<标签>

四、网络管理

4.1 网络操作

Bash# 查看所有网络
docker network ls

# 创建自定义网络
docker network create --driver bridge <网络名>

# 连接容器到网络
docker network connect <网络名> <容器名>

# 断开容器网络
docker network disconnect <网络名> <容器名>

# 查看网络详情
docker network inspect <网络名>

docker network rm 或

docker network prune

docker inspect <容器ID或名称> --format='{{json .NetworkSettings.Networks}}'

4.2 网络模式

Bash# 使用主机网络模式
docker run --network=host <镜像名>

# 使用none网络模式(无网络)
docker run --network=none <镜像名>

五、数据卷管理

5.1 数据卷操作

Bash# 创建命名数据卷
docker volume create <卷名>

# 查看数据卷列表
docker volume ls

# 删除数据卷
docker volume rm <卷名>


# 先停止所有容器
docker stop $(docker ps -aq)

# 删除所有容器
docker rm $(docker ps -aq)

# 最后删除所有数据卷
docker volume rm $(docker volume ls -q)

# 删除未被使用的数据卷
docker volume prune

5.2 挂载方式

Bash# 挂载命名卷
docker run -v <卷名>:<容器路径> <镜像名>

# 绑定挂载(宿主机目录)
docker run -v /host/path:/container/path <镜像名>

# 只读挂载
docker run -v /host/path:/container/path:ro <镜像名>

六、系统维护

6.1 系统信息

Bash# 查看Docker系统信息
docker info

# 查看Docker版本
docker version

# 查看运行时状态
docker system df

6.2 资源清理

Bash# 清理所有未使用对象(镜像/容器/网络等)
docker system prune -a

# 删除所有停止的容器
docker container prune

# 删除所有悬挂镜像
docker image prune

七、Docker Compose 常用命令

Bash# 启动服务(后台运行)
docker compose up -d

# 停止并删除容器
docker compose down

# 查看运行状态
docker compose ps

# 查看日志
docker compose logs -f

# 重新构建镜像
docker compose build

# 执行单次命令
docker compose run <服务名> <命令>

八、实用技巧

8.1 批量操作

Bash# 停止所有运行中的容器
docker stop $(docker ps -q)

# 删除所有容器
docker rm -f $(docker ps -aq)

# 删除所有镜像
docker rmi -f $(docker images -aq)

8.2 配置别名(添加至 ~/.bashrc)

Bashalias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dimg='docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"'

MySql

docker run -d -p 3306:3306
-v /app/myconf:/etc/mysql/conf.d
-v /app/mydata:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
mysql:8.0.37-debian

compose.yaml

上线:docker compose up -d
下线:docker compose down
启动:docker compose start x1 x2 x3
停止:docker compose stop x1 x3
扩容:docker compose scale x2=3

redis

mysql

app

九、实战

创建⽹络

docker network create blog

启动mysql

docker run -d -p 3306:3306
-e MYSQL_ROOT_PASSWORD=123456
-e MYSQL_DATABASE=wordpress
-v mysql-data:/var/lib/mysql
-v /app/myconf:/etc/mysql/conf.d
--restart always --name mysql
--network blog
mysql:8.0

启动wordpress

docker run -d -p 8080:80
-e WORDPRESS_DB_HOST=mysql
-e WORDPRESS_DB_USER=root
-e WORDPRESS_DB_PASSWORD=123456
-e WORDPRESS_DB_NAME=wordpress
-v wordpress:/var/www/html
--restart always --name wordpress-app
--network blog
wordpress:latest

compose.yaml

name: myblog
services:
 mysql:
  container_name: mysql
  image: mysql:8.0
  ports:
   - "3306:3306"
  environment:
   - MYSQL_ROOT_PASSWORD=123456
   - MYSQL_DATABASE=wordpress
  volumes:
   - mysql-data:/var/lib/mysql
   - /app/myconf:/etc/mysql/conf.d
  restart: always
  networks:
   - blog
 wordpress:
  image: wordpress
  ports:
  - "8080:80"
  environment:
   WORDPRESS_DB_HOST: mysql
   WORDPRESS_DB_USER: root
   WORDPRESS_DB_PASSWORD: 123456
   WORDPRESS_DB_NAME: wordpress
  volumes:
   - wordpress:/var/www/html
  restart: always
  networks:
   - blog
  depends_on:
   - mysql
volumes:
 mysql-data:
 wordpress:
networks:
 blog:

vim compose.yaml

docker compose -f compose.yaml up -d

docker compose -f compse.yaml down --rmi all -v

docker file

文档地址:https://docs.docker.com/reference/dockerfile/

FROM openjdk:17
LABEL author=leifengyang
COPY app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java,"-jar","/app.jar"]
docker build -f Dockerfile -t myjavaapp:v1.0 .

docker(fastapi+vue3项目部署)

1.mysql数据库构建

docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=fastapi \
-v mysql-data:/var/lib/mysql \
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \
--network ezbc_cms \
mysql:8.0

2.vue3 构建

vim Dockerfile

FROM nginx
COPY ./dist /usr/share/nginx/html/
EXPOSE 5002

docker build -t vue3_ezbc_cms .

docker run -d -p 5002:80 --name vue3_ezbc_cms \
--restart always --name vue3_ezbc \
--network ezbc_cms \
vue3_ezbc_cms

3.fastapi构建

pip freeze > requirements.txt

vim Dockerfile

FROM python:3.9
WORKDIR /app
COPY . /app
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
EXPOSE 5001
CMD ["python3"."app.py"]

docker build -t fastapi_ezbc_cms .

docker run -d -p 5001:5001 --name fastapi_ezbc_cms \
--restart always --name fastapi_ezbc \
--network ezbc_cms \
fastapi_ezbc_cms

基础配置类

  1. FROM 指定构建镜像的基础镜像,是 Dockerfile 中第一条指令 。后续指令基于该基础镜像环境执行。比如 FROM ubuntu:latest ,表示以最新版 Ubuntu 系统为基础来构建镜像;FROM python:3.9-slim 则是以精简版 Python 3.9 环境为基础 ,可用于构建 Python 应用镜像。
  2. WORKDIR 用于在镜像内设置默认工作目录。后续 RUNCMDCOPY 等指令若涉及相对路径操作,都以该目录为基准。例如先执行 WORKDIR /app ,后续 COPY. /app 就会把本地当前目录内容复制到镜像内 /app 目录下。
  3. ARG 定义构建时的参数,可在构建镜像时通过 --build-arg 传入值。比如 ARG VERSION=latest 定义了名为 VERSION 的参数,构建时可 docker build --build-arg VERSION=1.0.0. 来指定具体版本值。参数仅在构建过程中可用,镜像构建完成后不可访问。

命令执行与启动类

  1. RUN 用于在构建镜像过程中执行命令,可安装软件包、配置环境等。比如 RUN apt-get update && apt-get install -y software ,在基于 Debian 或 Ubuntu 系的镜像中更新软件源并安装指定软件 。每条 RUN 指令执行完都会生成新的镜像层。
  2. CMD 指定容器启动时默认执行的命令或参数。一个 Dockerfile 中只能有一条 CMD 指令,若有多条,最后一条生效。可用于启动应用程序,如 CMD ["python", "app.py"] 表示容器启动时运行 app.py 脚本。也可提供默认参数,被 docker run 命令行参数覆盖。
  3. ENTRYPOINT 设置容器启动时固定执行的命令,通常用于确保容器以特定方式启动。可搭配 CMD 使用,CMD 提供的参数会附加在 ENTRYPOINT 之后。例如 ENTRYPOINT ["python"]CMD ["app.py"] ,容器启动时实际执行 python app.py 。常用于设置像 docker run nginx 这种直接以固定命令启动容器的场景。

文件操作类

  1. ADD 将本地文件或目录添加到镜像中指定路径。若源路径是本地压缩包(如 .tar.gz 等),在添加时会自动解压。比如 ADD myapp.tar.gz /app ,会把 myapp.tar.gz 解压到镜像内 /app 目录。但使用时需注意,ADD 从远程 URL 下载文件时可能存在安全和版本控制问题。
  2. COPY 单纯将本地文件或目录复制到镜像指定路径,不会自动解压压缩包。相比 ADD 更简洁、功能更明确,推荐用于一般文件复制场景。例如 COPY requirements.txt /app ,把本地 requirements.txt 复制到镜像内 /app 目录。

环境与端口配置类

  1. ENV 设置环境变量,可在构建镜像过程中以及容器运行时使用。比如 ENV PYTHONPATH=/app ,后续在镜像内执行 Python 相关操作时就会依据此环境变量找模块路径。也可在 docker run 时用 -e 参数覆盖,如 docker run -e PYTHONPATH=/newpath myimage
  2. EXPOSE 声明容器运行时打算暴露的端口,主要起文档说明和端口映射提示作用。本身不实际开启端口访问,需配合 docker run -p (映射端口)或 docker-compose.yml 中的 ports 配置来实现端口对外映射。比如 EXPOSE 80 表示容器内应用使用 80 端口,后续可通过映射让外部访问容器内 80 端口服务。

数据与权限类

  1. VOLUME 定义数据卷,用于在容器中持久化数据或实现容器间数据共享。数据卷可绕过镜像的联合文件系统,直接在宿主机存储数据。比如 VOLUME /data ,表示在容器内 /data 目录可挂载宿主机目录或其他数据卷,实现数据持久化,容器删除后数据仍可保留。
  2. USER 指定容器运行时使用的用户和用户组。可以是用户名或 UID 。例如 USER appuser ,后续在容器内执行命令就以 appuser 用户身份运行,增强容器安全性,避免容器以 root 权限运行带来的风险。

标识与元数据类

LABEL 用于给镜像添加自定义标签,以键值对形式存在,可添加镜像的描述、作者、版本、用途等元数据信息。例如 LABEL maintainer="example@example.com" description="This is a sample app image" ,方便对镜像进行管理、分类和识别 。

0

评论区