容器技术基础(4)| 学习笔记

简介: 快速学习容器技术基础,课程将从容器技术基础开始,阐述容器技术是如何基于 linux 内核当中的 Namespace、Cgroups 等技术得以实现及Docker 容器的发展背景和基础知识,并对容器运行时、OCI、CRI和 Kubernetes 之间的关系展产生新的认知。

开发者学堂课程【现代应用容器技术快速入门第四课时:容器技术基础(4)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/830/detail/13953


容器技术基础(4)


内容介绍

1.   DockerFile

2.   VOLUME 添加数据卷

3.   案例分析

 

1.DockerFile

image.png

 

类比一下

JavaEE Hello.java ----> Hello.classDocker images ----> DockerFile

Docker File 就是对docker 镜像的描述文件。

DockerFile 内容基础知识

1.每条保留字指令都必须为大写字母后面且后面要跟随至少一个参数

2.指令按照从上到下,顺序执行

3.#标识注释

4.每条指令都会创建一个新的镜像层,并对镜像进行提交

Docker 执行dockerFile 的大致流程

1.docker 从基础镜像运行一个容器

2.执行一条指令并对容器做出修改

3.执行类似docker commit 的操作提交一个新的镜像层

4.docker 再基于刚提交的镜像运行一个新容器

5.执行dockerfile 中的下一条指令直到所有指令都执行完成

关键字

FROM 基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER 镜像维护者的姓名和邮箱地址

RUN 容器构建需要运行的命令

EXPOSE 当前容器对外暴露的端口

WORKDIR 指定在创建容器后,终端默认登录的工作目录

ENV 用来构建镜像过程中设置环境变量

ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包

COPY 类似ADD,拷贝文件和目录到镜像中。<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置

VOLUME 容器数据卷,用于数据保存和持久化工作

CMD 指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD命令,会被run 之后的命令覆盖。

ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,不会被run之后的命令覆盖。

ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后发镜像的onbuild会被触发

 

2.VOLUME添加数据卷

示例:

1.编写dockerFile

#volume testFROM centos
VOLUME
CMD echo "finished,------success"
CMD /bin/bash
#翻译成上面的容器数据卷#docker run -it -v /host1:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash

2.使用build 编译dockerFile

docker buiild -f /mydocker/DockerFile -t binxer/centos .   #结尾有 .

使用 --volumes-from 实现数据卷共享

以上一步新建的镜像为模板运行容器dc01/dc02/dc03

docker run -it --name dc01 binxer/centos #创建dc01 作为父容器docker -it --name dc02 --volumes-from dc01 binxer/centos #创建dc02 链接dc01docker -it --name dc03 --volumes-from dc01 binxer/centos #创建dc03 链接dc01

此时删除 dc01 数据卷也不会消失,因为数据卷的生命周期一直持续到没有容器使用它为止。

 

3.案例分析

案例:自定义centos

自定义mycentos 使我们自己的镜像具备如下:

1.支持vim编辑器

2.支持ifconfig命令

FROM centosMAINTAINER test@abc.com

ENV mypath /user/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "success-----------ok"
CMD /bin/bash

执行构建命令

docker build -t 新镜像名字:TAG .# 需要注意,结尾有 .

案例:自定义 tomcat9

1.mkdir -p /mydockerfile/tomcat9

2.在上述目录下 touch c.txt

3.将jdk和tomcat安装的压缩包拷贝进上一步目录apache-tomcat-9.0.37-deployer.tar.gz jdk-8u261-linux-x64.tar.gz

FROM centosMAINTAINERbin0234<bin0234@foxmail.com>
# 把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下COPY c.txt /usr/local/cincontainer.txt
# 把java与tomcat添加到容器中ADDjdk-8u261-linux-x64.tar.gz /usr/local/
ADDapache-tomcat-9.0.37.tar.gz /usr/local/
# 安装vimRUN yum -y install vim
# 设置工作访问的WORKDIR路径,登录落脚点ENV MYPATH /usr/local
WORKDIR $MYPATH
# 配置java与tomcat环境变量ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/75
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器运行时监听的端口EXPOSE 8080
# 启动运行时tomcat# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.37/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.37/bin/catalina.sh","run"]
CMD/usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out

