Docker学习笔记12

这篇具有很好参考价值的文章主要介绍了Docker学习笔记12。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker Build创建指定应用容器镜像:

docker build: Build an image from a Dockerfile. 从Dockerfile文件创建构建一个镜像。

定义:按照Dockerfile文件所定义内容创建新的临时性容器,把Dockerfile中所定义的每行命令在临时容器中执行,然后生成镜像分层,所有命令执行结束后,生成一个新的镜像,中间过程为commit操作。

分析点:

1)先生成一个临时性的容器;

2)然后有“每行命令”,这些命令都是Shell命令,Shell命令很熟悉的话,就相对来说很容易。执行命令越多,最终得到的容器应用镜像越大,所以要做优化。

3)命令执行结束后,才能生成一个新的镜像。

4)commit:提交操作。

5)Dockerfile的首字母大写。

Dockerfile的工作原理

在Dockerfile定义所要执行的命令,使用docker build创建镜像,过程中会按照Dockerfile所定义的内容打开临时性容器(使用docker commit进行提交),把Dockerfile文件中的命令全部执行完成,就得到一个容器应用镜像。

执行命令越多,最终得到的容器应用镜像越大,所以要做优化。

Dockerfile的关键字:

1)FROM(指定基础镜像)

        FROM <image>: 指定基础镜像为image的最后修改的版本

        FROM <image>:<tag> : 指定基础镜像为该镜像的一个tag版本

2)MAINTAINER(用来指定镜像创建者信息)(英文maintainer:维护者)

        MAINTAINER <name>

        例如:MAINTAINER "changchunhua changchunhua@qq.com”

3)RUN (运行命令,运行安装软件命令等 )

        RUN <command> 

        RUN ["executable", "param1", “param2”,...]

4)CMD (设置container启动时执行的操作)

        CMD ["executable", "param1", “param2”,...]

        CMD command param1 param2 (as a shell)

当Dockerfile指定了ENTRYPOINT,那么使用下面的格式:

        CMD ["param1", "param2"] (as default parameters to ENTRYPOINT)

        注意点:果容器镜像中有此命令,启动容器时,不要手动让容器执行其他命令。

        

5)ENTRYPOINT(设置Container启动时执行的操作)

        与CMD相比,CMD只可以执行一条命令,而ENTRYPOINT可以执行多条命令。

        CMD ["executable", "param1", “param2”,...](like an exec, the preferred form)

        CMD command param1 param2 (as a shell)

        

  6)USER (设置container容器的用户)

        USER daemon

        设置某些进程使用的用户。

7)EXPOSE(指定容器需要映射到宿主机器的端口)(英文意思:暴露端口)

        EXPOSE <port>

8)ENV (用于设置环境变量)

        ENV <key> <value>

9)ADD (从dockerhost主机的src目录的文件复制到container的dest目录中

        ADD <src>  <dest>

        有点像拷贝的意思。

10)VOLUME (指定挂载点)

        VOLUME ["<mountpoint>"]

11)WORKDIR (指定工作目录)

        WORKDIR /path/to/workdir

        原来是在根目录下的,我们需要切换到/opt目录下,那这个WORKDIR关键字来执行。

12)ONBUILD(在子镜像中执行)

        ONBUILD <Dockerfile 关键字>

Dockerfile应用案例:

目的:通过Dockerfile创建一个可以在启动容器时就直接启动httpd的应用的镜像。

步骤:

1)创建一个文件夹(目录),文件夹也是一个命名空间,用于存储Dockerfile所使用的文件:

2)在文件夹(目录)中创建Dockerfile文件和制作镜像所使用到的其他文件,比如网页,用来执行apache启动的脚本。

3)在此目录中,使用docker build命令创建镜像(读取Dockerfile文件)

4)使用创建的镜像启动容器(镜像的验证过程)

思考:

1)基础镜像是谁?centos7u6

2)安装httpd,用yum -y install httpd

3)启动httpd:httpd -k start,使用Shell脚本来启动httpd。

