Docker-DockerFile的使用

本文介绍了如何使用docker commit和Dockerfile来定制Docker镜像。通过docker commit构建镜像的过程,展示了如何修改容器内容并保存为新镜像。接着详细解释了DockerFile的使用,包括编写Dockerfile、构建镜像及其优势,强调了Dockerfile在镜像构建透明性和体积控制上的重要性。此外,还讨论了镜像构建上下文的概念,并提到了docker build的其他用法,如从远程仓库和本地/远程tar包进行构建。
摘要由CSDN通过智能技术生成

在使用DockerFile定制镜像之前,我们先来了解一下镜像的构成:镜像是容器的基础,每次执行docker run命令的时候都会指定哪个镜像作为容器运行的基础。在之前的栗子中,我们使用的镜像都是来着Docker Hub的镜像。直接使用这些镜像为基础运行容器可以一定程度上满足我们的需求,可是当这些镜像都无法直接满足需求时,我们就需要定制镜像!

docker commit构建

现在我们以定制一个Web服务器为例:

root@ubuntu:~# docker run --name webserver -d -p 80:80 nginx
f0a2ad681b692642be0b825631d8716ae3d8c1fb5ad48148362331df3fae9775

此时,我们在浏览器中访问本机地址,例如以本机为例192.168.0.89,如图:

在这里插入图片描述

这条命令会以Nginx为镜像创建并启动一个容器,映射了80端口,这样我们可以在浏览器中访问这个Nginx服务器!假设,我们现在不喜欢这个欢迎页面的样式,想把它改为“Hello Docker!”,我们可以使用docker exec命令,进入容器,修改器内容:

root@ubuntu:~# docker exec -it webserver bash
root@f0a2ad681b69:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@f0a2ad681b69:/# exit

此时,我们再刷新浏览器的话,发现内容已经发生了改变,如图:

在这里插入图片描述

改变了容器的文件,也就是说,改变了容器的存储层,我们可以使用docker diff来查看文件的修改情况:

root@ubuntu:~# docker diff webserver
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /usr/share/nginx/html/index.html
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp

现在,我们定制好了变化,希望能将其保存下来形成镜像。要知道,我运行一个容器的时候,我们对任何文件的修改操作都会记录在容器的存储层里。Docker提供了一个docker commit命令,可以将容器的存储层保存为镜像。docker commit的语法格式为:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

下面,我们将上面那个容器保存为镜像,命令如下:

root@ubuntu:~# docker commit --author "ycx <ycx921101@163.com>" --message "修改了Nginx欢迎页面" webserver nginx:v1.0
sha256:1b6b342acb5e91a5da9a564818e94ec1041f7a152b249075f109b0c259d580f0

--author指定修改的作者,--message为记录本次修改的内容,webserver为容器名,也可以传入容器ID,nginx:v1.0为仓库名和标签。保存成功之后,会返回一个摘要!接下来,我们使用docker image ls命令来查看当前宿主机上所有的镜像:

root@ubuntu:~# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v1.0                1b6b342acb5e        5 seconds ago       109MB
nginx               latest              5699ececb21c        5 days ago          109MB

我们刚刚保存的镜像已经出现在上面了!!!

我们还可以使用docker history命令来查看镜像内的历史记录,接下来,我们查看以下刚刚保存的镜像内的历史记录,如下:

docker history nginx:v1.0
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
1b6b342acb5e        4 minutes ago       ngi
docker-compose 是一个用于定义和运行多个容器的工具,而 Dockerfile 是用于构建 Docker 镜像的文件。在使用 docker-compose 运行多个容器时,可以通过 Dockerfile 来定义每个容器所需的镜像。 以下是使用 docker-compose 结合 Dockerfile 的基本步骤: 1. 创建一个新的目录,并在该目录中创建一个名为 `docker-compose.yml` 的文件,用于定义容器组成和配置。 2. 在同一目录中,为每个容器创建一个文件夹,并在每个文件夹中创建一个 Dockerfile,用于构建该容器的镜像。可以根据需要,在 Dockerfile 中指定所需的基础镜像、软件包安装、文件复制等操作。 3. 在 `docker-compose.yml` 文件中定义每个容器的配置。使用 `services` 关键字来定义每个服务,并指定该服务使用的镜像和其他配置项。可以参考下面的示例: ```yaml version: "3" services: web: build: ./web # 指定构建 web 服务的 Dockerfile 所在路径 ports: - "8000:8000" # 指定端口映射 volumes: - ./app:/app # 挂载本地目录到容器内部 db: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=secret - MYSQL_DATABASE=mydatabase ``` 在上述示例中,定义了两个服务:`web` 和 `db`。`web` 服务使用 `./web` 目录中的 Dockerfile 构建镜像,映射本地端口 8000 到容器内部的 8000 端口,并挂载 `./app` 目录到容器内部。 `db` 服务使用官方的 `mysql:latest` 镜像,并设置了环境变量。 4. 运行 `docker-compose up` 命令来启动容器。docker-compose 会根据 `docker-compose.yml` 文件中的配置构建并启动容器组。 使用 docker-compose 结合 Dockerfile 可以更方便地定义和管理多个相关的容器,提高开发和部署的效率。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值