•  执行build命令

docker build -t mytomcat9 .

•  执行run命令,并添加数据卷映射webapps和logs

docker run -d -p 80:8080 --name mycat9 -v /mydockerfile/mytomcat9/webapps:/usr/local/apache-tomcat-9.0.37/webapps -v /mydockerfile/mytomcat9/logs:/usr/local/apache-tomcat-9.0.37/logs --privileged=true mytomcat9

| 常用安装

•  tomcat

docker search tomcatdocker pull tomcat
docker run -it -p 80:8080 tomcat

•  mysql

docker search mysql docker pull mysql:5.7 #拉取一个5.7版本的mysql docker run -p 1234:3306 --name mysql -v /hostLocation/mysql/conf:/etc/mysql/conf.d -v /hostLocation/mysql/logs:/logs -v /hostLocation/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234556 -d mysql:5.7
# 命令说明 # -p 1234:3306将主机1234端口映射到容器3306端口 # --name mysql容器名字 # -v /hostLocation/mysql/conf:/etc/mysql/conf.d 将主机/hostLocation/mysql/conf/挂载到容器的/etc/mysql/conf.d # -v /hostLocation/mysql/logs:/logs 将主机/hostLocation/mysql/logs 目录挂载到容器/logs # -v /hostLocation/mysql/data:/var/lib/mysql 将主机/hostLocation/mysql/data 目录挂载到容器的/var/lib/mysql # -e MYSQL_ROOT_PASSWOED=123456 初始化Root密码 # -d mysql:5.7 后台运行mysql5.6 docker exec -it MySQL运行成功后的容器ID /bin/bash

•  redis

docker search redisdocker pull redis:3.2
docker run -p 6379:6379 -v /myredis/data:/data -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

| 将镜像推送到 阿里云

1. 登录阿里云Docker Registry

$ sudo docker login --username=你的id registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/bin_playerground/study:[镜像版本号]

3. 将镜像推送到Registry

$ sudo docker login --username=你的id registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/bin_playerground/study:[镜像版本号]$ sudo docker push registry.cn-hangzhou.aliyuncs.com/bin_playerground/study:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

相关文章
|
11月前
|
存储 容器
46.[HarmonyOS NEXT RelativeContainer案例三] 打造自适应容器:内容驱动的智能尺寸调整技术
在HarmonyOS NEXT的UI开发中,创建能够根据内容自动调整尺寸的容器是实现灵活布局的关键。RelativeContainer结合自适应尺寸设置,可以实现内容驱动的智能尺寸调整,使UI更加灵活且易于维护。本教程将详细讲解如何创建自适应尺寸的RelativeContainer,帮助你掌握这一实用技术。
332 5
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
643 59
|
9月前
|
Kubernetes Cloud Native 持续交付
Docker:轻量级容器化技术解析
Docker:轻量级容器化技术解析
|
9月前
|
运维 测试技术 Docker
Docker:轻量级容器化技术革命
Docker:轻量级容器化技术革命
|
弹性计算 Java Maven
从代码到容器:Cloud Native Buildpacks技术解析
Cloud Native Buildpacks(CNB)是一种标准化、云原生的容器镜像构建系统,旨在消除手动编写Dockerfile,提供可重复、安全且高效的构建流程。它通过分层策略生成符合OCI标准的镜像,实现应用与基础镜像解耦,并自动化依赖管理和更新。阿里云应用管理支持通过CNB技术一键部署应用至ECS,简化构建和运行流程。
|
存储 虚拟化 Docker
|
开发工具 虚拟化 git
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
551 5
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
554 4
|
人工智能 Kubernetes Cloud Native
荣获2024年AI Cloud Native典型案例,阿里云容器产品技术能力获认可
2024全球数字经济大会云·AI·计算创新发展大会,阿里云容器服务团队携手客户,荣获“2024年AI Cloud Native典型案例”。