目录
[1.1 启动容器并做修改](#1.1 启动容器并做修改)
[1. 首先,通过 docker create 启动一个容器并进入其 bash 环境:](#1. 首先,通过 docker create 启动一个容器并进入其 bash 环境:)
[2. 查看当前容器的状态:](#2. 查看当前容器的状态:)
[3. 修改容器内部的环境(例如安装软件包、修改配置文件等),然后退出容器。](#3. 修改容器内部的环境(例如安装软件包、修改配置文件等),然后退出容器。)
[1.2 提交容器为新的镜像](#1.2 提交容器为新的镜像)
[2 基于本地模板创建](#2 基于本地模板创建)
[2.1 下载操作系统模板](#2.1 下载操作系统模板)
[3 基于 Dockerfile 创建](#3 基于 Dockerfile 创建)
[3.1 Docker 镜像的分层结构](#3.1 Docker 镜像的分层结构)
[3.2 Dockerfile 操作常用指令](#3.2 Dockerfile 操作常用指令)
[3.3 Dockerfile 示例](#3.3 Dockerfile 示例)
[3.4 构建镜像](#3.4 构建镜像)
[3.5 镜像的分层和缓存](#3.5 镜像的分层和缓存)
[4 总结](#4 总结)
[5.Docker Compose 编排](#5.Docker Compose 编排)
[1 简介](#1 简介)
[2 项目结构](#2 项目结构)
[2.1 Docker Compose 环境安装](#2.1 Docker Compose 环境安装)
[3 YAML 文件格式及编写注意事项](#3 YAML 文件格式及编写注意事项)
[3.1 YAML 基本语法](#3.1 YAML 基本语法)
[3.2 Docker Compose配置常用字段](#3.2 Docker Compose配置常用字段)
[3.3 Docker Compose 常用命令](#3.3 Docker Compose 常用命令)
[3.5 YAML 示例](#3.5 YAML 示例)
[4 准备 Nginx 配置](#4 准备 Nginx 配置)
[5 编写 docker-compose.yml](#5 编写 docker-compose.yml)
[6 启动服务](#6 启动服务)
Docker 提供了多种方式来创建镜像,常见的有三种方法:基于已有镜像创建、基于本地模板创建和基于 Dockerfile 创建。以下是这三种方法的详细介绍。
1.基于现有镜像创建
1.1 启动容器并做修改
1. 首先,通过 docker create 启动一个容器并进入其 bash 环境:
docker create -it centos:7 /bin/bash
docker create -it centos:7 /bin/bash
2. 查看当前容器的状态:
docker ps -a
3. 修改容器内部的环境(例如安装软件包、修改配置文件等),然后退出容器。
1.2 提交容器为新的镜像
完成容器内的修改后,可以通过 docker commit 命令将容器提交为新的镜像:
docker commit -m "new" -a "centos" 000550eb36da centos:test
- -m: 提交说明。
- -a: 作者信息。
- 000550eb36da: 容器 ID。
- centos:test: 创建的新镜像名称。
查看创建的新镜像:
docker images
2 基于本地模板创建
通过导入模板文件,可以创建一个新的镜像。模板通常可以从开源项目(如 OPENVZ)中获取。
2.1 下载操作系统模板
例如,下载 Debian 模板:
下载地址为 http://openvz.org/Download/template/precreated
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
也可以使用 curl 下载:
curl -L 下载路径 -o 保存路径
wget
这里 debian:test 是新创建的镜像名称。
3 基于 Dockerfile 创建
Dockerfile 是一个文本文件,其中包含了一系列的指令,每个指令创建一个新的镜像层。通过 Dockerfile,我们可以实现镜像的自动化构建。
3.1 Docker 镜像的分层结构
- **镜像分层:**Docker 镜像不是单一文件,而是由多层文件系统组成。每执行一条 Dockerfile 指令,都会生成新的镜像层。容器启动时会在镜像的只读层上添加一层可读写层。
- **镜像缓存:**Docker 会缓存每一层的镜像,如果某一层的内容没有变化,则会复用缓存层,以提高构建效率。

3.2 Dockerfile 操作常用指令
以下是 Dockerfile 中常用的指令:
1. FROM
指定新镜像基于的基础镜像,Dockerfile 的第一条指令必须为 FROM。
FROM centos:7
2. MAINTAINER
指定镜像的维护者信息:
MAINTAINER "John Doe <johndoe@example.com>"
3. RUN
执行命令并将结果提交到镜像中。常用来安装软件包、修改配置等。
RUN yum install -y httpd
包括系统内的所有的基础命令
4. ENTRYPOINT
设置容器启动时默认执行的命令:
ENTRYPOINT ["httpd"]
5. CMD
容器启动时执行的默认命令。CMD 指令会被 docker run 命令后指定的命令覆盖。
CMD ["httpd", "-D", "FOREGROUND"]
6. EXPOSE
声明容器内的端口:
EXPOSE 80
7. ENV
设置环境变量:
ENV MY_VAR=my_value
8. ADD
将文件或目录从宿主机复制到镜像中,支持从 URL 下载文件,并能自动解压归档文件:
ADD myfile.tar.gz /app
9. COPY
将本地文件或目录复制到镜像中:
COPY . /app
10. VOLUME
在容器中创建挂载点:
VOLUME ["/data"]
11. USER
设置容器内运行命令时的用户:
USER root
12. WORKDIR
WORKDIR /app
13. ONBUILD
设置当该镜像作为基础镜像时,后续 Dockerfile 执行的命令:
ONBUILD RUN echo "Building from base image"
14. HEALTHCHECK
设置容器的健康检查:
HEALTHCHECK CMD curl --fail http://localhost:8080 || exit 1
3.3 Dockerfile 示例
以下是一个简单的 Dockerfile 示例:



3.4 构建镜像
使用以下命令构建镜像:
docker build -t my-web-server .
这将根据当前目录下的 Dockerfile 构建一个名为 my-web-server 的镜像。
3.5 镜像的分层和缓存
- 每一条 Dockerfile 指令都会创建一个新的镜像层。
- Docker 会缓存每一层的镜像,只有在指令或文件发生变化时,才会重新构建该层及其之后的层。
- 镜像层是不可变的,删除容器时只会删除其上面的读写层,底层的镜像层不会丢失。
4 总结
- **基于现有镜像创建:**通过修改容器并提交为新的镜像。
- **基于本地模板创建:**从模板文件导入创建镜像。
- **基于 Dockerfile 创建:**通过编写 Dockerfile 来定制镜像,支持自动化构建。
5.Docker Compose 编排
1 简介


2 项目结构
2.1 Docker Compose 环境安装

3 YAML 文件格式及编写注意事项
YAML(YAML Ain't Markup Language)是一种简洁的数据序列化格式,常用于配置文件。它比 JSON 更加简洁易读,并且支持更复杂的数据结构。使用 YAML 编写 Docker Compose 配置文件时,有几个注意事项:
3.1 YAML 基本语法
- **大小写敏感:**YAML 是大小写敏感的,所以一定要注意区分大小写。
- **缩进:**YAML 使用空格进行缩进,不支持 TAB 缩进。通常推荐使用两个空格作为一个层级的缩进。
- **列表:**列表项使用 -(短横线)表示。
- **字典:**字典使用 :(冒号)连接键值对,冒号后面需要加一个空格。
- **注释:**使用 # 来添加注释。
- **字符串:**如果字符串包含特殊字符,可以使用单引号 ' 或双引号 " 来包裹。
3.2 Docker Compose配置常用字段



3.3 Docker Compose 常用命令

Docker-Compose文件架构

3.5 YAML 示例
① 准备依赖文件



② 编写配置文件docker-compose.yml


4 准备 Nginx 配置
在 nginx/nginx.conf 中,配置 Nginx 作为反向代理,转发请求到 Tomcat 服务:

- proxy_pass http://tomcat:8080 表示将请求转发到名为 tomcat 的服务(在 Compose 中,这个名称会自动解析为 Tomcat 容器的名称)。
- 配置 proxy_set_header 是为了确保转发请求时,Nginx 会把客户端的 IP 和请求头传递给后端服务器。
5 编写 docker-compose.yml
接下来,我们编写 docker-compose.yml 配置文件,定义 Nginx 和 Tomcat 两个服务。以下是一个完整的示例:


- depends_on 确保 Nginx 服务启动时,Tomcat 服务已启动并运行。
- networks 部分将两个服务连接到同一个 Docker 网络 app_network,保证它们之间可以相互通信。
6 启动服务
完成以上配置后,可以通过 docker-compose 启动项目:
cd /opt/compose_nginx_tomcat
docker-compose up -d