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镜像与仓库(四)的更多相关文章

  1. 第四章 使用Docker镜像和仓库(二)

    第四章 使用Docker镜像和仓库(二) 回顾: 开始学习之前,我先pull下来ubuntu和fedora镜像 [#9#cloudsoar@cloudsoar-virtual-machine ~]$s ...

  2. 第四章 使用Docker镜像和仓库

    第4章 使用Docker镜像和仓库 回顾: 回顾如何使用 docker run 创建最基本的容器 $sudo docker run -i -t --name another_container_mum ...

  3. Docker之- 使用Docker 镜像和仓库

    目录 使用Docker 镜像和仓库 什么是 Docker 镜像 列出 Docker 镜像 tag 标签 Docker Hub 拉取镜像 查找镜像 构建镜像 创建Docker Hub 账号 使用 Doc ...

  4. Docker镜像的仓库及底层依赖的核心技术(3)

    一.docker镜像的仓库 仓库分为公共仓库和私有仓库 DockerHub的官方仓库:https://hub.docker.com DockerPool社区仓库:https://dl.dockerpo ...

  5. Docker镜像与仓库(一)

    Docker镜像与仓库(一) Docker镜像与仓库(一) 如何查找镜像? Docker Hub https://registry.hub.docker.com docker search [OPTI ...

  6. 04_Docker入门(下)之docker镜像和仓库的使用

    docker镜像和仓库 镜像介绍 docker镜像是由文件系统叠加而成的.最低端是一个引导文件系统,即bootfs.当一个容器启动后,它会将被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存以 ...

  7. docker镜像的仓库

    一.docker镜像的仓库 --- repos-registry的创建: 仓库分为公共仓库和私有仓库 DockerHub的官方仓库 https://hub.docker.com DockerPool社 ...

  8. 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

    docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...

  9. docker镜像与仓库

    1.docker image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount)   2.镜像存储地址 /var/lib/docker 3.镜像操作 列出镜像 镜像标签和仓库 查 ...

随机推荐

  1. .NET(C#)实现桌面背景切换(控制台应用程序,windows服务版的未实现成功)

    AdvancedBackgroundJimmy.Program.cs using AdvancedBackground; using Microsoft.Win32; using System; us ...

  2. SVN同步代码问题集锦

    1.删除文件后file missing警告                      相关链接: http://blog.sina.com.cn/s/blog_63e26d560100ve00.htm ...

  3. Java 中的递归

    递归 递归 一种通过调用某个方法来描述需要重复进行的操作.该方法的特点就是可以自己调用自己. 案例一 排队的问题 在生活中,我们经常需要排队.在排队中,我们怎么才能知道自己所排在第几位呢? 我们也许会 ...

  4. 让你第一次认识到Java的内存管理

    发现之前写的可读性不好,这次准备试试换风格,去掉长篇大论,觉得这个风格好的,麻烦点个赞啦 清理.JVM的妙处 大家以后都是程序员,假设你很不幸,需要自己交钱租房子. 你作为一个小穷人,租的房子到期了( ...

  5. 1065 A+B and C (64bit) (20分)(水)

    Given three integers A, B and C in [−], you are supposed to tell whether A+B>C. Input Specificati ...

  6. PTA | 1010 一元多项式求导 (25分)

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: ...

  7. CF633(div.2)A. Filling Diamonds

    题目描述 http://codeforces.com/contest/1339/problem/A 给定一个 \(n(1\le n \le 10^9)\) ,问用一个由两个三角形组成的菱形,填充下面这 ...

  8. usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接

    usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接 自动充提币接口开发. 可对接:商城系统,游戏APP,交易平台,网站,各类APP -实现自动充提,查询,上链等功能接 ...

  9. Linux 磁盘管理篇,连接文件

    连接文件分为两种 1.像Window类似的快捷方式的文件 2.通过文件系统的inode来产生新的文件名而不是新文件(硬连接) 创建连接文件            ln 创建连接文件的快捷方式      ...

  10. python10

     一.多进程multiprocessing multiprocessing包是Python中的多进程管理包.与threading.Thread类似,它可以利用multiprocessing.Proce ...