Docker镜像与仓库
Posted w787815
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像与仓库相关的知识,希望对你有一定的参考价值。
Dockerfile方式创建镜像 https://hub.docker.com/_/centos/ #找一个centos6.6 的dockerfile链接 [[email protected] ~]# wget https://github.com/CentOS/sig-cloud-instance-images/blob/8911843d9a6cc71aadd81e491f94618aded94f30/docker/Dockerfile [[email protected]-node1 ~]# mkdir docker [[email protected] ~]# mv Dockerfile docker [[email protected] ~]# cd docker [[email protected] docker]# echo > Dockerfile [[email protected] docker]# cat Dockerfile #This is dockerfile for nginx #基础镜像 FROM centos #维护者信息 MAINTAINER zsq [email protected] #相关操作 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命令进行添加或修改 [[email protected]-node1 docker]# touch index.html [[email protected]-node1 docker]# cat index.html <h1>This is test page</h1> [[email protected]-node1 docker]# docker build -t w787815/nginx /root/docker/ #使用docker build进行构建 [[email protected]-node1 docker]# docker run -it --rm w787815/nginx bash [[email protected] /]# nginx [[email protected]-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 [[email protected]-node1 ~]# docker pull registry #pull registry镜像 [[email protected]-node1 opt]# cd [[email protected] ~]# cd /opt/ [[email protected] opt]# rm -rf *
#提升安全、我们做一个认证
[[email protected] opt]# mkdir auth [[email protected] opt]# docker run --entrypoint htpasswd registry:2 -Bbn w787815 zhou.shu2 > auth/htpasswd [[email protected]-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 #用的文件是哪些
[[email protected] 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
[[email protected]-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 [[email protected]-node1 ~]# docker login 127.0.0.1:6000 #本地测试登录 Username: w787815 Password: Login Succeeded #通过登录以后上传镜像 [[email protected] opt]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE w787815/nginx latest 9363c9d402fe 11 hours ago 422 MB [[email protected]-node1 opt]# docker tag 9363c9d402fe 127.0.0.1:6000/w787815/nginx [[email protected] opt]# docker push 127.0.0.1:6000/w787815/nginx docker registry使用的是https,所以当用docker pull命令下载远程镜像时,如果远程docker registry是非https的时候就会报下面的错误。 [[email protected]-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镜像与仓库的主要内容,如果未能解决你的问题,请参考以下文章