1. 创建一个docker compose配置,包含两个容器。一个Nginx,一个Mysql。

version: '3.8'

services:
  nginx:
    image: nginx:latest
    container_name: my-nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    restart: unless-stopped
    depends_on:
      - mysql
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 10s
      timeout: 5s
      retries: 3

  mysql:
    image: mysql:8.0
    container_name: my-mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: exampledb
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpass
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpass"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  mysql_data:


2. 在docker compose的yml文件中配置上面两个容器,使其可以通过主机名互相访问。

version: '3.8'

services:
  nginx:
    image: nginx:latest
    container_name: my-nginx
    hostname: nginx-host
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/usr/share/nginx/html
    restart: unless-stopped
    depends_on:
      - mysql
    networks:
      - app-network

  mysql:
    image: mysql:8.0
    container_name: my-mysql
    hostname: mysql-host
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: exampledb
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpass
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    restart: unless-stopped
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  mysql_data:


3. 如果一个项目中,有前端、后端、数据库,你认为启动顺序应该是什么样的。

先启动数据库,然后是后端,最后是前端。


4. dockercompose中可以保障服务启动的先后顺序吗?可以保障某服务启动后再启动另一个服务吗

可以使用以下方法:

方法

说明

depends_on

控制容器启动顺序

等待脚本(如 wait-for-it.sh

确保服务真正就绪

healthcheck + condition

最可靠的服务依赖管理方式

自定义 entrypoint

更灵活控制启动流程


5. docker compose如何设置开机自动启动,比如设置之前的Harbor仓库可以开机自动启动。

在/etc/systemd/system/harbor.service中

写入:

[Unit]
Description=Harbor Container Registry
After=docker.service
Requires=docker.service

[Service]
Type=simple
Restart=always
WorkingDirectory=/opt/harbor  # 替换为你实际存放 harbor-compose 文件的目录
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down

[Install]
WantedBy=multi-user.target

重新加载systemd

sudo systemctl daemon-reload

设置服务开机自启

sudo systemctl enable harbor


6. Dockerfile那么多内容,主要是在干啥呢?请归纳为4个关键步骤/事项

Dockerfile = 指定基础镜像 + 构建运行环境 + 配置启动方式 + 安全优化


7. 如何查看每个docker容器的资源使用情况

可以通过以下方式查看

方法

场景

docker stats

快速查看实时资源使用

docker inspect

查看资源配置与限制

cAdvisor

可视化查看所有容器资源

top / htop

调试容器内部进程

Prometheus + Grafana

长期监控、集群监控


8. 如何通过docker镜像获取到其Dockerfile

可以通过以下方法:

方法

说明

查看官方文档

最准确的方式

docker history

快速了解镜像构建步骤

dive 工具

图形化查看每层变化

dfimage 工具

尝试还原原始 Dockerfile

手动分析 + 编写

适用于私有镜像或非标准镜像



9. docker inspect的作用是什么,里面有哪些关键信息

docker inspect 是 Docker 提供的一个命令,用于查看容器、镜像、网络或数据卷的详细配置和运行状态信息。它提供了关于 Docker 对象的全面元数据,帮助开发者和运维人员调试、监控和理解容器化应用的行为。

以他人的幸福为幸福,以他人的享乐为享乐。