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安装docker:sudo apt-get update && sudo apt-get install docker.io
查看 Docker
版本信息:docker version
查看镜像:docker images
查看所有的容器:docker ps -a
systemctl是 systemd 系统和服务管理器的核心工具,用于管理系统和服务的状态及配置。
mysql-client 是 MySQL
数据库的命令行客户端工具。它允许你通过命令行连接和操作 MySQL
数据库服务器,比如执行 SQL 查询、管理数据库和用户等。
常用命令格式如下:mysql -h 主机地址 -P 端口号 -u 用户名 -p
你可以在终端输入以下命令来检查是否已安装
mysql-client:mysql --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
Linux
修改Docker默认镜像和容器存储位置(超详细!!!)_docker更改存储位置-CSDN博客
修改镜像源
查看可用的镜像源DockerHub加速器可用性监控
国内能用的Docker镜像源【2025最新持续更新】_docker 镜像-CSDN博客
1 | "registry-mirrors": [ |
如何使用vscode进入远程服务器的docker容器内部调试代码
安装一下插件
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 | docker network ls |
查看某个自定义网络的详细信息
1 | docker network inspect network_test |
docker compose
Docker Compose基础与语法_哔哩哔哩_bilibili
参考文献
改变软件行业的技术!程序员、软件爱好者必须掌握的Docker,到底是什么?_哔哩哔哩_bilibili