Docker学习

Docker 安装

Linux安装

  • 一键安装命令

    1
    sudo curl -fsSL https://get.docker.com| bash -s docker --mirror Aliyun
  • 启动docker

    1
    sudo service docker start

配置Pull镜像

  • 镜像站

    项目名称 项目地址 加速地址
    1Panel https://github.com/1Panel-dev/1Panel/ https://docker.1panel.live
    Daocloud https://github.com/DaoCloud/public-image-mirror https://docker.m.daocloud.io
    耗子面板 https://github.com/TheTNB/panel https://hub.rat.dev
  • Linux配置镜像站

    1
    sudo vi /etc/docker/daemon.json
    1
    2
    3
    4
    5
    6
    7
    {
    "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://hub.rat.dev"
    ]
    }
    1
    wq! # 保存退出
    1
    sudo service docker restart  # 重启docker

Docker相关笔记

Docker与传统虚拟机的区别

Docker与虚拟机的区别

Docker的端口映射

Docker端口映射

Docker挂载卷

Docker挂载卷

Docker技术原理

Docker技术原理

Docker是利用Linux内核中的两大原生功能实现容器化

使用docker exec -it [容器]后,使用cat /etc/os-release查看容器的linux发行版,然后更新包索引就可以在容器内安装软件了

制作Dockerfile

就是将启动程序的一系列操作和步骤的命令转换成Dockerfile的形式

Docker网络

Docker网络-桥接模式

Docker网络-Host模式

Docker网络-none模式

Docker Compose

使用yml文件管理多个容器,里面列出了容器之间是如何创建以及如何协同工作。可以简单的把docker compose文件理解成一个或者多个的Docker run命令,按照特定的格式列到了一个文件里面。

docker compose是一个轻量级的容器编排技术,他适合个人使用、单机运行,对于企业级服务器集群,大规模的容器编排需求,则是需要另外的软件Kubernetes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# docker命令示例
docker network create network1

docker run -d --name my_mongodb \
-e MONGO_INITDB_ROOT_USERNAME=name \
-e MONGO_INITDB_ROOT_PASSWORD=pass \
-v /my/datadir:/data/db
--network network1
mongo

docker run -d \
--name my_mongo_express \
-p 8081:8081 \
-e ME_CONFIG_MONGODB_SERVER=my_mongo_db \
-e ME_CONFIG_BASICAUTH_USERNAME=name \
-e ME_CONFIG_BASICAUTH_PASSWORD=pass \
--network network1 \
mongo-express
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# docker compose示例
# Docker会为每一个compose文件创建一个子网,同一个compose文件中的所有容器都会自动加入同一个子网
# depends_on:依赖于哪些容器,会先启动依赖的容器

services:

my_mongodb:
image: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: name
MONGO_INITDB_ROOT_PASSWORD: pass
volumes:
- /my/datadir:/data/db

my_mongo_express:
image: mongo-express
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_SERVER: my_mongo_db
ME_CONFIG_MONGODB_ADMINUSERNAME: name
ME_CONFIG_MONGODB_ADMINPASSWORD: pass
depends_on:
- my_mongodb

Docker 命令大全

一、服务管理命令

命令 说明 应用场景 备注
systemctl start docker 启动 Docker 服务 在安装好 Docker 后,首次使用或服务停止后需要启动时使用该命令。
systemctl stop docker 停止 Docker 服务 当需要对 Docker 进行维护、更新或临时停止使用时,可执行此命令。
systemctl restart docker 重启 Docker 服务 常用于使新的配置生效,比如修改了 Docker 的配置文件后,需要重启服务。
systemctl status docker 查看 Docker 服务状态 可以了解 Docker 服务是否正在运行,以及运行状态的详细信息,如启动时间、进程 ID 等。
systemctl enable docker 设置 Docker 开机自启 确保每次系统启动时,Docker 服务都能自动运行,方便后续使用。
systemctl disable docker 取消 Docker 开机自启 如果不想让 Docker 在开机时自动启动,可使用此命令。
docker info 查看 Docker 系统信息 包括镜像和容器的数量、存储驱动、运行时等详细信息。有助于了解当前 Docker 环境的整体情况。
docker --help 查看帮助文档 当对某个 Docker 命令的用法不确定时,可通过此命令获取详细的帮助信息。
docker version 查看版本信息 包括客户端和服务端的版本号。在排查一些与版本相关的问题时非常有用。

