docker 常用命令

目录

  • [一. 创建Dockerfile文件](#一. 创建Dockerfile文件)
    • [1.1 下载示例项目](#1.1 下载示例项目)
    • [1.2 编辑Dockerfile文件](#1.2 编辑Dockerfile文件)
  • [二. image镜像](#二. image镜像)
    • [2.1 镜像构建](#2.1 镜像构建)
    • [2.2 镜像查看](#2.2 镜像查看)
      • [2.2.1 `docker images` 查看所有镜像](#2.2.1 docker images 查看所有镜像)
      • [2.2.2 `docker image ls` 查看所有镜像](#2.2.2 docker image ls 查看所有镜像)
      • [2.2.3 镜像详细信息查看](#2.2.3 镜像详细信息查看)
      • [2.2.4 镜像指定信息查看](#2.2.4 镜像指定信息查看)
    • [2.3 镜像导出与导入](#2.3 镜像导出与导入)
      • [2.3.1 导出镜像为文件](#2.3.1 导出镜像为文件)
      • [2.3.2 将导出的镜像文件恢复为镜像](#2.3.2 将导出的镜像文件恢复为镜像)
    • [2.4 镜像删除](#2.4 镜像删除)
  • [三. container容器](#三. container容器)
    • [3.1 查看容器](#3.1 查看容器)
      • [3.1.1 `docker container ls --all` 查看所有容器](#3.1.1 docker container ls --all 查看所有容器)
      • [3.1.2 `docker container logs` 查看 docker 容器的输出](#3.1.2 docker container logs 查看 docker 容器的输出)
    • [3.2 启动容器](#3.2 启动容器)
      • [3.2.1 `docker run` 创建并启动容器](#3.2.1 docker run 创建并启动容器)
      • [3.2.2 ⭕启动容器时,挂载数据](#3.2.2 ⭕启动容器时,挂载数据)
      • [3.2.3 `docker container start` 启动一个既存的容器](#3.2.3 docker container start 启动一个既存的容器)
    • [3.3 停止容器](#3.3 停止容器)
      • [3.3.1 `docker stop`](#3.3.1 docker stop)
      • [3.3.2 `docker container stop`](#3.3.2 docker container stop)
    • [3.4 删除容器](#3.4 删除容器)
      • [3.4.1 `docker rm`](#3.4.1 docker rm)
      • [3.4.2 `docker container rm`](#3.4.2 docker container rm)
    • [3.5 `docker exec`进入容器内部](#3.5 docker exec进入容器内部)
    • [3.6 `docker container cp` 复制容器内的文件到本地](#3.6 docker container cp 复制容器内的文件到本地)
  • [四. registry仓库](#四. registry仓库)
    • [4.1 `docker pull` 镜像拉取](#4.1 docker pull 镜像拉取)
    • [4.2 `docker push` 镜像推送](#4.2 docker push 镜像推送)

一. 创建Dockerfile文件

1.1 下载示例项目

⏹执行下面的git命令,下载示例项目

  • git clone https://github.com/mattwojo/helloworld-django.git

⏹下载完成之后,移动到示例项目的根目录,应该会看到这样的目录

bash 复制代码
apluser@FengYeHong-HP:helloworld-django$ ls -l
total 148
-rw-r--r-- 1 apluser apluser 131072 Jun  7 16:56 db.sqlite3
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project

1.2 编辑Dockerfile文件

⏹在项目的根目录下手动创建一个Dockerfile文件,创建之后的目录如下

bash 复制代码
apluser@FengYeHong-HP:helloworld-django$ ls -l
total 148
-rw-r--r-- 1 apluser apluser    196 Jun  7 16:54 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun  7 16:56 db.sqlite3
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project
apluser@FengYeHong-HP:helloworld-django$
apluser@FengYeHong-HP:helloworld-django$ cat Dockerfile
# 安装python环境, 指定基础镜像
FROM python:3.11-slim
# 创建一个名为 app 的工作目录
WORKDIR /app
# 将当前目录下的 requirements.txt 复制到app工作目录中
COPY requirements.txt .

# 运行pip命令, 安装python项目所需的依赖
RUN pip install --no-cache-dir -r requirements.txt
# 将当前目录下的所有内容都复制到app工作目录中
COPY . /app

# 指定8000端口
EXPOSE 8000
# 启动python项目
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

二. image镜像

2.1 镜像构建

  • -t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest
  • 最后的那个.表示Dockerfile文件所在的路径,因为当前路径在Dockerfile文件所在的目录,所示是一个.
bash 复制代码
docker image build -t helloworld-django .
# 或者
docker image build -t helloworld-django:0.0.1 .

2.2 镜像查看

2.2.1 docker images 查看所有镜像

bash 复制代码
apluser@FengYeHong-HP:~$ docker images
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
helloworld-django   latest    51fedeaf85ff   2 days ago     363MB
hello-world         latest    0b6a027b5cf3   4 months ago   20.4kB

2.2.2 docker image ls 查看所有镜像

bash 复制代码
apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
helloworld-django   latest    51fedeaf85ff   2 days ago     363MB
hello-world         latest    0b6a027b5cf3   4 months ago   20.4kB

2.2.3 镜像详细信息查看

  • docker inspect 镜像名:版本号
  • docker inspect 镜像ID
bash 复制代码
apluser@FengYeHong-HP:project$ docker image ls
REPOSITORY               TAG       IMAGE ID       CREATED      SIZE
guohuiyuan/go-music-dl   latest    bdafc937ce7f   4 days ago   327MB
apluser@FengYeHong-HP:project$
apluser@FengYeHong-HP:project$ docker inspect guohuiyuan/go-music-dl:latest | head
[
    {
        "Id": "sha256:bdafc937ce7fe64084ec2e81941f3d933ae5e4b856f06842b0718e262b2621b4",
        "RepoTags": [
            "guohuiyuan/go-music-dl:latest"
        ],
        "RepoDigests": [
            "guohuiyuan/go-music-dl@sha256:bdafc937ce7fe64084ec2e81941f3d933ae5e4b856f06842b0718e262b2621b4"
        ],
        "Parent": "",
apluser@FengYeHong-HP:project$ docker inspect bdafc937ce7f | head
[
    {
        "Id": "sha256:bdafc937ce7fe64084ec2e81941f3d933ae5e4b856f06842b0718e262b2621b4",
        "RepoTags": [
            "guohuiyuan/go-music-dl:latest"
        ],
        "RepoDigests": [
            "guohuiyuan/go-music-dl@sha256:bdafc937ce7fe64084ec2e81941f3d933ae5e4b856f06842b0718e262b2621b4"
        ],
        "Parent": "",
apluser@FengYeHong-HP:project$

2.2.4 镜像指定信息查看

bash 复制代码
apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY               TAG       IMAGE ID       CREATED      SIZE
guohuiyuan/go-music-dl   latest    bdafc937ce7f   4 days ago   327MB
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker inspect --format='{{.Created}}' guohuiyuan/go-music-dl
2026-03-03T11:00:25.406122852Z
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker inspect --format='{{.RepoTags}}  {{.Created}}' bdafc937ce7f
[guohuiyuan/go-music-dl:latest]  2026-03-03T11:00:25.406122852Z
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.CreatedAt}}" guohuiyuan/go-music-dl
REPOSITORY               TAG       CREATED AT
guohuiyuan/go-music-dl   latest    2026-03-03 20:00:25 +0900 JST

2.3 镜像导出与导入

2.3.1 导出镜像为文件

bash 复制代码
docker save 镜像名称:版本号 -o 镜像名称.tar
docker save 镜像id -o 镜像名称.tar

2.3.2 将导出的镜像文件恢复为镜像

bash 复制代码
docker load -i 镜像名称.tar

2.4 镜像删除

  • docker image rm 镜像ID
bash 复制代码
apluser@FengYeHong-HP:~$ docker image rm 51fedeaf85ff
Untagged: helloworld-django:latest
Deleted: sha256:51fedeaf85ffdc569edae785cce00602eb90b4a7a12766c6f671a517f0c4f199
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    0b6a027b5cf3   4 months ago   20.4kB

三. container容器

3.1 查看容器

3.1.1 docker container ls --all 查看所有容器

  • docker container ls:查看正在运行的容器
  • docker container ls --all:查看正在所有容器,包括已经停止运行的容器

docker ps 的作用和docker container相同,只不过从语义化上看来,docker container更好。

3.1.2 docker container logs 查看 docker 容器的输出

⏹docker 容器的输出,即容器里面 Shell 的标准输出。如果

  • docker run 命令运行容器的时候,没有使用-it参数
  • docker container start 直接启动既存容器时

就要用这个命令查看输出。

3.2 启动容器

3.2.1 docker run 创建并启动容器

  • -it:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
  • --rm:容器一旦停止就会自动删除(仅在临时测试时使用)
  • -p:容器的 8000 端口映射到本机的 8100 端口
  • helloworld-django:latest:指定要启动的容器
bash 复制代码
apluser@FengYeHong-HP:~$ docker run -it --rm -p 8100:8000 helloworld-django:latest
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 14, 2025 - 00:12:19
Django version 3.2.25, using settings 'web_project.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

⏹容器启动之后,在浏览器中就可以看到如下所示的界面

3.2.2 ⭕启动容器时,挂载数据

  • -v /主机路径文件:/容器路径文件 这会让容器内部使用主机上的文件,从而让 db.sqlite3 的内容得以持久保存。
  • -w /app 设置容器内的工作目录是 /app,这个要与你 Dockerfile 中 WORKDIR 设置一致(通常也是 /app
bash 复制代码
docker run -it -p 8100:8000 \
-v /home/apluser/project/helloworld-django/db.sqlite3:/app/db.sqlite3 \
-w /app helloworld-django:0.0.1

3.2.3 docker container start 启动一个既存的容器

docker run的方式会创建并启动一个容器,同样的命令运行两次,就会生成两个一模一样的容器文件。

如果希望重复使用容器,就要使用docker container start命令,它用来启动已经生成、已经停止运行的容器文件。

3.3 停止容器

3.3.1 docker stop

docker stop 容器ID:停止正在运行的容器。注意:停止运行的容器并不会被删除。

  • docker stop <容器ID或名称> 会向容器发送 SIGTERM 信号,让其优雅退出,如果在默认的 10 秒内还没退出,则发送 SIGKILL 强制终止。
  • docker kill <容器ID或名称> 会立即强制终止容器(不等待)
bash 复制代码
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
d32995d7a305   helloworld-django:latest   "python manage.py ru..."   22 minutes ago   Up 22 minutes   0.0.0.0:8100->8000/tcp   kind_bassi
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker stop d32995d7a305
d32995d7a305

3.3.2 docker container stop

bash 复制代码
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
783e1ad29407   helloworld-django:latest   "python manage.py ru..."   16 minutes ago   Up 16 minutes   0.0.0.0:8100->8000/tcp   reverent_lalande
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker container stop 783e1ad29407
783e1ad29407

3.4 删除容器

3.4.1 docker rm

⏹如果你不只是要停止容器,还想连容器一起删除(比如临时容器),可以用docker rm -f-f 相当于先 stoprm

bash 复制代码
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS         PORTS                    NAMES
4c07319bbebc   helloworld-django:latest   "python manage.py ru..."   11 seconds ago   Up 9 seconds   0.0.0.0:8100->8000/tcp   infallible_sammet
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker rm -f 4c07319bbebc
4c07319bbebc

3.4.2 docker container rm

⏹语义化更好

bash 复制代码
apluser@FengYeHong-HP:~$ docker container ls --all
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                      PORTS                    NAMES
6380b917ff0c   helloworld-django:latest   "python manage.py ru..."   44 seconds ago   Up 42 seconds               0.0.0.0:8100->8000/tcp   determined_boyd
f0e58479ba3d   helloworld-django          "python manage.py ru..."   54 minutes ago   Exited (0) 54 minutes ago                            vigorous_leavitt
cca37d72e4ba   helloworld-django          "python manage.py ru..."   54 minutes ago   Exited (0) 54 minutes ago                            musing_franklin
f51614fe80d9   helloworld-django:latest   "python manage.py ru..."   55 minutes ago   Exited (0) 54 minutes ago                            unruffled_franklin
bb11c3bbaf5f   helloworld-django          "python manage.py ru..."   56 minutes ago   Exited (0) 56 minutes ago                            relaxed_banach
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker container rm bb11c3bbaf5f
bb11c3bbaf5f
apluser@FengYeHong-HP:~$

3.5 docker exec进入容器内部

  • docker exec -it 容器ID bash
  • docker exec -it 容器ID sh
bash 复制代码
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
783e1ad29407   helloworld-django:latest   "python manage.py ru..."   12 seconds ago   Up 11 seconds   0.0.0.0:8100->8000/tcp   reverent_lalande
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker exec -it 783e1ad29407 bash
root@783e1ad29407:/app# ls -l
total 20
-rw-r--r-- 1 root root  483 Jun 11 11:48 Dockerfile
-rw-r--r-- 1 root root    0 Jun 13 23:58 db.sqlite3
drwxr-xr-x 4 root root 4096 Jun  7 00:38 hello
-rwxr-xr-x 1 root root  667 Jun  7 00:38 manage.py
-rw-r--r-- 1 root root   16 Jun  7 00:38 requirements.txt
drwxr-xr-x 3 root root 4096 Jun  7 00:38 web_project

3.6 docker container cp 复制容器内的文件到本地

⏹将容器内的requirements.txt文件复制到本地的指定路径中

bash 复制代码
apluser@FengYeHong-HP:~$ docker exec -it f0e58479ba3d bash
root@f0e58479ba3d:/app#
root@f0e58479ba3d:/app# ls -l
total 20
-rw-r--r-- 1 root root  483 Jun 11 11:48 Dockerfile
-rw-r--r-- 1 root root    0 Jun 13 23:58 db.sqlite3
drwxr-xr-x 4 root root 4096 Jun  7 00:38 hello
-rwxr-xr-x 1 root root  667 Jun  7 00:38 manage.py
-rw-r--r-- 1 root root   16 Jun  7 00:38 requirements.txt
drwxr-xr-x 3 root root 4096 Jun  7 00:38 web_project
root@f0e58479ba3d:/app#
root@f0e58479ba3d:/app# exit
exit
apluser@FengYeHong-HP:~$ docker container cp f0e58479ba3d:/app/requirements.txt /home/apluser/work/
Successfully copied 2.05kB to /home/apluser/work/
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ls -l /home/apluser/work/requirements.txt
-rw-r--r-- 1 apluser apluser 16 Jun  7 09:38 /home/apluser/work/requirements.txt

四. registry仓库

Docker Registry 是 Docker 提供的镜像仓库服务,用于 存储、分发和管理 Docker 镜像。可使用 Docker Registry 来

  • 上传(push)镜像
  • 下载(pull)镜像
  • 搭建私有镜像仓库

Docker Registry 常与 docker login, docker push, docker pull 命令配合使用。

4.1 docker pull 镜像拉取

⏹镜像拉取语法:docker pull <registry>/<仓库>:<标签>

bash 复制代码
# 从docker的官网仓库拉取nginx镜像
docker pull nginx:latest
# 也可以写明官方仓库的id进行镜像拉取
docker pull docker.io/guohuiyuan/go-music-dl:latest

# 从私人仓库拉取镜像
docker pull myregistry.com:5000/myimage:latest

4.2 docker push 镜像推送

⏹在推送镜像之前,你需要为镜像添加仓库地址和标签。

bash 复制代码
# docker tag <本地镜像ID或名称> <registry>/<镜像名称>:<标签>
docker tag myapp:latest myregistry.com:5000/myapp:latest

⏹向指定的仓库推送镜像

bash 复制代码
# docker push <registry>/<镜像名称>:<标签>
docker push myregistry.com:5000/myapp:latest
相关推荐
做个文艺程序员4 小时前
用 Codex 写运维脚本(二)—— Prompt 工程:如何精准描述你的脚本需求
运维·prompt
jy41932174 小时前
跨国链路丢包总查不出来?一篇讲透 Traceroute / MTR 的实战指南(含 7 个真实场景)
运维
The_cute_cat4 小时前
CentOS Stream 10虚拟机固定ip总结
linux·运维·centos
Elastic 中国社区官方博客4 小时前
使用 Elastic Observability 和 MCP 的 Agentic 驱动 Kubernetes 调查
数据库·elasticsearch·搜索引擎·云原生·容器·kubernetes·全文检索
阿正的梦工坊4 小时前
DOCKER_DATABASE_URL 逐段解析:部署时候的信息解析
数据库·docker·容器
一只积极向上的小咸鱼4 小时前
Vscode打开多个窗口
linux·运维·服务器·vscode
IMPYLH4 小时前
Linux 的 shred 命令
linux·运维·服务器·bash
咖喱o4 小时前
ARP代理(ARP Proxy)
运维·服务器·网络
郝开4 小时前
Docker Compose 本地环境搭建:nacos
运维·docker·容器
终端行者4 小时前
Jenkins Pipeline在不同阶段指定不同的 agent 或 Docker 容器进行执行任务和固定一个节点分段执行任务,一文带你搞定
java·docker·jenkins·cicd