4)把httpd放在前段执行还是放在后端执行?前端。

5)暴露端口:tcp的80端口。

6)添加一个测试文件用于验证apache是否可用。

第一步:创建目录test目录:

mkdir test

cd test

第二步:创建用于启动httpd的脚本文件

#!/bin/bash

# 删除httpd的进程
rm -rf /run/httpd*

# 让apache前端执行
exec /sbin/httpd -D FOREGROUND

第三步:创建用于测试httpd是否可用的index.html

vim index.html

It's working.

第四步:创建Dockerfile文件:

FROM centos
MAINTAINER "changchunhua changchunhua@qq.com"
RUN cd /etc/yum.repos.d
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum install -y httpd
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
ADD index.html /var/www/html
EXPOSE 80
WORKDIR /
CMD ["/bin/bash", "/run-httpd.sh"]

第五步:使用docker build创建容器应用镜像,镜像名称为centos-base-httpd,版本为v1。

-t  --tag list:   Name and optionally a tag in the "name:tag" format 创建容器镜像的过程中,创建一个镜像名称和可选的tag版本号。

Name:镜像名称,命名

tag:版本号

[root@vm1 dockerbuild]# docker build -t centos-base-httpd:v1 .
[+] Building 126.5s (14/14) FINISHED
 => [internal] load build definition from Dockerfile                                      0.1s
 => => transferring dockerfile: 484B                                                      0.0s
 => [internal] load .dockerignore                                                         0.0s
 => => transferring context: 2B                                                           0.0s
 => [internal] load metadata for docker.io/library/centos:latest                          0.0s
 => [internal] load build context                                                         0.1s
 => => transferring context: 156B                                                         0.0s
 => [ 1/10] FROM docker.io/library/centos                                                 0.0s
 => [ 2/10] RUN cd /etc/yum.repos.d                                                       0.9s
 => [ 3/10] RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*             0.5s
 => [ 4/10] RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.  0.5s
 => [ 5/10] RUN yum makecache                                                           105.5s
 => [ 6/10] RUN yum install -y httpd                                                     17.7s
 => [ 7/10] ADD run-httpd.sh /run-httpd.sh                                                0.0s
 => [ 8/10] RUN chmod -v +x /run-httpd.sh                                                 0.5s
 => [ 9/10] ADD index.html /var/www/html                                                  0.0s
 => exporting to image                                                                    0.6s
 => => exporting layers                                                                   0.6s
 => => writing image sha256:c4e7e3152d40a1166593408de294928d3495f0d678cc36512e856e0ae0a4  0.0s
 => => naming to docker.io/library/centos-base-httpd:v1                                   0.0s

这个给出的信息跟之前的版本不太一样。

第六步:使用docker images,检查生成的镜像文件:

[root@vm1 dockerbuild]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
centos-base-httpd   v1        c4e7e3152d40   2 minutes ago   280MB
centos7u6-httpd     v1        4090500d5d7a   4 hours ago     280MB
centos-httpd        v1        a769afc16a9e   2 days ago      351MB
centos              latest    5d0da3dc9764   21 months ago   231MB

第七步:启动一个容器:

docker run -d centos-base-httpd:v1

-d 选项:

--detach: Run container in background and print container ID.

在后端运行一个容器并打印容器ID。

[root@vm1 dockerbuild]# docker run -d centos-base-httpd:v1
73544485f7be1cdc2efbd8ba46e42d79551e213378c1bcfd56eee334e928894c
[root@vm1 dockerbuild]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                                   NAMES
73544485f7be   centos-base-httpd:v1   "/bin/bash /run-http…"   5 seconds ago   Up 4 seconds   80/tcp                                  serene_bohr

可以看到端口80已暴露

容器名称在运行的时候没有指定,容器名称是随机生成的。

使用docker inspect 容器ID,可以查到容器的IP地址。

然后使用curl http://172.17.0.14 可以看到It's working。

在这个过程中,需要解决的一个问题,是centos的yum源的问题。

