docker

镜像(Image)

镜像可以被看作是一个轻量级、可执行的独立软件包,包含了运行某个应用所需的所有代码、库、环境变量和配置文件。它是容器的静态模板,在创建容器时用作基础。

只读:镜像本身是只读的,无法修改。

可重用:镜像是可以多次重用的,你可以基于相同的镜像创建多个容器。

容器(Container)

与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。

容器更加的轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间,因此我们可以在同样规格的硬件上大量部署容器,这是虚拟机所不能比拟的,而且不同于操作系统数分钟的启动时间容器几乎瞬时启动,容器技术为打包服务栈提供了一种更加高效的方式

镜像与容器的关系

镜像是静态的:它只包含应用和运行环境,不能进行任何运行时的操作。你可以把它看作是软件的安装包

容器是动态的:它是在镜像的基础上创建的,可以运行、执行代码、修改文件系统等。你可以把它看作是镜像的运行实例

docker

docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现

此外docker的另一个好处就是快速部署,这是当前互联网公司最常见的一个应用场景,一个原因在于容器启动速度非常快,另一个原因在于只要确保一个容器中的程序正确运行,那么你就能确信无论在生产环境部署多少都能正确运行。

每一种容器都是一个完整的运行环境,容器之间互相隔离。

简单来说,docker将程序打包部署,方便了软件的部署,避免了环境冲突等问题

常用命令

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

在Docker中运行容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • [OPTIONS]:可选参数,用于配置容器的各种选项,如端口映射、容器名称等。
  • IMAGE:要运行的镜像名称或ID。
  • [COMMAND] [ARG...]:可选的命令和参数,用于在容器内执行特定的命令。

停止正在运行的容器:docker stop [OPTIONS] CONTAINER [CONTAINER...]

启动已停止的容器:docker start [OPTIONS] CONTAINER [CONTAINER...]

删除已停止的容器或镜像:docker rm [OPTIONS] CONTAINER [CONTAINER...] docker rmi [OPTIONS] IMAGE [IMAGE...]

  • docker rm:删除容器的命令。
  • docker rmi:删除镜像的命令。

从Docker仓库中拉取现有的镜像:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

  • docker pull:拉取镜像的命令。
  • [OPTIONS]:可选参数,用于配置拉取过程,如认证信息等。
  • NAME[:TAG|@DIGEST]:要拉取的镜像名称、标签或摘要。

docker部分指令

linux安装dockersudo apt-get update && sudo apt-get install docker.io

查看 Docker 版本信息docker version

查看镜像docker images

查看所有的容器docker ps -a

systemctlsystemd 系统和服务管理器的核心工具,用于管理系统和服务的状态及配置。

mysql-client 是 MySQL 数据库的命令行客户端工具。它允许你通过命令行连接和操作 MySQL 数据库服务器,比如执行 SQL 查询、管理数据库和用户等。

常用命令格式如下:mysql -h 主机地址 -P 端口号 -u 用户名 -p

你可以在终端输入以下命令来检查是否已安装 mysql-clientmysql --version

可以使用以下命令安装:sudo apt-get update sudo apt-get install mysql-client

sudo apt-get update 这个命令的作用是更新本地软件包列表

停止并删除容器docker stop fastapi docker rm fastapi

Linux修改镜像源如何查看docker配置的镜像仓库_查看docker镜像地址-CSDN博客

常见参数

基础参数:

