范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

详解Docker你需要知道的Docker进阶知识五

  Dockerfile
  Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用  docker build   命令从 Dockerfile 中读取指令来构建镜像。 上下文
  构建镜像时,该过程的第一件事是将  Dockerfile   文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile  ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。
  使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行:  FROM ubuntu:14.04
  在 Dockerfile 中可以指定一个用户,后续的  RUN  , CMD   以及 ENTRYPOINT   指令都会使用该用户身份去执行,该用户必须已存在。 USER soundhearer
  除了指定用户之外,还可以使用  WORKDIR   指定当前工作目录(CWD), RUN  , CMD  , COPY  , ADD   指令将在指定的工作目录中执行。 WORKDIR /
  RUN 指令用于执行命令,该指令有两种形式:  RUN  ,在 shell 中执行命令 command  ,一般默认的 shell   为 /bin/sh  。 RUN["executable","param1","param2",...]  ,运行可执行程序 executable  ,可以指定程序需要的命令行参数。
  例如我们执行更新命令:  RUN apt-get update
  CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:  CMD echo "hello soundhearer"
  可以在  docker run   时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou"  。
  CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数:  CMD ["param1", "param2"]
  ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被  docker run   时指定的指令覆盖,如下示例: FROM ubuntu:latest ENTRYPOINT ["ls", "-a"] CMD ["-l"]
  上述文件构建出来的镜像,使用  docker run image   等同于 docker run image ls-a-l  。使用 docker run image-i-s   等同于 docker run image ls-a-i-s  。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。 COPY和ADD
  COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下:  ADD ...  ADD ["",... ""]  COPY ...  COPY ["",... ""]
  `` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。
  不需要预先存在,不存在时会自动创建,如果使用相对路径,则   为相对于工作目录的路径。
  COPY 和 ADD 的不同之处在于,ADD 可以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。  ENV
  ENV 指令用于设置环境变量:  ENV   ENV = =...VOLUME
  VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:  VOLUME /data1 /data2
  上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。  EXPOSE
  EXPOSE 用来暴露容器运行时会监听的端口,它只是一种声明,让外部能够知道容器内部的服务端口。可以在运行容器时通过  -p   选项来绑定容器监听端口到宿主机端口,这些监听端口不一定需要通过 EXPOSE 暴露。当使用 -P  (大写)选项时会自动绑定所有暴露出来的端口。 EXPOSE port从Dockerfile创建镜像
  学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像:  #cd /Docker-Ser/Dockerfile/centos-ssh #vi Dockerfile #生成的新镜像以centos镜像为基础 FROM centos #指定作者信息 MAINTAINER soundhearer # 安装openssh-server RUN yum -y install openssh-server RUN mkdir /var/run/sshd RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key #指定root密码 RUN /bin/echo "root:123456"|chpasswd RUN /bin/sed -i "s/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g" /etc/pam.d/sshd RUN /bin/echo -e "LANG="en_US.UTF-8"" > /etc/default/local EXPOSE 22 CMD /usr/sbin/sshd -D
  构建镜像  [root@VM_0_17_centos dockerfile]# docker build -t 5588/centos-ssh:v1.0.0 . Sending build context to Docker daemon  14.85kB Step 1/11 : FROM centos  ---> 470671670cac Step 2/11 : MAINTAINER soundhearer  ---> Running in d5705e869a7e Removing intermediate container d5705e869a7e  ---> 76f3b6fa1597 Step 3/11 : RUN yum -y install openssh-server  ---> Running in dcd4af79f6c1
  查看镜像  [root@VM_0_17_centos dockerfile]# docker images REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE 5588/centos-ssh                                     v1.0.0              c16cedf7052c        2 minutes ago       278MB
  启动容器  [root@VM_0_17_centos dockerfile]# docker run -itd -p 10022:22 --name test_centos_1 5588/centos-ssh:v1.0.0 ae638dff422529144e0066a98611a96ea51cd1469aa8007a503ed8b53ab62d22 [root@VM_0_17_centos dockerfile]#
  查看已经启动的容器  [root@VM_0_17_centos dockerfile]# docker ps CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                   NAMES ae638dff4225        5588/centos-ssh:v1.0.0   "/bin/sh -c "/usr/sb…"   51 seconds ago      Up 50 seconds       0.0.0.0:10022->22/tcp   test_centos_1
  测试远程登录  [root@VM_0_17_centos dockerfile]# ssh -p10022 127.0.0.1 root@127.0.0.1"s password: [root@ae638dff4225 ~]#Docker ComposeCompose
  Compose 是运行由多个容器组成的  Docker   应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。 Service
  在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存服务、消息队列服务等。  使用步骤
  使用 Compose 的步骤如下:  定义和构建组成应用的各个服务的镜像,主要是编写各个服务的  Dockerfile   文件 定义应用服务描述文件,主要是编写  docker-compose.yml   文件 启动应用
  关于 docker-compose.yml 文件的详细格式可以参考 官方文档。
  目前有三种版本的 Compose 文件格式:  version 1: 最早的版本使用传统格式,将在未来弃用  version 2: 现在使用最多的文件格式  version 3: 最新版本,旨在使得 Compose 和已被集成到 Docker Engine 中的 swarm mode 互相兼容。  安装
  下载  docker-compose-Linux-x86_64
  下载成功后,为了方便使用,可以将其添加到 PATH 路径下  sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compos sudo chmod +x /usr/local/bin/docker-compose
  执行完成后,就能够在终端下直接使用  docker-compose   命令了: [root@VM_0_17_centos dockerfile]# docker-compose --help Define and run multi-container applications with Docker.  Usage:   docker-compose [-f ...] [options] [COMMAND] [ARGS...]   docker-compose -h|--help实例
  接下来我们将创建一个 Web 应用,该应用包含两个容器:  web 容器:提供 web 服务,该服务需要连接后端的 redis 服务  redis 容器:提供 redis 服务
  项目目录结构如下:  app |----web |     |----web.py |     |----requirements.txt |     |----Dockerfile | |----docker-compose.yml
  首先编辑  app/web/web.py   文件,写入下面的内容: from flask import Flask from redis import Redis  app = Flask(__name__) redis = Redis(host="redis", port=6379)  @app.route("/") def hello():     redis.incr("number")     return "Hello Docker! # %s" % redis.get("number")  if __name__ == "__main__":     app.run(host="0.0.0.0", port=80, debug=True)
  上述代码创建了一个简单的 Web 应用。该应用会连接  redis   服务,在访问 /   页面时,自动将变量 number   加 1。
  编辑  app/web/requirements.txt   文件,输入如下内容: flask==0.10 redis==2.10.3
  requirements.txt   文件存放了 Web 应用依赖的第三方库包的名称和版本信息。
  编辑  app/web/Dockerfile   文件,添加如下内容 FROM python:2.7 COPY ./ /web/ WORKDIR /web RUN pip install -r requirements.txt CMD python web.py
  上述  Dockerfile   定义了 Web 应用镜像,该镜像基于 python:2.7   基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD   指令指定了应用的启动命令。
  编辑  app/docker-compose.yml   文件: services:   redis:     image: redis:3.2   web:     build:       context: /home/shiyanlou/app/web     depends_on:     - redis     ports:     - 8001:80/tcp     volumes:     - /home/shiyanlou/app/web:/web:rw version: "3.0"
  该  docker-compose.yml   文件定义了两个服务,分别为 web   和 redis   服务,并且配置了 web   服务的端口映射和挂载目录。depends_on   定义了依赖关系,被依赖的服会先启动。
  进入  app   目录,执行 docker-compose up   命令来启动应用: [root@VM_0_17_centos app]# docker-compose up Building web Step 1/5 : FROM python:2.7  ---> fbc983cb5352 Step 2/5 : COPY ./ /web/  ---> 10bdacc94674 Step 3/5 : WORKDIR /web  ---> Running in 7ff982241c92 Removing intermediate container 7ff982241c92  ---> 0a37af3e9713 Step 4/5 : RUN pip install -r requirements.txt  ---> Running in 9832ab0165d1 DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support Collecting flask==0.10   Downloading Flask-0.10.tar.gz (544 kB) Collecting redis==2.10.3   Downloading redis-2.10.3.tar.gz (86 kB) Collecting Werkzeug>=0.7   Downloading Werkzeug-1.0.0-py2.py3-none-any.whl (298 kB)  Collecting Jinja2>=2.4   Downloading Jinja2-2.11.1-py2.py3-none-any.whl (126 kB) Collecting itsdangerous>=0.21   Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) Collecting MarkupSafe>=0.23   Downloading MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl (24 kB) Building wheels for collected packages: flask, redis   Building wheel for flask (setup.py): started   Building wheel for flask (setup.py): finished with status "done"   Created wheel for flask: filename=Flask-0.10-py2-none-any.whl size=115528 sha256=967ce1269d455054b3713a87985eeceda84b437ff0c2d0ba8855bb813daf9c10   Stored in directory: /root/.cache/pip/wheels/75/15/2c/b14930624e0a52fdd754537b216da52d96b79dd5d14966abb7   Building wheel for redis (setup.py): started   Building wheel for redis (setup.py): finished with status "done"   Created wheel for redis: filename=redis-2.10.3-py2-none-any.whl size=50695 sha256=9741ffb0196e0dc9d1818811a48f206aff9c53699dfe822e1b0f9591f72db9e8   Stored in directory: /root/.cache/pip/wheels/12/ce/01/1aba4866d936f9a08aeb59a573b188c17daea0da2537c68dea Successfully built flask redis Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, flask, redis Successfully installed Jinja2-2.11.1 MarkupSafe-1.1.1 Werkzeug-1.0.0 flask-0.10 itsdangerous-1.1.0 redis-2.10.3 Removing intermediate container 9832ab0165d1  ---> f12bc5dc1aac Step 5/5 : CMD python web.py  ---> Running in aec73ed63ab6 Removing intermediate container aec73ed63ab6  ---> 228792f96283 Successfully built 228792f96283 Successfully tagged app_web:latest WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build`  Creating app_redis_1 ... done Creating app_redis_1 ...  Creating app_web_1   ... done Attaching to app_redis_1, app_web_1 redis_1  | 1:C 14 Mar 13:54:22.030 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf redis_1  |                 _._ redis_1  |            _.-``__ ""-._ redis_1  |       _.-``    `.  `_.  ""-._           Redis 3.2.12 (00000000/0) 64 bit redis_1  |   .-`` .-```.  ```/    _.,_ ""-._ redis_1  |  (    "      ,       .-`  | `,    )     Running in standalone mode redis_1  |  |`-._`-...-` __...-.``-._|"` _.-"|     Port: 6379 redis_1  |  |    `-._   `._    /     _.-"    |     PID: 1 redis_1  |   `-._    `-._  `-./  _.-"    _.-"                                    redis_1  |  |`-._`-._    `-.__.-"    _.-"_.-"| redis_1  |  |    `-._`-._        _.-"_.-"    |           http://redis.io redis_1  |   `-._    `-._`-.__.-"_.-"    _.-" redis_1  |  |`-._`-._    `-.__.-"    _.-"_.-"|                                   redis_1  |  |    `-._`-._        _.-"_.-"    |                                   redis_1  |   `-._    `-._`-.__.-"_.-"    _.-" redis_1  |       `-._    `-.__.-"    _.-" redis_1  |           `-._        _.-" redis_1  |               `-.__.-"                                                redis_1  |  redis_1  | 1:M 14 Mar 13:54:22.033 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. redis_1  | 1:M 14 Mar 13:54:22.033 # Server started, Redis version 3.2.12 redis_1  | 1:M 14 Mar 13:54:22.033 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add "vm.overcommit_memory = 1" to /etc/sysctl.conf and then reboot or run the command "sysctl vm.overcommit_memory=1" for this to take effect. redis_1  | 1:M 14 Mar 13:54:22.033 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command "echo never > /sys/kernel/mm/transparent_hugepage/enabled" as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. redis_1  | 1:M 14 Mar 13:54:22.033 * The server is now ready to accept connections on port 6379 web_1    |  * Running on http://0.0.0.0:80/ (Press CTRL+C to quit) web_1    |  * Restarting with stat web_1    |  * Debugger is active! web_1    |  * Debugger PIN: 764-159-950 web_1    | 116.30.196.114 - - [14/Mar/2020 13:58:04] "GET / HTTP/1.1" 200 - web_1    | 116.30.196.114 - - [14/Mar/2020 13:58:05] "GET /favicon.ico HTTP/1.1" 404 - web_1    |  * Detected change in "/web/web.py", reloading web_1    |  * Restarting with stat web_1    |  * Debugger is active! web_1    |  * Debugger PIN: 764-159-950
  启动成功后,就可以打开网址  127.0.0.1:8001   来访问 Web 应用了。
  另外一些命令:  # 后台运行应用: docker-compose up -d # 查看容器 docker-compose ps # 查看镜像 docker-compose images # 停止并删除应用,相关容器也会一并删除 docker-compose down

