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日
    浏览(65)
  • 【Docker 学习笔记】Docker 命令大全

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

    2024年02月13日
    浏览(33)
  • 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日
    浏览(38)
  • 【Docker 学习笔记】Windows Docker Desktop 安装

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

    2024年02月15日
    浏览(51)
  • 【Docker 学习笔记】Docker架构及三要素

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

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

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

    2024年02月12日
    浏览(46)
  • Git && Docker 学习笔记

    注意:该文章摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除! 目录 列举工作中常用的几个git命令? 提交时发生冲突,你能解释冲突是如何产生的吗?你是如何解决的? git的4个区域及转换 如果代码出现bug,你们是如何解决的? git rebase的作用? 列举工作中常用的

    2024年01月23日
    浏览(38)
  • Docker学习笔记27

    docker_swarm发布服务挂载本地卷: 存储卷应用: 持久化存储应用:(最大的一个需求点) 本地卷: --replicas: 副本越多,说明服务越稳定。一个容器掉了,我还有其他容器。 --mount: 把我们的数据保存在本地。 我们只创建了一个副本:我们通过docker service ps cnginxsvc命令检查在

    2024年02月13日
    浏览(22)
  • Docker学习笔记9

    容器使用Docker Host做数据存储: 容器来做数据的存储。清除了容器,保存在容器的数据就会丢失,所以容器不适合做数据的持久化。 -v --volume list:  Bind Mount a volume 绑定挂载一个卷。 把数据保存到真实机上,就能做到持久化。 第一步:在容器主机上创建用于存储目录: 第二

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

    案例三:使用容器运行一个wordpress应用:         语言开发环境(PHP)         数据库 第一步:创建一个工程目录: 第二步:创建一个docker-compose.yaml文件: 我们再理解下depends_on: 这个是依赖的意思。 --links:容器的互联,是一种让多个容器中的应用进行快速交互的方式,

    2024年02月13日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包