docker镜像加速

docker-io
先到 https://cr.console.aliyun.com/ 注册一下,登录成功后,在控制台,看左侧,有一个加速器按钮,点开找到自己的专属加速链接,我的是 https://olxmv577.mirror.aliyuncs.com
(hotlight2010 https://45colej5.mirror.aliyuncs.com 我的)
然后vi /etc/sysconfig/docker
最下面增加一行:
other_args="--registry-mirror=https://olxmv577.mirror.aliyuncs.com" #centos6用这个
other_args="--registry-mirror=http://db411c61.m.daocloud.io" #centos7用这个
然后就是重启一下docker就ok了,测试发现速度杠杠的。 docker1.13
1.方法1

在 daocloud.io 免费注册一个用户。
帐号:xgmxgmxm 密码:xxxxxxx(与邮箱密码一样) 邮箱:xgmxgmxm@163.com


登录后,点击顶部菜单“加速器”
copy “加速器”命令并在 host 中执行(你的命令可能跟我的会稍有不同)。
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://db411c61.m.daocloud.io  #执行这个
该脚本可以将 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同

2.方法2 

/etc/sysconfig/docker
更改OPTIONS的内容设置为:
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'

OPTIONS='--selinux-enabled=false --insecure-registry daocloud.io'

 

docker镜像常用命令

docker images  //查看本地都有哪些镜像
docker tag centos aming123:(tag名) // 创建镜像 基于centos镜像
docker search (image-name) //从docker仓库搜索docker镜像后面是关键词
docker rmi centos //用来删除指定镜像
docker pull centos //下载镜像
docker commit -m "install httpd" -a "Aming" 2c74d574293f aming/centos #创建镜像基于容器-m 描述 -a 作者 docker-id 镜像名
docker export container_id > file.tar // 导出容器可以迁移到其他机器上需要导入
cat centos--x86.tar.gz |docker import - centos--x86 #本地模块导入
cat file.tar |docker import - aming_test //这样会生成aming_test的镜像 docker history a6c10b1a3c7c #查看dockerfile创建的镜像的执行过程。 a6c10b1a3c7c是镜像Id

镜像下载地址

镜像下载地址
https://hub.docker.com/u/kubeguide/
https://hub.daocloud.io
https://hub.docker.com/
https://dev.aliyun.com/search.html
https://hub.tenxcloud.com/search?q=jimmy&source=tenxcloud #时速云

dockerfile创建镜像

Dockerfile 分为四部分: 基础镜像信息、维护者信息、镜像操作指令、容器启动时执行命令。

Dockerfile语法
. FROM 格式 FROM 或者 FROM :
比如
FROM centos
FROM centos:latest . MAINTAINER 格式 MAINTAIN
比如
MAINTAINER aming aming@aminglinux.com . RUN 格式为 RUN 或者 RUN ["executable", "param1", "param2"]
比如
RUN yum install httpd
RUN ["/bin/bash", "-c", "echo hello"] . CMD
三种格式:
CMD ["executable", "param1", "param2"]
CMD command param1 param2
CMD ["param1", "param2"] RUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。比如
CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"] . EXPOSE 格式为 EXPOSE [...]
比如
EXPOSE
这个用来指定要映射出去的端口,比如容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。 . ENV 格式 ENV
比如
ENV PATH /usr/local/mysql/bin:$PATH
它主要是为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量
ENV MYSQL_version 5.6
例子:
   ENV MY_VERSION 1.3
   RUN apt-get install -y mypackage=$MY_VERSION
. ADD 格式 add
将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。比如
ADD /local/nginx/conf / [如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest]
. COPY 格式同add
COPY src dest
使用方法和add一样,不同的是,它不支持url
需要注意: src路径是以Dockerfile为相对路径的 dest 目录不存在会被创建,但是/aaa这样的目录是创建不了的。/home/aaa 这是可以被创建的 . ENTRYPOINT 格式类似CMD
表示容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:
CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。比如,容器名字为aming
CMD [“/bin/echo”, “test ”]
而我们启动容器的命令是 docker run aming 这样会输出 test
假如启动容器的命令是 docker run -it aming /bin/bash 什么都不会输出 ENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行
ENTRYPOINT ["echo", "test"]
docker run -it aming
则会输入 test ,这相当于要执行命令 echo test 10.WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
如果 WORKDIR 不存在,Docker 会自动为我们创建。
例子:
  WORKDIR /data 11.VOLUME /var/lib/mysql
相当于 docker run -tid -v /var/lib/mysql #数据存在host 容器删掉不影响数据。VOLUME 的作用与 -v 等效 Dockerfile 示例:(搭建nginx镜像) 先下载nginx的配置文件 wget http://www.apelearn.com/study_v2/.nginx_conf vim Dockerfile //内容如下
############################################################
# Dockerfile to build Nginx Installed Containers
# Based on CentOS
############################################################
# Set the base image to CentOS
FROM centos
# File Author / Maintainer
MAINTAINER aming aming@aminglinux.com # Install necessary tools
RUN yum install -y pcre-devel wget net-tools gcc
RUN yum install -y zlib zlib-devel make
RUN yum install -y openssl-devel
# Install Nginx
ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
RUN tar zxvf nginx-1.8..tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.8. && ./configure --prefix=/usr/local/nginx && make && make install
RUN rm -fv /usr/local/nginx/conf/nginx.conf
COPY .nginx_conf /usr/local/nginx/conf/nginx.conf # Expose ports
EXPOSE
# Set the default command to execute
# when creating a new container
CMD /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf && tail -f #有cmd命令的 docker run -tid xgm_mysql ,需要加-ti参数才能启动 创建镜像:
docker build -t centos_nginx .

如果执行 docker build 时没有指定 tag,会使用默认值 latest。其效果相当于:

docker build -t ubuntu-with-vi:latest .


docker  images 可以看到我们新建的镜像

#启动镜像和服务注意:
docker run -tid d32f /bin/bash -c "/usr/local/nginx/sbin/nginx && tail -f"
像启动nginx. 因为nginx是后台的服务。docker默认认为没有启动,所以docker会自杀掉,导致容器启动不起来。

RUN、CMD 和 ENTRYPOINT

简单的说:

.RUN 执行命令并创建新的镜像层,RUN 经常用于安装软件包。

.CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换。

.ENTRYPOINT 配置容器启动时运行的命令。

下面我们详细分析。

Shell 和 Exec 格式

我们可用两种方式指定 RUN、CMD 和 ENTRYPOINT 要运行的命令:Shell 格式和 Exec 格式,二者在使用上有细微的区别。

Shell 格式

<instruction> <command>

例如:

RUN apt-get install python3   

CMD echo "Hello world"   

ENTRYPOINT echo "Hello world"  

当指令执行时,shell 格式底层会调用 /bin/sh -c <command> 。

例如下面的 Dockerfile 片段: 

ENV name Cloud Man   

ENTRYPOINT echo "Hello, $name"  

执行 docker run <image> 将输出: 

Hello, Cloud Man 

注意环境变量 name 已经被值 Cloud Man 替换。 

下面来看 Exec 格式。 

Exec 格式 

<instruction> ["executable", "param1", "param2", ...] 

例如: 

RUN ["apt-get", "install", "python3"]   

CMD ["/bin/echo", "Hello world"]   

ENTRYPOINT ["/bin/echo", "Hello world"] 

当指令执行时,会直接调用 <command>,不会被 shell 解析。
例如下面的 Dockerfile 片段: ENV name Cloud Man ENTRYPOINT ["/bin/echo", "Hello, $name"] 运行容器将输出: Hello, $name 注意环境变量“name”没有被替换。
如果希望使用环境变量,照如下修改 ENV name Cloud Man ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $name"] 运行容器将输出: Hello, Cloud Man CMD 和 ENTRYPOINT 推荐使用 Exec 格式,因为指令可读性更强,更容易理解。RUN 则两种格式都可以。 RUN RUN 指令通常用于安装应用和软件包。 RUN 在当前镜像的顶部执行命令,并通过创建新的镜像层。Dockerfile 中常常包含多个 RUN 指令。 RUN 有两种格式: . Shell 格式:RUN . Exec 格式:RUN ["executable", "param1", "param2"] 下面是使用 RUN 安装多个包的例子: RUN apt-get update && apt-get install -y \ bzr \ cvs \ git \ mercurial \ subversion 注意:apt-get update 和 apt-get install 被放在一个 RUN 指令中执行,这样能够保证每次安装的是最新的包。如果 apt-get install 在单独的 RUN 中执行,则会使用 apt-get update 创建的镜像层,而这一层可能是很久以前缓存的。 CMD CMD 指令允许用户指定容器的默认执行的命令。 此命令会在容器启动且 docker run 没有指定其他命令时运行。 . 如果 docker run 指定了其他命令,CMD 指定的默认命令将被忽略。 . 如果 Dockerfile 中有多个 CMD 指令,只有最后一个 CMD 有效。 CMD 有三种格式: . Exec 格式:CMD ["executable","param1","param2"]
这是 CMD 的推荐格式。 . CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式。 . Shell 格式:CMD command param1 param2 Exec 和 Shell 格式前面已经介绍过了。
第二种格式 CMD ["param1","param2"] 要与 Exec 格式 的 ENTRYPOINT 指令配合使用,其用途是为 ENTRYPOINT 设置默认的参数。我们将在后面讨论 ENTRYPOINT 时举例说明。 下面看看 CMD 是如何工作的。Dockerfile 片段如下: CMD echo "Hello world" 运行容器 docker run -it [image] 将输出: Hello world 但当后面加上一个命令,比如 docker run -it [image] /bin/bash,CMD 会被忽略掉,命令 bash 将被执行: root@10a32dc7d3d3:/# ENTRYPOINT ENTRYPOINT 指令可让容器以应用程序或者服务的形式运行。 ENTRYPOINT 看上去与 CMD 很像,它们都可以指定要执行的命令及其参数。不同的地方在于 ENTRYPOINT 不会被忽略,一定会被执行,即使运行 docker run 时指定了其他命令。 ENTRYPOINT 有两种格式: . Exec 格式:ENTRYPOINT ["executable", "param1", "param2"] 这是 ENTRYPOINT 的推荐格式。 . Shell 格式:ENTRYPOINT command param1 param2 在为 ENTRYPOINT 选择格式时必须小心,因为这两种格式的效果差别很大。 Exec 格式 ENTRYPOINT 的 Exec 格式用于设置要执行的命令及其参数,同时可通过 CMD 提供额外的参数。 ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。 比如下面的 Dockerfile 片段: ENTRYPOINT ["/bin/echo", "Hello"] CMD ["world"] 当容器通过 docker run -it [image] 启动时,输出为: Hello world 而如果通过 docker run -it [image] CloudMan 启动,则输出为: Hello CloudMan Shell 格式 ENTRYPOINT 的 Shell 格式会忽略任何 CMD 或 docker run 提供的参数。 最佳实践 . 使用 RUN 指令安装应用和软件包,构建镜像。 . 如果 Docker 镜像的用途是运行应用程序或服务,比如运行一个 MySQL,应该优先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。 . 如果想为容器设置默认的启动命令,可使用 CMD 指令。用户可在 docker run 命令行中替换此默认命令。 到这里,我们已经具备编写 Dockerfile 的能力了。如果大家还觉得没把握,推荐一个快速掌握 Dockerfile 的方法:去 Docker Hub 上参考那些官方镜像的 Dockerfile。

docker镜像管理和dockerfile详解(8)的更多相关文章

  1. Docker 使用指南 (五)—— Dockerfile 详解

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/97 来源:腾云阁 https://www.qclou ...

  2. docker 实践六:dockerfile 详解

    本篇开始来学习关于 dockerfile 的知识. 注:环境为 CentOS7,docker 19.03. dockerfile 是⼀个⽂本格式的配置⽂件, ⽤户可以使⽤ dockerfile 来快速 ...

  3. Dockerfile详解

    Dockerfile详解 利用Dockerfile文件,可以构建docker的image镜像 命令使用 通过-f参数指定Dockerfile路径,进行构建image docker build -f / ...

  4. Dockerfile详解及优化

    Dockerfile详解 0. Dockerfile的作用 docker可以根据Dockerfile中的指令来构建docker镜像.Dockerfile是一个文本文件,其应当包含用户想要构建一个镜像的 ...

  5. 【转】Dockerfile详解

    Dockerfile详解 https://blog.csdn.net/wo18237095579/article/details/80540571 --------------------- 作者:大 ...

  6. Docker Kubernetes 服务发现原理详解

    Docker Kubernetes  服务发现原理详解 服务发现支持Service环境变量和DNS两种模式: 一.环境变量 (默认) 当一个Pod运行到Node,kubelet会为每个容器添加一组环境 ...

  7. JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解

    在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...

  8. Dockerfile详解,以及构建自定义镜像

    Dockerfile使用 前面的操作我们一直下载下载官方已经构建好的镜像,直接下载后就可以run,如果我们想要在镜像中添加自己的应用,比如在tomcat中添加自己的app,构建一个自定义的镜像,那么我 ...

  9. Docker系列07—Dockerfile 详解

    本文收录在容器技术学习系列文章总目录 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作  dockerfile,docker build 基于容器制作镜像,已经在上篇Docker系列 ...

随机推荐

  1. QTcpSocket学习

    一.涉及到的函数 监听:tcpServer->listen(QHostAddress::LocalHost, 6666) 错误信息:tcpServer->errorString() 新连接 ...

  2. linux基础知识-常用命令

    ifconfig :查看当前ip hostname:查看主机名 vim /etc/hosts:修改地址映射 service iptables status : 查看防火墙状态 chkconfig ip ...

  3. 团队冲刺DAY4

    DES算法 算法概要 在DES.java当中创立两个方法分别用作加密和解密 通过 `public static byte[] encrypt(byte[] data, String sKey) 创建方 ...

  4. SQL server 2012序列号 注册码

    企业核心版: FH666-Y346V-7XFQ3-V69JM-RHW28 商业智能版: HRV7T-DVTM4-V6XG8-P36T4-MRYT6 开发版: YQWTX-G8T4R-QW4XX-BVH ...

  5. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  6. ms13_055 metasploit

    111 def get_payload(t) 112 if t['Rop'] == :msvcrt 113 print_status("Using msvcrt ROP") 114 ...

  7. 记录以下mysql5.7在win使用Navicat无法链接的问题

    1.前提 系统:win1o0 局域网服务器:ubuntu18.04 mysql版本:5.7 问题描述: 在ubuntu18.04下的shell 中使用mysql -uroot  -p  是可以登陆的, ...

  8. elemeng-ui中el-select的默认选择项问题

    直接绑定将option中的value值绑定给v-model <template> <div> <el-select v-model="query"&g ...

  9. python作业/练习/实战:1、简单登录脚本

    作业要求 写一个登陆的小程序 username = xiaoming passwd = 123456 1.输入账号密码,输入正确就登陆成功, 提示:欢迎xxxx登陆,今天的日期是xxx. 2.输入错误 ...

  10. myCat读写分离+传统主从

    1 Mycat介绍: mycat是最近很火的一款国人发明的分布式数据库中间件,它是基于阿里的cobar的基础上进行开发的 准备环境: db01主   10.0.0.51 db02备   10.0.0. ...