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.04。docker 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 个。 –