21年5月12日不管你经历多痛的事情,到最后都会渐渐遗忘5月12日每日简报,农历四月初一,星期三!刷视频不如看看今天报告1第七次全国人口普查结果公布!全国人口共14。1178亿人人口平均年龄38。8岁,劳动年龄人口8。8亿2教育部5月起5月29日,不是所有的坚持都会有结果,但是总有一些坚持5月29日每日简报,农历四月十八,星期六!刷视频不如看看今天报告11。2亿摄氏度燃烧101秒,中国人造太阳创造新世界纪录22021年高考倒计时10天试题增强开放性,各地紧盯防疫考纪每日一午餐康师傅爱鲜大餐加肉夹馍康师傅方便面新品,包装算康师傅里最好的了。打开这肉是惊到我了,据说康师傅一年销量就一斤牛肉,哈哈,但这个三片肉是实打实的。还有三个汤包菜包,粉包。这面给我不一样的感觉,和康师傅其他职场社交婉转表达建议一旦进入一个企业,就应迅速融入那个企业文化,但言听计从之际,也别忘了做个勇敢的部属。每个公司都有所谓的员工规章,当然游戏规则规定,人人都应遵守,但若片面修改,让人难以接受时,又该如史上最失败的麒麟980手机,价格并不贵,却遭用户冷落不得不说,在过去的几年间,麒麟处理器已经具备了与骁龙抗衡的实力。尤其是从今年的麒麟980开始,它将了骁龙855一军,提前两个多月首发,成为安卓阵营第一颗7nm芯片。在过去的半年多时小米最经典的四款旗舰手机,皆为一代神机,你用过哪一款?小米如今成立了9年的时间,发布的机型非常多,也有很多经典的作品,但今年的小米产品线有了大的变化,而今天我们就来跟大家聊聊关于小米手机最经典的四款旗舰手机,皆为一代神机,你用过哪一款小米MIUI与华为EMUI,谁才是国产安卓定制系统的佼佼者?很多朋友问MIUI和EMUI对比哪个更好用,我整理了这些先说说功能对比(细节)1。小米的拍的照片,用手捏就可以旋转,华为没有,当然这功能无所谓2。小米可以让好多应用分身,不只是微信新追剧神器可当手机支架的南卡无线充电宝POW2序随着无线充电手机的普及,各种无线充电器充电板层出不穷。而无线充电宝则少有厂商出品,今天就大家测评一下南卡家的第2代无线充电宝POW2。同时,这是南卡公司升级品牌Logo之后的第一小米10深度测评能否支撑起3999起的价格?屏幕与工业设计篇Mi10小米的数字旗舰,被1999捆绑了近5年时间,用一年一步的脚步在慢慢提升它的起售价,也用一年一步的脚步在慢慢提升它的基本配置。3年前的小米6,骁龙835变焦双摄立体声扬声器,手机越玩越冰?原来是有黑鲨散热背夹PRO大家好,又是你们的校长啦!今天带给大家的是黑鲨最近很火的散热背夹PRO,想必大家对于这款产品也是十分了解了,但是对于其是集体用就没有那么清楚啦,那么接下来就看看校长的文章吧!先给大首发微云台影像系统,vivoX50系列正式发布!今天晚上vivo举行了新品发布会!发布了vivo家族X系列的全新产品X50系列,这次的X50系列一共有三款机型,分别是X50X50ProX50Pro。并且此次X50系列全系都标配了
洋垃圾预定,谷歌官宣亲儿子Pixel6系列近日谷歌正式宣布,亲儿子Pixel6系列将于10月20日正式发布,官方表示这是完全重新设计的Google手机。这点还是比较认同的,就单单这个外观设计上,颜值可以说相较于前两代有了大先父遗传是真的吗?为什么很多科学家都支持此观点?巴普洛夫做过一个实验。拿一头白母猪和一头黑公猪交配。后代有三种颜色,白的黑的花的。下一次用这头白母猪和一头白公猪交配。后代仍然是三种颜色,白的黑的花的。这就是有名的巴普洛夫实验。也讨厌别人发微信语音给我,有没有什么方法让他打字?不用打字啊!让他把语音转成文字就可以了,微信有这个功能按一下小话筒不就行了?直接告诉对方我耳朵背听不清打字给我吧,也用不着婉转或您转换成文字看。您说烦V信语音?那视频通话不也是听语请问zynq这种嵌入ARM硬核的FPGA比纯逻辑设计的FPGA有哪些优势和劣势?ZYNQ目前用于实际项目很成熟了,ZYNQ的ARM硬核弥补了纯FPGA缺陷,纯FPGA如果用软核实现ARM功能消耗资源特别多效果也不理想,ZYNQ的ARM资源不够就用IP消耗逻辑资ios15发布已经有一段时间,这7条关键改进你会升级吗?专注功能。iOS15系统将原先的勿扰模式,更改为专注模式。可以根据情况设置多个专注模式使用。自动识别拍照内容文字。iOS15系统的相机,可以对准文字内容,直接识别。识别到电话号码,佳能851。4在背景虚化方面有没有70200f2。8好?当然没有70200f2。8好,这是肯定的。焦段越长,背景虚化就越好,85焦段完全不能与200焦段比的。如果你在拍摄人像时,用70200f2。8,焦段一直放着200端上,无论是拍摄人1979年国产收音机和录音机大概多少钱,进口的呢?1979年县一级只有县广播站有一台录音机,老式平放大盘,为的是录下书记县长的讲话向全县播放。基层单位及个人都没有录音机。到8O年代有的中学开始为英语老师配录音机,黑色的,被称为半头每个月的流量都用100G以上,选择中国移动的哪个套餐比较好?每月100GB以上的流量,建议还是办一条宽带比较好。除非你天天在户外办公,只能用流量。现在移动大流量套餐基本上都是100GB封顶,超过100GB限速到128Kbps,也就是16KB界读丨为什么高通骁龙和华为麒麟,都斗不过苹果A系芯片?让苹果的A系列芯片,跑跑安卓,再看,不是一个系统没法评判麒麟最好的芯片在没被美国针对时候已经超越高通了,再给点时间超过苹果a芯片指日可待。可惜美国发现这威胁太大立刻封禁了华为这方面卡萨帝与美的哪个好?有懂的吗,给推荐一下?推荐你买卡萨帝哈,这个牌子的空调是真的好!它可不只是单纯调节温度那么简单,我买的卡萨帝银河空调还能说话呢,智能语音功能可以给孩子讲故事播放音乐,还能播报每日天气和空气情况新闻等,还为什么网上总有两个极端,一个说不得华为不行,一个说不得小米好?一是因为华为和小米是竞争关系,两边的高管时不时恕一下。二是因为华为和小米做得都不错,各有粉丝无数。三是在中美对抗的背景下,大家对于科技品牌赋予了太多的期待!特别是对于华为小米联想这