目录

1.基于现有镜像创建

1.1 启动容器并做修改

1. 首先,通过 docker create 启动一个容器并进入其 bash 环境:

2. 查看当前容器的状态:

3. 修改容器内部的环境(例如安装软件包、修改配置文件等),然后退出容器。

1.2 提交容器为新的镜像

2 基于本地模板创建

2.1 下载操作系统模板

3 基于 Dockerfile 创建

3.1 Docker 镜像的分层结构

3.2 Dockerfile 操作常用指令

3.3 Dockerfile 示例

3.4 构建镜像

3.5 镜像的分层和缓存

4 总结

5.Docker Compose 编排

1 简介

2 项目结构

2.1 Docker Compose 环境安装

3 YAML 文件格式及编写注意事项

3.1 YAML 基本语法

3.2 Docker Compose配置常用字段

3.3 Docker Compose 常用命令

3.5 YAML 示例

4 准备 Nginx 配置

5 编写 docker-compose.yml

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