二、镜像管理命令

命令 说明 应用场景 备注
docker images 列出本地所有镜像 展示镜像的仓库名称、标签、镜像 ID、创建时间和大小等信息,方便管理和查看本地镜像资源。
docker search [镜像名称] 在 Docker Hub 上搜索镜像 可根据搜索结果选择合适的镜像进行拉取和使用,例如docker search nginx
docker pull [镜像名称[:标签]] 拉取镜像 若不指定标签,默认拉取最新版本(latest),如docker pull ubuntu:20.04docker pull --platform=xxx nginx,表示拉取特定cpu建构的镜像
docker rmi [镜像名称或ID] 删除镜像 注意,若镜像正在被容器使用,则无法删除,需先停止并删除相关容器。可同时删除多个镜像,如docker rmi ubuntu:20.04 nginx:latest rmi: remove image
docker build -t [目标镜像:标签] [Dockerfile路径] 构建镜像 根据指定路径下的 Dockerfile 构建镜像。-t参数用于指定目标镜像的名称和标签,构建过程会根据 Dockerfile 中的指令逐步创建镜像。 t: tag
docker tag [源镜像:标签] [目标镜像:标签] 添加镜像标签 可用于给镜像打上新的版本号或别名,方便区分和管理不同版本的镜像,例如docker tag ubuntu:20.04 ubuntu:latest
docker push [镜像名称:标签] 推送镜像到仓库 将本地镜像推送到 Docker Hub 或其他远程镜像仓库。需先登录到对应的仓库,如docker push myusername/nginx:latest
docker history [镜像名称或ID] 查看镜像构建历史 展示每一层镜像的创建信息,包括创建时间、执行的命令等,有助于了解镜像的构建过程和内容。
docker inspect [镜像名称或ID] 查看镜像详细信息(JSON) 包含镜像的配置、环境变量、挂载点等各种详细信息,对于排查镜像相关问题非常有帮助。
docker save -o [文件名.tar] [镜像名称或ID] 保存镜像为 tar 文件 便于在不同环境中传输和使用。例如docker save -o ubuntu_20.04.tar ubuntu:20.04 o: output
docker load -i [文件名.tar] 加载镜像 与docker save命令相对应,用于在新环境中恢复镜像。 i: input
docker import [路径] [镜像:标签] 从归档文件创建镜像 可将容器的当前状态保存为一个新的镜像,常用于自定义镜像的制作。

三、容器管理命令

