Docker学习笔记

25 6.6~8.4 分钟 2954

#复习/Linux/docker

常用命令

在Linux系统中,Docker镜像站的配置文件路径是什么?==/etc/docker/daemon.json==
+++
修改完Linux系统的Docker镜像站配置后,需要用什么命令重启服务?==sudo systemctl restart docker==
+++
在Windows/Mac的Docker Desktop中,镜像站配置应添加在哪个配置文件中?::Docker Engine配置文件

从仓库下载镜像的命令是什么?::docker pull <镜像名>
+++
列出所有本地镜像的命令是什么?::docker images
+++
删除一个本地镜像的命令是什么?::docker rmi <镜像名/ID>
+++
Docker镜像的完整命名格式是什么?::registry/namespace/repository:tag
+++
在镜像命名中,什么标签可以省略不写?::latest
+++

在docker中删除镜像是否影响当前的容器::影响容器的重启和新建,不影响当前运行的容器

如何查看docker本身的配置信息::docker info

容器管理

创建并运行容器的命令是什么?后台运行加什么::docker run -d
+++
查看所有容器(包括已停止的)的命令是什么?::docker ps -a 注意ps看不见停止的
+++
停止一个正在运行的容器的命令是什么?::docker stop <容器ID/名称>
+++
删除一个已停止的容器的命令是什么?怎么强制删除::docker rm <容器ID/名称> -f
+++
将容器内部端口8080映射到宿主机端口80的参数写法是什么?::-p 80:8080
+++

数据持久化方案

如何运行nginx的时候后台运行,映射端口,并且目录绑定挂载::docker run -d -p 80:80 -v / www/halo:/usr/share/nginx/html -nginx

创建一个名为 my-data的命名卷的命令是什么,如何查看所在的目录::docker volume create my-data. docker volume inspect my-data
+++

列出所有卷的命令,删除卷,删除所有没在使用的卷的命令::docker volume list . docker volume rm nginx . docker volume prune -a

run的其他参数

环境变量

如何在运行数据库容器的时候传递环境变量
???
docker run -d

-p 43333:27017

-e MONGO_INITDB_ROOT_USERNAME=admini

-e MONGO_INITDB_ROOT_PASSWORD=Admin14789

mongo

+++

配置重启策略两个重启::docker run -d --restart always nginx.一直重启. --restart unless-stopped

如何查看当时创建容器的配置::docker inspect id

docker run和create命令的区别是什么::create只创建不启动

docker如何追踪查看日志:: docker logs -f

进入一个正在运行的容器内部并打开bash的命令是什么?如何退出?::docker exec -it [容器ID] bash。 exit.

容器内安装程序需要做什么?::

docker原理

Docker 是一种基于容器技术的虚拟化平台,其核心原理是利用 Linux 内核的命名空间(Namespaces)和控制组(Cgroups)等特性,实现进程级别的隔离与资源限制。

命名空间(Namespaces):为容器提供独立的系统视图,包括进程 ID、网络、挂载点、用户、主机名等,使得每个容器看起来像是运行在独立的操作系统中。
控制组(Cgroups):用于限制、记录和隔离进程组使用的物理资源(如 CPU、内存、磁盘 I/O 等),确保容器不会耗尽宿主机资源。
镜像分层与联合文件系统(UnionFS):Docker 镜像采用分层结构,每一层代表一个文件系统的增量变更。通过联合挂载技术(如 overlay2),将多个只读层和一个可写层合并成一个完整的文件系统供容器使用,提高存储效率和启动速度。
容器 = 镜像 + 可写层 + 运行时环境:容器本质上是在镜像基础上添加一个可写层,并在其上运行指定的进程。
Docker 通过这些机制实现了轻量级、可移植、快速启动的应用封装与部署方式。

每个容器看起来像是独立的Linux系统

Docker镜像制作

如何打包docker镜像,后面用的再学吧.现在记得大体就是在项目里创建一个Dockerfile文件,里面填上所需要的镜像,还有命令等.打包上传::1

Docker网络

桥接模式

  1. 容器默认连接到的网络模式是什么?::桥接模式(Bridge)。
  2. 创建自定义桥接网络的命令是什么?==docker network create [网络名]==

+++

docker容器间不可以互相访问,通过==创建子网==,不需要配置ip就可以直接通讯

+++

host模式

docker使用host模式的命令.使用后的ip是多少::docker run -d --network host nginx. 使用host后是共享了宿主机的内部ip

docker看所有的子网命令,删除命令::list .rm

docker compose.多容器编排

Docker Compose的作用是什么?::通过一个YAML文件来定义和运行多个关联的容器。

root@iZm5e0a4bge4lf075lkds7Z halo1]# cat docker-compose.yaml 

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.22
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
  
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://47.104.162.147
  halodb:
    image: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

docker-compose停止容器和停止并删除容器命令:stop down