docker镜像加速html
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.compython
登陆后,点击顶部菜单“加速器”
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.0四、Debian、CentOS6 、CentOS七、Fedora、Arch Linux、openSUSE Leap 42.1,其余版本可能有细微不一样mysql
2.方法2 linux
/etc/sysconfig/docker
更改OPTIONS的内容设置为:
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'nginx
OPTIONS='--selinux-enabled=false --insecure-registry daocloud.io'git
docker镜像经常使用命令sql
docker images //查看本地都有哪些镜像 docker tag centos aming123:123456(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-5-x86.tar.gz |docker import - centos-5-x86 #本地模块导入 cat file.tar |docker import - aming_test //这样会生成aming_test的镜像 docker history a6c10b1a3c7c #查看dockerfile建立的镜像的执行过程。 a6c10b1a3c7c是镜像Id
镜像下载地址docker
镜像下载地址 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建立镜像shell
Dockerfile 分为四部分: 基础镜像信息、维护者信息、镜像操做指令、容器启动时执行命令。 Dockerfile语法 1. FROM 格式 FROM 或者 FROM : 好比 FROM centos FROM centos:latest 2. MAINTAINER 格式 MAINTAIN 好比 MAINTAINER aming aming@aminglinux.com 3. RUN 格式为 RUN 或者 RUN ["executable", "param1", "param2"] 好比 RUN yum install httpd RUN ["/bin/bash", "-c", "echo hello"] 4. 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"] 5. EXPOSE 格式为 EXPOSE [...] 好比 EXPOSE 22 80 8443 这个用来指定要映射出去的端口,好比容器内部咱们启动了sshd和nginx,因此咱们须要把22和80端口暴漏出去。这个须要配合-P(大写)来工做,也就是说在启动容器时,须要加上-P,让它自动分配。若是想指定具体的端口,也可使用-p(小写)来指定。 6. 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
7. ADD 格式 add 将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也能够是一个url。好比 ADD /local/nginx/conf / [若是 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest] 8. COPY 格式同add
COPY src dest 使用方法和add同样,不一样的是,它不支持url
须要注意: src路径是以Dockerfile为相对路径的 dest 目录不存在会被建立,可是/aaa这样的目录是建立不了的。/home/aaa 这是能够被建立的 9. 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 123 则会输入 test 123 ,这至关于要执行命令 echo test 123
10.WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工做目录。
若是 WORKDIR 不存在,Docker 会自动为咱们建立。
例子:
WORKDIR /data
11.VOLUME /var/lib/mysql
至关于 docker run -tid -v /var/lib/mysql #数据存在host 容器删掉不影响数据。 的做用与 等效 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.0.tar.gz RUN mkdir -p /usr/local/nginx RUN cd nginx-1.8.0 && ./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 80 # 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 .
VOLUME-v
若是执行 docker build 时没有指定 tag,会使用默认值 latest。其效果至关于:json
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
简单的说: 1.RUN 执行命令并建立新的镜像层,RUN 常常用于安装软件包。 2.CMD 设置容器启动后默认执行的命令及其参数,但 CMD 可以被 docker run 后面跟的命令行参数替换。 3.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 有两种格式: 1. Shell 格式:RUN 2. 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 没有指定其余命令时运行。 1. 若是 docker run 指定了其余命令,CMD 指定的默认命令将被忽略。 2. 若是 Dockerfile 中有多个 CMD 指令,只有最后一个 CMD 有效。 CMD 有三种格式: 1. Exec 格式:CMD ["executable","param1","param2"] 这是 CMD 的推荐格式。 2. CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式。 3. 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 有两种格式: 1. Exec 格式:ENTRYPOINT ["executable", "param1", "param2"] 这是 ENTRYPOINT 的推荐格式。 2. 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 提供的参数。 最佳实践 1. 使用 RUN 指令安装应用和软件包,构建镜像。 2. 若是 Docker 镜像的用途是运行应用程序或服务,好比运行一个 MySQL,应该优先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。 3. 若是想为容器设置默认的启动命令,可以使用 CMD 指令。用户可在 docker run 命令行中替换此默认命令。 到这里,咱们已经具有编写 Dockerfile 的能力了。若是你们还以为没把握,推荐一个快速掌握 Dockerfile 的方法:去 Docker Hub 上参考那些官方镜像的 Dockerfile。