命令 说明 应用场景 备注
docker run [选项] [镜像名称[:标签]] [容器启动命令] 创建并运行容器 常见选项包括-d(后台运行)、-p(端口映射)、-v(卷挂载)等,例如docker run -d -p 80:80 nginx,表示在后台运行一个 nginx 容器,并将宿主机的 80 端口映射到容器的 80 端口。--restart always只要容器停止了就会立即重启;--restart unless-stopped和always相似,区别是手动停止的容器不会尝试重启 d: detach
p: publish
v: volume
docker ps 查看正在运行的容器 显示容器的 ID、名称、使用的镜像、运行状态、端口映射等信息。
docker ps -a 查看所有容器(含停止) 列出所有容器,包括已停止的容器。方便查看所有创建过的容器记录。 a: all
docker start [容器名称或ID] 启动容器 例如docker start mynginx,可将名为 mynginx 的容器启动。
docker stop [容器名称或ID] 停止容器 通过向容器发送停止信号,让容器正常停止运行。
docker restart [容器名称或ID] 重启容器 先停止容器,然后再启动它,常用于使容器内的新配置生效。
docker rm [容器容器名称或ID 删除容器 若容器正在运行,需先停止后才能删除,也可使用-f参数强制删除运行中的容器。 f: force
docker kill [容器名称或ID] 强制终止容器 通过发送 SIGKILL 信号立即停止容器,可能导致数据丢失,一般在容器无法正常停止时使用。
docker exec -it [容器名称或ID] [命令] 容器中执行命令 在一个正在运行的容器内执行命令。例如docker exec -it mynginx bash,可进入 mynginx 容器的 bash 终端,进行交互式操作。 i: interactive
t: tty
docker attach [容器名称或ID] 连接容器主进程 连接到一个正在运行的容器的标准输入、输出和错误输出流。与docker exec不同,docker attach会直接进入容器的主进程,退出时可能会导致容器停止。
docker diff [容器名称或ID] 查看容器文件变动 显示容器内新增、修改和删除的文件和目录,有助于了解容器运行过程中的文件操作情况。
docker commit -m "[信息]" -a "[作者]" [容器名称或ID] [镜像] 从容器生成镜像 -m参数用于添加提交信息,-a参数指定作者信息,例如docker commit -m "updated nginx config" -a "John Doe" mynginx mynewnginx:1.0 m: message
a: author
docker pause [容器名称或ID] 暂停容器进程 容器状态变为暂停,但资源仍被占用,可通过docker unpause恢复。
docker unpause [容器名称或ID] 恢复暂停容器 恢复暂停的容器内的所有进程,使容器继续正常运行。
docker top [容器名称或ID] 查看容器进程 类似于在宿主机上使用top命令查看进程。
docker stats [容器名称或ID] 容器资源使用监控 实时查看容器的资源使用情况,包括 CPU、内存、网络、磁盘 I/O 等指标。
docker cp [容器名称或ID]:[路径] [宿主路径] 复制文件容器→宿主机 从容器内复制文件或目录到宿主机。也可反向操作,将宿主机文件复制到容器内,例如docker cp mynginx:/etc/nginx/nginx.conf /tmp/
docker cp [宿主路径] [容器名称或ID]:[路径] 复制文件宿主机→容器
docker logs [容器名称或ID] 查看容器日志 可用于排查容器内应用程序的运行问题,例如查看 Web 服务器的访问日志或应用程序的错误日志。
docker logs -f [容器名称或ID] 实时查看日志 类似于在 Linux 系统中使用tail -f命令查看日志文件,方便实时监控容器的运行状态。 f: follow下
docker logs --tail=N [容器名称或ID] 查看最后 N 行日志 例如docker logs --tail=100 mynginx,可查看 mynginx 容器日志的最后 100 行。

四、网络管理命令

命令 说明 应用场景 备注
docker network ls 列出所有网络 展示网络的名称、ID、驱动类型、子网等信息,方便管理和查看当前的网络配置。
docker network create [网络名] 创建新的Docker子网络 默认创建的是桥接网络,也可通过指定--driver参数创建其他类型的网络,如docker network create --driver=overlay myoverlaynet
docker network inspect [网络名称或ID] 查看网络详细信息(JSON) 包含网络的配置、连接的容器、子网掩码、网关等详细信息,有助于排查网络相关问题。
docker network rm [网络名称或ID] 删除网络 注意,若网络中还有容器连接,则无法删除,需先断开容器与网络的连接。
docker network connect [网络名称或ID] [容器名称或ID] 将容器加入网络 使容器能够与该网络中的其他容器进行通信,例如docker network connect mynet mynginx
docker network disconnect [网络] [容器] 将容器移出网络 容器将无法再与该网络中的其他容器通信,但仍可通过其他网络进行通信。
docker run --network=[网络名称或ID] [镜像名称[:标签]] 指定网络创建容器 例如docker run --network=mynet -d nginx,创建一个使用 mynet 网络的 nginx 容器。

五、数据卷管理命令

命令 说明 应用场景 备注
docker volume ls 查看所有数据卷 示数据卷的名称、驱动、挂载点等信息,方便管理和查看数据卷资源。
docker volume create [卷名] 创建数据卷 数据卷用于在容器之间或容器与宿主机之间共享数据,可持久化保存数据。
docker volume inspect [卷名] 查看数据卷详细信息(JSON) 包含数据卷的创建时间、挂载路径、使用的驱动等详细信息。
docker volume rm [卷名] 删除数据卷 若数据卷正在被容器使用,则无法删除,需先停止并删除相关容器。
docker run -v [卷名]:[容器路径] [镜像名称[:标签]] 挂载数据卷到容器 在创建容器时挂载数据卷到容器内。例如docker run -v myvolume:/data -d mysql,将名为 myvolume 的数据卷挂载到 mysql 容器的 /data 目录。 v: volume
docker run -v [宿主路径]:[容器路径] 宿主目录挂载到容器 在创建容器时将宿主机的目录挂载到容器内。实现容器与宿主机之间的数据共享,如docker run -v /hostdata:/containerdata -d ubuntu
docker run -v [宿主路径]:[容器路径]:ro 只读挂载宿主目录 在创建容器时将宿主机的目录以只读方式挂载到容器内。容器只能读取挂载目录中的数据,无法进行写入操作,例如docker run -v /hostdata:/containerdata:ro -d ubuntu

六、其他常用命令

命令 说明 应用场景 备注
docker system df 查看 Docker 系统磁盘占用 包括镜像、容器、数据卷占用的磁盘空间。有助于了解系统资源的使用情况,及时清理不必要的资源。
docker system prune 清理系统中未使用资源 包括未使用的镜像、容器、网络和数据卷。释放磁盘空间,优化系统性能。
docker builder prune 清理构建缓存 在构建镜像过程中,会产生一些缓存文件,使用此命令可清理这些缓存,减少磁盘占用。
docker swarm init 初始化 Swarm 集群 将当前节点作为管理节点。用于搭建分布式容器编排环境,实现容器的集群化管理。
docker swarm join --token [令牌] [管理节点地址] 加入 Swarm 集群 将当前节点加入到指定的 Docker Swarm 集群中。需要从管理节点获取加入令牌,实现集群的扩展。
docker stack deploy -c [docker-compose.yml文件路径] [堆栈名] 使用 Compose 部署堆栈 使用 docker-compose.yml 文件部署一个堆栈到 Docker Swarm 集群。方便在集群环境中部署和管理多个相关的容器服务。 c: compose-file
docker-compose up 启动所有服务 在当前目录下根据 docker-compose.yml 文件启动并运行所有服务容器。常用于本地开发和测试环境中,一键启动多个相关的容器服务。对于非标准的文件名test.yaml可以使用-f启动 f: file
docker-compose down 停止并删除服务 停止并删除由 docker-compose.yml 文件定义的所有服务容器、网络和数据卷。用于清理环境,停止相关服务的运行。
docker-compose build 构建服务镜像 根据 docker-compose.yml 文件构建镜像。如果镜像已经存在,会根据文件中的定义更新镜像。
docker-compose ps 查看服务容器状态 列出由 docker-compose.yml 文件定义的所有服务容器的运行状态,方便查看当前启动的容器情况。
docker-compose logs 查看服务日志 查看由 docker-compose.yml 文件定义的所有服务容器的日志输出,方便排查多个容器服务的运行问题。
docker-compose restart 重启服务 重启由 docker-compose.yml 文件定义的所有服务容器,使新的配置生效。
docker-compose stop 停止服务 停止由 docker-compose.yml 文件定义的所有服务容器,但保留容器的状态和数据。
docker-compose start 启动服务 启动之前停止的由 docker-compose.yml 文件定义的所有服务容器。
docker secret create [秘密名称] [文件] 创建 Swarm 秘密 在 Docker Swarm 集群中创建一个秘密,用于存储敏感信息,如密码、密钥等。通过文件路径指定要存储的秘密内容。
docker config create [配置名称] [文件] 创建 Swarm 配置 在 Docker Swarm 集群中创建一个配置,用于存储应用程序的配置文件。通过文件路径指定要存储的配置内容。
docker service create --name [服务名称] --replicas [数量] [镜像名称[:标签]] 创建 Swarm 服务 在 Docker Swarm 集群中创建一个服务,指定服务名称、副本数量和使用的镜像。例如docker service create --name mynginx --replicas 3 nginx,创建一个名为 mynginx 的服务,包含 3 个 nginx 容器副本。
docker service update --replicas [数量] [服务] 更新服务副本数 更新 Docker Swarm 集群中服务的副本数量。例如docker service update --replicas 5 mynginx,将 mynginx 服务的副本数量更新为 5 个。
docker service rm [服务] 删除服务 删除 Docker Swarm 集群中的指定服务,停止并删除服务的所有容器副本。
docker service scale [服务]=[数量] 调整服务副本数量 调整 Docker Swarm 集群中服务的副本数量,与docker service update --replicas命令功能类似。例如docker service scale mynginx = 4,将 mynginx 服务的副本数量调整为 4 个。