测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Docker----Dockerfile关键字详解
收藏本文
作者:redrose2100 类别: 日期:2022-05-03 14:08:48 阅读:1137 次 消耗积分:0 分
![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/06c9f19c-9517-11ee-b9ec-0242ac110004.png) [TOC] ## 一、Dockerfile基础知识 * 每个保留关键字(指令)都是必须是大写字母 * 执行从上到下顺序执行 * \#表示注释 * 每个指令都会创建提交一个新的额镜像层,并提交 ## 二、Dockerfile常用的指令 (1) FROM 指定基础镜像 ```bash FROM centos ``` (2)MAINTAINER 指定镜像的维护者信息,一般为邮箱 ```bash MAINTAINER hitredrose@163.com ``` (3)RUN 镜像构建时需要执行的命令 ```bash RUN yum install -y wget ``` (4)ADD 增加文件,会自动解压 ```bash ADD python.tar.gz /usr/local/ ``` (5)WORKDIR 设置当前工作目录 ```bash WORKDIR /usr/local/python/ ``` (6)VOLUME 挂载主机目录 ```bash VOLUME ["/usr/local/python","/usr/local/java/"] ``` (7)EXPOSE 暴露端口,注意这里指仅暴露容器的端口,并不会将容器端口与宿主机端口映射。也就是说在使用docker run的时候仍然需要继续使用-p进行端口映射,换言之,EXPOSE更多的作用在于给Dockerfile开发者提供开发端口的提示提示作用 ```bash EXPOSE 80 ``` (8)CMD 指定容器启动的时候需要执行的命令,注意CMD只有最后一个命令会生效 ```bash CMD /bin/bash ``` (9)ENTRYPOINT 指定容器启动时需要运行的命令,注意ENTRYPOINT命令可以追加命令,即如果有多条ENTRYPOINT命令会全部执行,这是ENTRYPOINT命令和CMD命令最大的区别 ```bash ENTRYPOINT cd /opt ENTRYPOINT /bin/bash ``` (10)ONBUILD 当构建一个被继承Dockerfile,这个时候就会运行ONBUILD指令 (11)COPY 类似ADD命令,将文件拷贝到镜像中 (11)ENV 构建的时候设置环境变量 ## 三、Dockerfile实战测试 ### 1、编写如下Dockerfile文件,创建自己的centos镜像 ```bash FROM centos MAINTAINER redrose2100
ENV JAVA_HOME /usr/local/jdk_1.8/ WORKDIR /usr/local RUN yum install -y vim RUN yum install -y net-tools EXPOSE 80 CMD echo $JAVA_HOME CMD echo "---end---" CMD /bin/bash ``` ### 2、编译镜像 ```bash docker build -f Dockerfile -t mycentos:1.0 . ``` 如 ```bash [root@iZbp1flzt6x7pxmxfhmxeeZ opt]# docker build -f Dockerfile -t mycentos:1.0 . Sending build context to Docker daemon 673.8MB Step 1/10 : FROM centos ---> 5d0da3dc9764 Step 2/10 : MAINTAINER redrose2100
---> Running in da64144bd09f Removing intermediate container da64144bd09f ---> 27c3c3914066 Step 3/10 : ENV JAVA_HOME /usr/local/jdk_1.8/ ---> Running in e2bc434f38ed Removing intermediate container e2bc434f38ed ---> 5702a1a5fcb4 Step 4/10 : WORKDIR /usr/local ---> Running in 5e89bfc4bac3 Removing intermediate container 5e89bfc4bac3 ---> 4c9ffec050e5 Step 5/10 : RUN yum install -y vim ---> Running in a7d01621e43c CentOS Linux 8 - AppStream 3.3 MB/s | 9.5 MB 00:02 CentOS Linux 8 - BaseOS 2.6 MB/s | 7.5 MB 00:02 CentOS Linux 8 - Extras 8.6 kB/s | 10 kB 00:01 Last metadata expiration check: 0:00:01 ago on Thu Oct 28 15:40:46 2021. Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M Installing dependencies: gpm-libs x86_64 1.20.7-17.el8 appstream 39 k vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k which x86_64 2.21-12.el8 baseos 49 k Transaction Summary ================================================================================ Install 5 Packages Total download size: 7.8 M Installed size: 30 M Downloading Packages: (1/5): gpm-libs-1.20.7-17.el8.x86_64.rpm 325 kB/s | 39 kB 00:00 (2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 74 kB/s | 48 kB 00:00 (3/5): which-2.21-12.el8.x86_64.rpm 859 kB/s | 49 kB 00:00 (4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 1.5 MB/s | 1.4 MB 00:00 (5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 6.0 MB/s | 6.3 MB 00:01 -------------------------------------------------------------------------------- Total 1.5 MB/s | 7.8 MB 00:05 warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00 Importing GPG key 0x8483C65D: Userid : "CentOS (CentOS Official Signing Key)
" Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : which-2.21-12.el8.x86_64 1/5 Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5 Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5 Installing : gpm-libs-1.20.7-17.el8.x86_64 4/5 Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64 4/5 Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5 Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5 Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5 Verifying : gpm-libs-1.20.7-17.el8.x86_64 1/5 Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5 Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5 Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5 Verifying : which-2.21-12.el8.x86_64 5/5 Installed: gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64 vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch which-2.21-12.el8.x86_64 Complete! Removing intermediate container a7d01621e43c ---> d5265b632c5d Step 6/10 : RUN yum install -y net-tools ---> Running in e4936d8440ef Last metadata expiration check: 0:00:42 ago on Thu Oct 28 15:40:46 2021. Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: net-tools x86_64 2.0-0.52.20160912git.el8 baseos 322 k Transaction Summary ================================================================================ Install 1 Package Total download size: 322 k Installed size: 942 k Downloading Packages: net-tools-2.0-0.52.20160912git.el8.x86_64.rpm 1.9 MB/s | 322 kB 00:00 -------------------------------------------------------------------------------- Total 285 kB/s | 322 kB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1 Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64 1/1 Verifying : net-tools-2.0-0.52.20160912git.el8.x86_64 1/1 Installed: net-tools-2.0-0.52.20160912git.el8.x86_64 Complete! Removing intermediate container e4936d8440ef ---> c46a704ec937 Step 7/10 : EXPOSE 80 ---> Running in 4abcb3b7a496 Removing intermediate container 4abcb3b7a496 ---> 9f90477f2a46 Step 8/10 : CMD echo $JAVA_HOME ---> Running in 808052b626b3 Removing intermediate container 808052b626b3 ---> ed2f970d17e1 Step 9/10 : CMD echo "---end---" ---> Running in 29c9a4149056 Removing intermediate container 29c9a4149056 ---> 72af12cddaf8 Step 10/10 : CMD /bin/bash ---> Running in 6bc2bc8e3d73 Removing intermediate container 6bc2bc8e3d73 ---> 122504aa874c Successfully built 122504aa874c Successfully tagged mycentos:1.0 [root@iZbp1flzt6x7pxmxfhmxeeZ opt]# ``` 然后执行docker images 查看如下: ```bash [root@iZbp1flzt6x7pxmxfhmxeeZ opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 1.0 122504aa874c About a minute ago 337MB redrose2100/centos 1.1 2184c3aadaab 30 hours ago 231MB nginx latest f8f4ffc8092c 4 weeks ago 133MB mysql 5.7 9f35042c6a98 4 weeks ago 448MB centos latest 5d0da3dc9764 6 weeks ago 231MB [root@iZbp1flzt6x7pxmxfhmxeeZ opt]# ``` ### 3、测试运行 如下,当前工作目录已经切换到 /usr/local 目录下,JAVA_HOME变量也是有值的,ifconfig命令也支持了 ```bash [root@iZbp1flzt6x7pxmxfhmxeeZ opt]# docker run -it mycentos:1.0 [root@b868b5ba93e9 local]# pwd /usr/local [root@b868b5ba93e9 local]# echo $JAVA_HOME /usr/local/jdk_1.8/ [root@b868b5ba93e9 local]# ifconfig eth0: flags=4163
mtu 1500 inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet) RX packets 8 bytes 656 (656.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73
mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@b868b5ba93e9 local]# ```
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/67
上一篇:
Docker----Docker容器名互联link技术及其本质
下一篇:
Docker----Docker发布镜像到DockerHub
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件