替换原网站的内容的案例:文章来源地址https://www.toymoban.com/news/detail-849162.html

mkdir /wwwroot

echo "wwwroot" >> /wwwroot/index.html

docker run -d -v /wwwroot:/var/www/html centos-base-httpd:v1

docker inspect 415
curl http://172.17.0.12

到了这里,关于Docker学习笔记12的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

    (复制sql,替换表名执行完毕后,再修改自己想要的字段即可) (复制sql,替换自己的表名) 一个oracle表示一个实例,一个实例可以配置多个服务,独立维护的oracle服务 一个服务内可以有多个表空间,默认表空间就有很多,比如常见的SYSTEM、TEMP、USERS 常见的默认角色: 1、

    2024年02月04日
    浏览(60)
  • 【Docker 学习笔记】Docker 命令大全

    说明 docker cli 命令大全 docker -v 查看当前docker的版本信息 docker --help 可以查看当前docker支持的所有命令 docker COMMAND --help 可以查看子命令的帮助信息 说明:不同版本的docker,支持的命令及参数可能有不同 以下命令在如下版本测试: 容器生命周期管理 命令 功能 语法 常用 OPT

    2024年02月13日
    浏览(32)
  • Docker笔记1 | Docker学习和简介

    本系列笔记学习主要参考书籍《Docker-从入门到实践》以及结合官网的教程,仅作为个人学习使用; 推荐大家阅读此书,感谢作者的书籍,学到了很多。 Docker 官方主页:https://www.docker.com Docker 官方博客:https://blog.docker.com/ Docker 官方文档:https://docs.docker.com/ Docker Store:https

    2023年04月21日
    浏览(36)
  • 【Docker 学习笔记】Docker架构及三要素

    Docker 是一个开源的应用容器引擎,基于Go语言 并遵从Apache2.0协议开源; Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 1. Docker 客户端和服务器 Docker 是客户-服务器( C/S )架构的程序。

    2024年02月15日
    浏览(35)
  • 【Docker 学习笔记】Windows Docker Desktop 安装

    Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。 Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。 因此, Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安

    2024年02月15日
    浏览(45)
  • Docker Dockerfile Docker-compose学习笔记

    Docker目前支持Centos7及以后的版本。64位操作系统,内核版本至少为3.10 安装软件源,以及devicemapper存储类型 添加Docker yum源 安装Docker 启动Docker 测试是否能获取镜像 查看获取的镜像 生效配置信息 安装Docker需要保证你的电脑开启虚拟化 进入任务管理器→点击性能→看一下CPU是

    2024年02月12日
    浏览(45)
  • Docker学习笔记23

    Docker Swarm架构:         Swarm中以集群(Cluster)为单位进行管理,支持服务层面的操作。         集群是Swarm所管理的对象。 基本概念: 节点(Node)为Swarm集群中的一个Docker Engine实例。其中管理节点(Manage Node)负责Swarm集群管理并向工作节点分配任务。工作节点(Work No

    2024年02月12日
    浏览(36)
  • 狂神docker学习笔记

    在学习 Docker 前先把 Linux 基本命令复习一下:狂神 Linux 学习笔记 1.Docker 为什么会出现? 一款产品:开发上线两套环境!应用环境,应用配置! 开发一运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大? 环境配置是十分的麻

    2024年02月07日
    浏览(44)
  • Docker 容器学习笔记

    容器的由来 早先,虚拟机通过操作系统实现相互隔离,保证应用程序在运行时相互独立,避免相互干扰。但是操作系统又笨又重,耗费资源严重: 容器技术只隔离应用程序的运行时环境但容器之间共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配

    2024年02月11日
    浏览(41)
  • Docker学习笔记19

    Docker Compose 作用: 在一个文件中定义复杂的容器应用之间的关系,用一个命令即可执行。 YAML:类似html、xml、标记语言。 YAML格式文件,资源清单文件 docker compose 命令使用yaml文件来启动容器。         start stop         down up (关闭删除容器和启动新容器) docker compose 定义

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包