-d--detach 后台运行容器(detached mode)
--name <name> 为容器指定名称(如--name my_container
--rm 容器停止后自动删除(适用于临时容器)

端口映射:

-p <主机端口>:<容器端口> 映射主机端口到容器端口(如-p 80:80
-p <主机IP>:<主机端口>:<容器端口> 指定主机IP绑定(如-p 127.0.0.1:8080:80
-P--publish-all 自动映射所有暴露的端口(随机分配主机端口)

卷挂载:

-v <主机路径>:<容器路径> 挂载主机目录到容器(如-v //app
-v <卷名>:<容器路径> 使用命名卷(如-v my_volume:/data

环境变量:

-e <KEY=VALUE> 设置环境变量(如-e DEBUG=true
--env-file <文件名> 从文件加载环境变量(每行KEY=VALUE

网络配置:

--network <网络名> 指定容器使用的网络(如--network bridge或自定义网络)
--network host 使用主机网络(共享主机网络命名空间)

拯救被wsl占用的内存

以笔者的情况来说,我的wsl中只有一些必备的开发环境,项目源代码 和 docker。前两者显然没啥可操作的空间,所以只有一个靶子 —— docker。

首先,我们可以进入wsl,通过以下命令,看看 Docker 的磁盘使用情况和资源总量。

1
docker system df 

大家都知道,docker运行一段时间后,可能会产生一些无用的镜像文件。要清理无用的 Docker 镜像,则可以运行以下命令:

1
docker image prune 

该命令可以删除所有未被任何容器使用的镜像。如果想清理所有已停止的容器和未使用的镜像:

1
docker system prune -a

执行完后咱们可以再运行第一个命令查看磁盘使用情况,大概率能看到释放了一部分磁盘空间。如果确实长时间为清理过,很大可能可释放几十G。

然而这时候我们退出wsl回到win10, 你可能会看到磁盘空间几乎没啥变化。这是因为wsl还需要我们手动释放这部分空间,即压缩磁盘。

修改docker存储镜像位置

windows

image-20250709095041821
image-20250709092539404
image-20250709092605183

Linux

修改Docker默认镜像和容器存储位置(超详细!!!)_docker更改存储位置-CSDN博客

修改镜像源

查看可用的镜像源DockerHub加速器可用性监控

国内能用的Docker镜像源【2025最新持续更新】_docker 镜像-CSDN博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://ccr.ccs.tencentyun.com",
"https://hub.xdark.top",
"https://hub.fast360.xyz",
"https://docker-0.unsee.tech",
"https://docker.xuanyuan.me",
"https://docker.tbedu.top",
"https://docker.hlmirror.com",
"https://doublezonline.cloud",
"https://docker.melikeme.cn",
"https://image.cloudlayer.icu",
"https://dislabaiot.xyz",
"https://freeno.xyz",
"https://docker.kejilion.pro"
]

如何使用vscode进入远程服务器的docker容器内部调试代码

安装一下插件

9a3be11a07b5a0866d09d1bcbbaae4dc
image-20250716165555700

build,pull与run

docker build:从源代码构建镜像

  • 作用:根据你提供的 Dockerfile(一个包含构建镜像所需指令的文本文件)以及上下文(通常是包含 Dockerfile 的目录及其子目录),创建一个新的 Docker 镜像。

docker pull:从注册中心下载镜像

  • 作用:从 Docker 注册中心(默认是 Docker Hub,也可以是私有注册中心如 Harbor, GitLab Registry, AWS ECR 等)下载一个已经构建好的 Docker 镜像到你的本地机器。

docker run:创建并启动容器

  • 作用:基于一个本地已有的镜像(无论这个镜像是你刚 build 出来的,还是 pull 下来的,或是之前就存在的),创建一个新的容器实例,并按照指定的命令(或镜像默认的命令)启动它。

docker的自定义网络

创建自定义桥接网络

1
docker network create mynet

启动服务容器(不映射宿主机端口也能被同网络容器访问)

1
docker run -d --name api --network demo-net fastapi-svc

列出所有网络(包括自定义网络)

1
2
3
4
docker network ls

#只列出自定义网络(过滤掉默认网络)
docker network ls --filter type=custom

查看某个自定义网络的详细信息

1
docker network inspect network_test 

Docker网络介绍_哔哩哔哩_bilibili

docker compose

Docker Compose基础与语法_哔哩哔哩_bilibili

参考文献

改变软件行业的技术!程序员、软件爱好者必须掌握的Docker,到底是什么?_哔哩哔哩_bilibili

什么是Docker?看这一篇干货文章就够了! - 知乎

Docker常用命令大全(非常详细)零基础入门到精通,收藏这一篇就够了-CSDN博客

40分钟的Docker实战攻略,一期视频精通Docker_哔哩哔哩_bilibili