Docker镜像与仓库(四)
Dockerfile方式创建镜像
https://hub.docker.com/_/centos/ #找一个centos6.6 的dockerfile链接
[root@linux-node1 ~]# wget https://github.com/CentOS/sig-cloud-instance-images/blob/8911843d9a6cc71aadd81e491f94618aded94f30/docker/Dockerfile [root@linux-node1 ~]# mkdir docker
[root@linux-node1 ~]# mv Dockerfile docker
[root@linux-node1 ~]# cd docker
[root@linux-node1 docker]# echo > Dockerfile
[root@linux-node1 docker]# cat Dockerfile
#This is dockerfile for nginx #基础镜像
FROM centos
#维护者信息
MAINTAINER zsq zsq@qq.com
#相关操作
RUN rpm -ivh https://mirrors.aliyun.com/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
RUN yum install nginx -y
#添加文件
ADD index.html /usr/share/nginx/html/index.html
#参数
RUN echo "daemon off;" >>/etc/nginx/nginx.conf
#设置开放端口
EXPOSE 80
#执行命令
CMD ["nginx"] #ADD index.html 这个文件需要我们在当前目录下有才可以,我们配置我们可以准备好,然后使用ADD命令进行添加或修改 [root@linux-node1 docker]# touch index.html [root@linux-node1 docker]# cat index.html
<h1>This is test page</h1> [root@linux-node1 docker]# docker build -t w787815/nginx /root/docker/ #使用docker build进行构建 [root@linux-node1 docker]# docker run -it --rm w787815/nginx bash
[root@44c794f53ef1 /]# nginx [root@linux-node1 docker]# curl 192.168.158.2
<h1>This is test page<h1>
Dockerfile参数解释
FROM 格式:FROM<image>或FROM<image>:<tag>。
解释:FROM是Dockerfile里的第一条指令(必须是),后面跟有效的镜像名(如果该镜像你的本地仓库没有则会从远程仓库Pull取)。然后后面的其它指令FROM的镜像中执行。 MAINTAINER 格式:MAINTAINER <name>
解释:指定维护者信息。 RUN 格式:RUN <command>或 RUN["executable", "param1", "param2"]。
解释:运行命令,命令较长使可以使用\来换行。推荐使用上面数组的格式 CMD 格式:
CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给ENTRYPOINT的默认参数;
解释:
CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。 ENTRYPOINT 格式:
ENTRYPOINT ["executable", "param1","param2"]
ENTRYPOINT command param1 param2(shell中执行)。
解释:和CMD类似都是配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。ENTRYPOINT没有CMD的可替换特性,也就是你启动容器的时候增加运行的命令不会覆盖ENTRYPOINT指定的命令。
所以生产实践中我们可以同时使用ENTRYPOINT和CMD,
例如: ENTRYPOINT ["/usr/bin/rethinkdb"]
CMD ["--help"]
USER 格式:USER daemon
解释:指定运行容器时的用户名和UID,后续的RUN指令也会使用这里指定的用户。 EXPOSE 格式:EXPOSE<port> [<port>...]
解释:设置Docker容器内部暴露的端口号,如果需要外部访问,还需要启动容器时增加-p或者-P参数进行分配。 ENV 格式:ENV<key> <value>
ENV <key>=<value> ...
解释:设置环境变量,可以在RUN之前使用,然后RUN命令时调用,容器启动时这些环境变量都会被指定 ADD 格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"]
解释:将指定的<src>复制到容器文件系统中的<dest>
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,则docker会帮忙解压缩 VOLUME 格式:VOLUME ["/data"]
解释:可以将本地文件夹或者其他container的文件夹挂载到container中。 WORKDIR 格式:WORKDIR/path/to/workdir
解释:切换目录,为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录。
可以多次切换(相当于cd命令),
也可以使用多个WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如 WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终路径为 /a/b/c。
ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行 ARG 格式:ARG<name>[=<default value>]
解释:ARG指定了一个变量在docker build的时候使用,可以使用--build-arg <varname>=<value>来指定参数的值,不过如果构建的时候不指定就会报错。
Docker仓库
Docker的仓库是DockerHub,类似于github,github有一个开源的软件叫gitlab。Docker也有一个开源软件docker registry [root@linux-node1 ~]# docker pull registry #pull registry镜像 [root@linux-node1 opt]# cd
[root@linux-node1 ~]# cd /opt/
[root@linux-node1 opt]# rm -rf * #提升安全、我们做一个认证
[root@linux-node1 opt]# mkdir auth
[root@linux-node1 opt]# docker run --entrypoint htpasswd registry:2 -Bbn w787815 zhou.shu2 > auth/htpasswd [root@linux-node1 opt]# cat auth/htpasswd #密码是加密的
w787815:$2y$05$f0AV12yb8AikVTTDlymMgu5r9yZCiMiVe2btRieYUL2dzbQ6M8BT2 #默认是5000端口
#把本机的6000端口映射到5000
#--restart=always #docker server重启、容器跟着一起启动
#-v #挂载到容器的根auth目录下
#-e"REGISTRY_AUTH=htpasswd" #认证参数是httpasswd
#-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" #注册认证
#-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd #用的文件是哪些
[root@linux-node1 opt]# docker run -d -p 6000:5000 --restart=always --name registry1 -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
1fa62130c89de73b1d5c9ebc029a1f1567133af83b4e7703b97f44f25a24bb21 [root@linux-node1 opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fa62130c89d registry "/entrypoint.sh /e..." 3 minutes ago Up 3 minutes 0.0.0.0:6000->5000/tcp registry1 [root@linux-node1 ~]# docker login 127.0.0.1:6000 #本地测试登录
Username: w787815
Password:
Login Succeeded #通过登录以后上传镜像
[root@linux-node1 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
w787815/nginx latest 9363c9d402fe 11 hours ago 422 MB [root@linux-node1 opt]# docker tag 9363c9d402fe 127.0.0.1:6000/w787815/nginx
[root@linux-node1 opt]# docker push 127.0.0.1:6000/w787815/nginx docker registry使用的是https,所以当用docker pull命令下载远程镜像时,如果远程docker registry是非https的时候就会报下面的错误。
[root@linux-node2 ~]# docker pull 10.10.10.188:6000/w787815/nginx
Using default tag: latest
Error response from daemon: Get https://10.10.10.188:6000/v2/: http: server gave HTTP response to HTTPS client
Docker镜像与仓库(四)的更多相关文章
- 第四章 使用Docker镜像和仓库(二)
第四章 使用Docker镜像和仓库(二) 回顾: 开始学习之前,我先pull下来ubuntu和fedora镜像 [#9#cloudsoar@cloudsoar-virtual-machine ~]$s ...
- 第四章 使用Docker镜像和仓库
第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...
- Docker之- 使用Docker 镜像和仓库
目录 使用Docker 镜像和仓库 什么是 Docker 镜像 列出 Docker 镜像 tag 标签 Docker Hub 拉取镜像 查找镜像 构建镜像 创建Docker Hub 账号 使用 Doc ...
- Docker镜像的仓库及底层依赖的核心技术(3)
一.docker镜像的仓库 仓库分为公共仓库和私有仓库 DockerHub的官方仓库:https://hub.docker.com DockerPool社区仓库:https://dl.dockerpo ...
- Docker镜像与仓库(一)
Docker镜像与仓库(一) Docker镜像与仓库(一) 如何查找镜像? Docker Hub https://registry.hub.docker.com docker search [OPTI ...
- 04_Docker入门(下)之docker镜像和仓库的使用
docker镜像和仓库 镜像介绍 docker镜像是由文件系统叠加而成的.最低端是一个引导文件系统,即bootfs.当一个容器启动后,它会将被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存以 ...
- docker镜像的仓库
一.docker镜像的仓库 --- repos-registry的创建: 仓库分为公共仓库和私有仓库 DockerHub的官方仓库 https://hub.docker.com DockerPool社 ...
- 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记
docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...
- docker镜像与仓库
1.docker image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount) 2.镜像存储地址 /var/lib/docker 3.镜像操作 列出镜像 镜像标签和仓库 查 ...
随机推荐
- Django]models中定义的choices 字典在页面中显示值
在django的models.py 中,我们定义了一些choices的元组,类似一些字典值,一般都是下拉框或者单多选框,例如 0对应男 1对应女等 class Area(models.Model): ...
- 痞子衡嵌入式:简析i.MXRT1170 Cortex-M7 FlexRAM ECC功能特点、开启步骤、性能影响
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7内核的FlexRAM ECC功能. ECC是"Error Correcting ...
- Windows之wsl简单配置
Windows的wsl是Windows环境下启动的一个Linux环境,通常我们安装的是Ubuntu版本. 1.安装和简单配置 这里推荐一个文章,按照文章一步一步完全做就行 https://www.ji ...
- 关于代码覆盖 or 冲突
关于代码覆盖 or 冲突 在使用git同步代码时,步骤一般为 commit -> pull -> push 那这个过程的意义何在呢? 首先是区分本地仓库 与 远程仓库,可以理解为本地git ...
- LeetCode 题解 | 面试题57 - II. 和为s的连续正数序列
题目描述 面试题57 - II. 和为s的连续正数序列 难度简单37收藏分享切换为英文关注反馈 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内 ...
- 【Linux】Apache服务配置
一. URL 统一资源定位符 http://www.sina.com.cn:80/admin/index.html 二. 环境安装 LAMP 源码包编译安装 版本可以自定义 生产环境 安全 稳定 开发 ...
- C语言移动一个点
#include"stdio.h"#include"windows.h"#include"conio.h"#define M 3#defin ...
- AJ学IOS(39)UI之核心动画之CABasicAnimation(基础动画)
AJ分享,必须精品 一.CABasicAnimation简介 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPat ...
- RNN循环神经网络(Recurrent Neural Network)学习
一.RNN简介 1.)什么是RNN? RNN是一种特殊的神经网络结构,考虑前一时刻的输入,且赋予了网络对前面的内容的一种'记忆'功能. 2.)RNN可以解决什么问题? 时间先后顺序的问题都可以使用RN ...
- Python 分析后告诉你闲鱼上哪些商品抢手?
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...