本文的目的是介绍Docker(四)-Dcoker镜像的详细情况,特别关注实用的docker镜像的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Docker(四)-Dc
本文的目的是介绍Docker (四)-Dcoker 镜像的详细情况,特别关注实用的docker镜像的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Docker (四)-Dcoker 镜像的机会,同时也不会遗漏关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、Dcoke docker-redis 启动警告处理、dcoker build和docker run的区别、Dcoker 心得 #1 Docker 的基本概念和原理的知识。
本文目录一览:- Docker (四)-Dcoker 镜像(实用的docker镜像)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- Dcoke docker-redis 启动警告处理
- dcoker build和docker run的区别
- Dcoker 心得 #1 Docker 的基本概念和原理
Docker (四)-Dcoker 镜像(实用的docker镜像)
Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地, Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库)。
Docker Hub:https://hub.docker.com 阿里云镜像:https://dev.aliyun.com/search.html 灵雀云:https://hub.alauda.cn/
镜像
列出镜像列表
我们可以使用 docker images 来列出本地主机上的镜像。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB php 5.6 f40e9e0f10c8 9 days ago 444.8 MB nginx latest 6f8d099c3adc 12 days ago 182.7 MB mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB httpd latest 02ef73cf1bc0 3 weeks ago 194.4 MB ubuntu 15.10 4e3b13c8a266 4 weeks ago 136.3 MB hello-world latest 690ed74de00f 6 months ago 960 B training/webapp latest 6fae60ef3446 11 months ago 348.8 MB
各个选项说明:
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像 ID(唯一)
-
CREATED:镜像创建时间
-
SIZE:镜像大小
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
$sudo docker search httpd
各个选项说明:
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
拖取镜像
我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。
$ docker pull httpd
Using default tag: latest latest: Pulling from library/httpd 8b87079b7a06: Pulling fs layer a3ed95caeb02: Download complete 0d62ec9c6a76: Download complete a329d50397b9: Download complete ea7c1f032b5c: Waiting be44112b72c7: Waiting
下载完成后,我们就可以使用这个镜像了。
$ docker run httpd
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑
1.nginx服务器根目录问题
docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同
eg:
run一个niginx容器
<span>//80端口被占用,so...</span> $ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES <span>1801</span>a32aab54 nginx <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago Up <span>2</span> minutes <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-></span><span>800</span>/tcp berserk_kare
进入容器内部
<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash root<span>@1801a32aab54</span><span>:/</span><span># </span>
查看nginx目录
<span># cd /etc/nginx/</span> conf<span>.d</span>/ koi-utf mime<span>.types</span> nginx<span>.conf</span> uwsgi_params fastcgi_params koi-win modules/ scgi_params win-utf
可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled
继续查看nginx配置
<span># cat /conf.d/default.conf</span><span>server</span> { listen <span>80</span>; server_name localhost; <span>#charset koi8-r;</span><span>#access_log /var/log/nginx/log/host.access.log main;</span> location / { root /usr/share/nginx/html; <span>index</span><span>index</span>.html <span>index</span>.htm; } <span>#error_page 404 /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span> error_page <span>500</span><span>502</span><span>503</span><span>504</span> /<span>50</span>x.html; location = /<span>50</span>x.html { root /usr/share/nginx/html; } <span>#...省略php-fpm配置,好长..</span> }
根目录配置: root /usr/share/nginx/html;
测试
<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" >index.html</span>
php-fpm配置相关
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Dcoke docker-redis 启动警告处理
如果启动前不对 Linux 内核做任何更改,那么 Redis 启动会报出警告,共三个:如下图所示
第一个警告:The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
意思是:TCP backlog 设置值,511 没有成功,因为 /proc/sys/net/core/somaxconn 这个设置的是更小的 128.
临时解决方法:(即下次启动还需要修改此值)
echo 511 > /proc/sys/net/core/somaxconn
永久解决方法:(即以后启动还需要修改此值)
将其写入 /etc/rc.local 文件中。
baklog 参数实际控制的是已经 3 次握手成功的还在 accept queue 的大小。
参考 linux 里的 backlog 详解
第二个警告:overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ''vm.overcommit_memory = 1'' to/etc/sysctl.conf andthen reboot or run the command ''sysctl vm.overcommit_memory=1'' for this to take effect.
意思是:overcommit_memory 参数设置为 0!在内存不足的情况下,后台程序 save 可能失败。建议在文件 /etc/sysctl.conf 中将 overcommit_memory 修改为 1。
临时解决方法:echo "vm.overcommit_memory=1" > /etc/sysctl.conf
永久解决方法:将其写入 /etc/sysctl.conf 文件中。
参考:有关 linux 下 redis overcommit_memory 的问题
第三个警告:you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command ''echo never > /sys/kernel/mm/transparent_hugepage/enabled'' as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled.
意思是:你使用的是透明大页,可能导致 redis 延迟和内存使用问题。执行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修复该问题。
临时解决方法:
echo never > /sys/kernel/mm/transparent_hugepage/enabled。
永久解决方法:
将其写入 /etc/rc.local 文件中。
如果第一个警告不能再宿主机中解决,可以在 docker 容器中尝试解决,可以参考此文章。
http://weeklyalgo.codes/2017/03/06/some%20docker%20security%20options/#2-
dcoker build和docker run的区别
dcoker buile:
创建一个镜像,在dockerfile中可以运行多个RUN命令,也可以使用CMD命令,但是如果在docker run 容器创建的时候使用了CMD就会被覆盖,如果没有使用就默认使用build构建的CMD命令
dockerfile主要命令如下:
-
FROM:
命令格式:FROM <image>
用法说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像
-
MAINTAINER:
命令格式:MAINTAINER <name> <email>
用法说明:描述镜像的创建者和其邮箱
-
RUN:
命令格式:RUN <command>
用法说明:可以通过&符号连接多个RUN语句
- CMD:
命令格式:CMD <command>
用法说明:可以使用多次,但是只有最后一个生效
-
EXPOSE:
命令格式:EXPOSE <port> [<port>...]
用法说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效
- EVN:
命令格式:EVN <key> <value> #只能设置一个
EVN <key>=<value>#可以设置多个
用法说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留
- ADD:
命令格式:ADD <src> <dest>
用法说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压(如果是远程的压缩文件将不会自动解压),这也是与COPY命令最大的不同
- COPY:
命令格式:COPY <src> <dest>
用法说明:COPY除了不能复制网络文件。其它功能和ADD相同
- ENTRYPOINT:
命令格式:ENTRYPOINT "command"
用法说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效
- VOLUME:
命令格式:VOLUME ["path"]
用法说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器
- USER:
命令格式:USER daemon
用法说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令
- ONBUILD:
命令格式:ONBUILD [INSTRUCTION]
用法说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令
- 一个例子:
1 FROM centos
2 MAINTAINER arrow "arrow@qq.com"
3 RUN mkdir -p /opt/python/
4 RUN mkdir -p /data/script/
5 RUN "pip install django uwsgi "
6 ADD operations.tar.gz /data/object/
7 ADD uwsgi_script.tar.gz /data/script/
8 ENV PYTHON_HOME /opt/object
9 EXPOSE 8080
10 ENV PATH $PATH:$PYTHON_HOME /bin
11 CMD "uwsgi --ini /data/script/uwsgi.ini"
- 运行docker build:
1 docker build -t centos_python:v1
dcoker RUN:
创建一个容器:
1 docker run --name myweb -d -it --rm centos_python:v1
Dcoker 心得 #1 Docker 的基本概念和原理
### 基本原理
Docker 的实现,主要归结于三大技术:
- 命名空间 (Namespaces)
- 控制组 (Control Groups)
- ** 联合文件系统 (Union File System) **
命名空间 (Namespaces) ,是 linux 核心在 2.4 版本后逐渐引入的一项用于运行隔离的模块,利用 PID Namespace,Docker 就实现了容器中隔离程序运行中进程隔离这一目标。
资源控制组 (Control Groups) ,是 linux 在 2.6 版本后逐渐引入的一项对计算机资源控制的模块。顾名思义,资源控制组的作用就是控制计算机资源的,CGroups 主要做的是硬件资源的隔离。虚拟化除了制造出虚拟的环境隔离同一物理平台运行的不同程序之外,另一大作用就是控制硬件资源的分配,CGroups 的使用正是为了这样的目的。即隔离和分配两个作用。
联合文件系统 (Union File System),是一种能够同时挂载不同实际文件或文件夹到同一目录,形成一种联合文件结构的文件系统。联合文件系统本身与虚拟化并无太大的关系,但 Docker 却创新的将其引入到容器实现中,用它解决虚拟环境对文件系统占用过量,实现虚拟环境快速启停等问题。
Docker 的核心组成分为四部分
- 镜像 (Image)
- 容器 (Container)
- 网络 (Network)
- 数据卷 (Volume)
镜像 (Image) ,可以理解为一个只读的文件包,包含了虚拟环境运行最原始文件系统的内容。镜像有不同的版本,但因为是分层结构,所以不同的镜像版本可以建立在公共的基础层上,即多个不同版本的镜像占用的空间小于这些镜像本身大小之和。
容器 (Container) 就更好理解了,在容器技术中,容器就是用来隔离虚拟环境的基础设施,而在 Docker 里,它也被引申为隔离出来的虚拟环境。镜像内存放的是不可变化的东西,当以它们为基础的容器启动后,容器内也就成为了一个 “活” 的空间。用更官方的定义,Docker 的容器应该有三项内容组成:
一个 Docker 镜像
一个程序运行环境
一个指令集合
网络 (Network) 在 Docker 中,实现了强大的网络功能,我们不但能够十分轻松的对每个容器的网络进行配置,还能在容器间建立虚拟网络,将数个容器包裹其中,同时与其他网络环境隔离。另外,利用一些技术,Docker 能够在容器中营造独立的域名解析环境,这使得我们可以在不修改代码和配置的前提下直接迁移容器,Docker 会为我们完成新环境的网络适配。对于这个功能,我们甚至能够在不同的物理服务器间实现,让处在两台物理机上的两个 Docker 所提供的容器,加入到同一个虚拟网络中,形成完全屏蔽硬件的效果。
数据卷 (Volume) 得益于 Docker 底层的 Union File System 技术,docker 除了能够从宿主操作系统中挂载目录外,还能够建立独立的目录持久存放数据,或者在容器间共享。在 Docker 中,通过这几种方式进行数据共享或持久化的文件或目录,我们都称为数据卷 ( Volume )。
###Docker Engine
Docker Engine,目前这款实现容器化的工具是由 Docker 官方进行维护的,Docker 官方将其命名为 Docker Engine,同时定义其为工业级的容器引擎 (Industry-standard Container Engine)。在 Docker Engine 中,实现了 Docker 技术中最核心的部分,也就是容器引擎这一部分。
Docker Engine 是一款软件,但实实在在去深究的话,它其实算是由多个独立软件所组成的软件包。在这些程序中,最核心的就是
- docker daemon - docker CLI
docker daemon 所有我们通常认为的 Docker 所能提供的容器管理、应用编排、镜像分发等功能,都集中在了 docker daemon 中,而我们之前所提到的镜像模块、容器模块、数据卷模块和网络模块也都实现在其中。在操作系统里,docker daemon 通常以服务的形式运行以便静默的提供这些功能,所以我们也通常称之为 Docker 服务。
在 docker daemon 管理容器等相关资源的同时,它也向外暴露了一套 RESTful API,我们能够通过这套接口对 docker daemon 进行操作。或者更确切的说,是通过这套 RESTful API 对 docker daemon 中运行的容器和其他资源进行管理。
那么问题来了,如果我们在控制台中编写一个 HTTP 请求以借助 docker daemon 提供的 RESTful API 来操控它,那显然是个费脑、费手又费时间的活儿。所以在 Docker Engine 里还直接附带了 docker CLI 这个控制台程序。
docker daemon 和 docker CLI 所组成的,正是一个标准 C/S (Client-Server) 结构的应用程序。衔接这两者的,正是 docker daemon 所提供的这套 RESTful API。
参考资料:
开发者必备的 Docker 实践指南
我们今天的关于Docker (四)-Dcoker 镜像和实用的docker镜像的分享就到这里,谢谢您的阅读,如果想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、Dcoke docker-redis 启动警告处理、dcoker build和docker run的区别、Dcoker 心得 #1 Docker 的基本概念和原理的相关信息,可以在本站进行搜索。
本文标签: