
Docker
文章平均质量分 59
易生一世
spring-petclinic-graphql开源项目的贡献者
展开
-
Docker容器启动时的第一个进程的设置总结
实际生产中,Docker容器创建(或启动)时,默认即启动必要的服务进程,这种用法非常常见。容器中默认即启动的服务往往作为容器的第一个进程启动。如docker run命令创建Tomcat容器时即启动容器中的Tomcat服务。Docker提供了有多种方式实现该特性。1.执行一个带参数的命令创建容器时,如果希望默认即执行一个带参数的命令mycommand myparam,利用Dockerfile...原创 2019-08-01 00:06:11 · 5891 阅读 · 0 评论 -
Dockerfile Maven插件及扩展详解
作为一个Docker项目,都绕不过Dockerfile文件构建、打标签和发布等操作。如果能够将对Dockerfile文件的这些操作包含进Maven的生命周期管理中,将极大简化Docker项目的构建发布过程。Dockerfile Maven是Spotify公司提供的一款Maven插件(还包含一个Maven扩展),用以辅助Docker项目(借助于Maven管理)进行Dockerfile文件构建、标...原创 2018-04-04 16:09:19 · 14458 阅读 · 4 评论 -
开发过程中持续使用Git代码更新Docker容器的方法
在开发调试过程中,需要不断更新代码到Git库,然后使用Git库中的最新代码更新运行着的Docker容器,目前看来有如下两种方法,建议使用第二种。1. 直接在容器中执行git命令,更新容器中的目录和文件(不推荐)1) 首先,在构建容器镜像文件的时候,定义在Dockfile文件中并设置代码的Git库RUN apt-get install -y gitRUN git config --global ...原创 2018-04-23 22:31:16 · 13483 阅读 · 0 评论 -
docker exec执行多个命令详解
docker exec命令能够在运行着的容器中执行命令。docker exec命令的使用格式:docker exec [OPTIONS] container_name COMMAND [ARG...]OPTIONS说明:-d,以后台方式执行命令;-e,设置环境变量-i,交互模式-t,设置TTY-u,用户名或UID,例如myuser:myusergroup通常COMMAND只能是一条语句,为了支持多...原创 2018-04-23 22:46:24 · 51500 阅读 · 0 评论 -
Dockerfile概述
Dockerfile是一个纯文本文件,用以定义容器内部的安装配置环境,以构建出定制的容器镜像。Dockerfile的示例如下:#comment#based on the existing imageFROM ubuntu:latestMAINTAINER xiangbin.han@mydomain.comWORKDIR /my_homeADD . /my_home#run co原创 2017-05-17 10:07:21 · 462 阅读 · 0 评论 -
docker cp命令详解
docker cp命令,能够在容器和执行该命令的机器的本地文件系统之间复制文件或目录。1. 使用格式1)从容器中复制文件或目录到执行命令所在机器的指定路径docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-2)从执行命令所在的机器复制文件或目录到容器内部的指定路径docker cp [OPTIONS] SRC_PATH|- CONTA...原创 2017-05-22 22:53:52 · 31671 阅读 · 0 评论 -
在自动化运维中设置apt-get install tzdata的noninteractive方法
在Ubuntu系统中,执行命令apt-get install -y tzdata以安装tzdata软件包。但是,最近我们发现,在Ubuntu 18.04 (Bionic Beaver)上无法自动安装该软件包。在tzdata 2017的各个版本中(如2017c),安装过程中采用默认的系统时区,所以可以无交互地顺利安装完毕,输出信息如下。Current default time zone: 'Etc/...原创 2018-05-30 17:31:43 · 17812 阅读 · 1 评论 -
Docker的网络类型及驱动器
计算机如果不能够联网,其价值就要大打折扣。类似的,一个Docker容器也需要通过网络访问其他资源,或者被其他资源访问。这就涉及到Docker容器实例的网络,也与Docker宿主机的网络息息相关。总的来说,Docker的网络是一个通过多种网络驱动器(driver)实现的Docker子系统。根据网络驱动器的不同,Docker提供了不同特性的网络,Docker容器实例也因加入不同的网络而具有不同的网...原创 2018-10-15 22:33:28 · 1879 阅读 · 0 评论 -
Docker daemon及容器实例的DNS配置详解
Linux系统中,DNS解析器是一组C库的进程,用以访问DNS服务器。DNS解析器通过/etc/resolv.conf配置文件给出要访问的DNS服务器,配置文件修改后立刻生效,但系统重启后/etc/resolv.conf配置文件的内容回滚到初始状态。1. Docker daemon的DNS配置Docker daemon的配置有两种方式,一种是通过/etc/docker/daemon.jso...原创 2019-06-05 23:48:08 · 15282 阅读 · 2 评论 -
Docker容器实例通过非默认的网络命名空间访问外部网络
Docker为所有容器实例建立了独立的网络命名空间中,并通过docker0桥接到宿主机的默认网络命名空间。如果容器实例要通过宿主机上的一个定制网络命名空间oam,而非宿主机的默认网络命名空间,访问外部网络,示意图如下所示。对于上述图示,Docker宿主机上的配置比较复杂,大致可以归纳为如下几步。1.创建并配置虚拟网卡veth0/veth1的IPs;2.配置默认网络命名空间...原创 2019-05-06 00:32:16 · 701 阅读 · 0 评论 -
基于iptables的Docker网络隔离与通信详解
Docker提供了bridge, host, overlay等多种网络。同一个Docker宿主机上同时存在多个不同类型的网络。位于不同网络中的容器,彼此之间是无法通信的。Docker容器的跨网络隔离与通信,是借助了iptables的机制。我们知道,iptables的filter表中默认划分为IPNUT, FORWARD和OUTPUT共3个链,详情请参考 iptables及其过滤规则。Docke...原创 2019-03-27 17:26:04 · 20921 阅读 · 8 评论 -
iptables及其过滤规则
1. iptables是Linux内核的一个模块,用以管理对网络设备(网卡)的访问,如路由过滤、端口转发、NAT等,root用户可以通过iptables配置操作系统的路由表。在当前的主流Linux发布系统中,都默认安装了iptables。为了适应IPv6,事实上iptables用以管理IPv4数据包的过滤和地址转换,ip6tables用以管理IPv6数据包的过滤和地址转换。后文将其统一称为ip...原创 2019-03-19 00:01:07 · 5349 阅读 · 0 评论 -
Docker容器支持IPv6的方法
1.设置Docker Engine支持IPv61) 启动Docker Engine时即开启对IPv6的支持默认启动时Docker Engine只支持IPv4。启动Docker Engine时,指定--ipv6选项即可支持IPv6。2) 对于已经启动的Docker Engine开启对IPv6的支持配置/etc/docker/daemon.json文件如下。{ "ipv6...原创 2019-02-13 23:08:26 · 38129 阅读 · 3 评论 -
Docker容器实例的网络与通信
一个Docker容器实例,无论使用哪个类型的网络驱动器(包括定制的网络插件),从容器内部来说网络都是透明的,即不区分自己是在哪种类型的网络中。而只知道自己的网络信息,如IP, Gateway, iptalbes, DNS等。默认创建的容器实例,不会对网络外暴露任何端口,只能供同属一个网络中的其他容器实例访问。创建容器时,可以通过-p|--publish暴露指定端口,如-p 8080:80表示将...原创 2019-02-18 22:21:16 · 917 阅读 · 0 评论 -
openssh-client amd64 1:7.2p2-4ubuntu2.4 404 Not Found
一直运转良好的Docker自动发布突然出现了如下异常,导致无法准确构建image。Step 3 : RUN apt-get update...Step 8 : RUN apt-get install -y openssh-client ---> Using cacheThe following NEW packages will be installed: krb5-lo...原创 2018-12-25 06:55:24 · 1580 阅读 · 0 评论 -
Rapidoid及其容器化的Web平台
Rapidoid首先是一个Java的Web框架,提供了一系列Web应用开发相关的类库。其次,Rapidoid还是一个能够提供Web服务的容器化的平台,即可以直接使用Rapidoid构建容器实例,提供HTTP服务。本文详细介绍其作为Web平台的用法。关于Rapidoid开发框架,详见其文档。Rapidoid平台实际上就是一个Docker容器,可以作为HTTP服务器直接发布静态Web资源,也可以部署...原创 2018-12-26 23:09:12 · 1403 阅读 · 0 评论 -
Dockerfile中的ENTRYPOINT和CMD指令详解与比较
Dockerfile中的ENTRYPOINT指令和CMD指令都可以设置容器启动时要执行的命令,但用途是有略微不同的。ENTRYPOINT指令和CMD指令虽然是在Dockerfile中定义,但是在构建镜像的时候并不会被执行,只有在执行docker run命令启动容器时才会起作用。在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准。...原创 2017-06-14 13:13:14 · 46664 阅读 · 0 评论 -
Dockerfile中的ENV指令详解
1. Dockerfile中的ENV指令用以定义镜像的环境变量。示例如下:RUN set -ex && apt-get update && apt-get install -y iputils-pingENV PATH /usr/local/bin:$PATHENV LANG C.UTF-8ENV TERM xtermENV PYTHON_VERSION 3.5.3ENV name1原创 2017-06-13 23:26:50 · 93941 阅读 · 2 评论 -
Dockerfile中的Parser directives及escape
Dockerfile中的Parser directives用以提示解析器进行特殊处理。对于Dockerfile,Parser directives是可选的。可以不定义Parser directives,但一旦要定义,则Parser directives必须位于Dockerfile中的第一行。Parser directives的定义:形似注释,但非注释# directive=原创 2017-06-13 12:31:13 · 1345 阅读 · 0 评论 -
基于Docker Swarm的Docker Service常见命令
Docker Service是一种声明式的、可扩展的、负载均衡的应用。Docker Service是面向用户的应用,而Docker Swarm是面向IT的节点集群。Docker Service的运行往往是在Docker Swarm的基础之上的。Docker Service的常见命令:docker service create --name myService -p 80原创 2017-05-09 23:42:50 · 11593 阅读 · 0 评论 -
Docker的Swarm模式
Docker Swarm可以视为多个Docker Engines的集群,从Docker 1.12开始出现。在一个Docker Swarm中,可以有多个Docker Engines。一个Docker Engine就是一个节点。Docker Swarm中的节点可以分为Manager节点和Worker节点。1. Manager节点通常,第一个Manager节点初始化整个Docker Swar原创 2017-05-09 23:32:43 · 2373 阅读 · 0 评论 -
Docker常用命令(非swarm模式)
Docker 1.12 非swarm模式的常用命令:1.查看信息docker versiondocker --versiondocker infodocker imagesdocker images -q#只给出images id2.基于一个镜像启动一个容器docker run -d --name myweb -p 8080:8080 one_ima原创 2017-05-08 23:42:48 · 464 阅读 · 0 评论 -
Container架构与Hypervisor(VM)架构的对比
一目了然!参考Nigel Poulton在pluralsight的课程。原创 2017-05-08 23:29:41 · 3920 阅读 · 0 评论 -
Docker入门指南
Docker是一个开放平台,用以开发、交付和运行应用系统。Docker通过启动轻量级的容器,可以打包发布完整可交付的应用系统。不同的容器之间是互相隔离的。Docker容器是一个分层设计的运行实例,一个容器内部可以有多个层次,每个层次对应一个文件系统。Docker镜像文件image用以构建Docker容器实例。事实上,image就是Docker容器中的一个层次,后续可以直接给Docker容器原创 2017-05-05 13:52:26 · 692 阅读 · 0 评论 -
docker create命令详解
docker create命令能够基于镜像创建容器。该命令执行的效果类似于docker run -d,即创建一个将在系统后台运行的容器。但是与docker run -d不同的是,docker create创建的容器并未实际启动,还需要执行docker start命令或docker run命令以启动容器。事实上,docker create命令常用于在启动容器之前进行必要的设置。示例如下:...原创 2017-05-23 23:04:29 · 18411 阅读 · 0 评论 -
docker build命令详解
docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像。docker build命令的使用格式:docker build [OPTIONS] <PATH | URL | ->1. 常用OPTIONS选项说明--build-arg,设置构建时的环境变量--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像...原创 2017-05-12 13:36:59 · 91959 阅读 · 0 评论 -
Docker Service的bundle与stack
在微服务架构中,services是构成微服务的基石。而若干个services打包在一起就构成一个完整应用,应用部署到stack中。包含若干个services的完整应用就是一个dab文件,这是通过docker-compose bundle命令打包得到的。打包格式DAB, Distributed Application Bundles。一个Stack就是一个微服务应用的运行环境,由一个个tas原创 2017-05-09 23:54:55 · 2377 阅读 · 0 评论 -
Dockerfile中的Shell风格与JSON风格对比及SHELL指令详解
1. 在Dockerfile中,有些指令(如RUN,ENTRYPOINT和CMD指令)的定义,可以采用Shell格式,也可以采用JSON格式。1) 采用Shell格式定义,示例如下:CMD top -b上述CMD指令,在采用默认SHELL的情况下,实际执行“/bin/sh -c top -b”。2) 采用JSON格式定义,示例如下:CMD ["top", "-b"]上述CM原创 2017-06-15 23:15:50 · 1284 阅读 · 0 评论 -
使用docker run的选项以覆盖Dockerfile中的设置详解
通常,我们首先定义Dockerfile文件,然后通过docker build命令构建得到镜像文件。然后,才能够基于镜像文件通过docker run启动一个容器的实例。那么在启动一个容器的时候,就可以改变镜像文件中的一些参数,而镜像文件中的这些参数往往是通过Dockerfile文件定义的。但并非Dockerfile文件中的所有定义都可以在启动容器的时候被重新定义。docker run不能覆盖...原创 2017-06-12 17:19:51 · 35491 阅读 · 0 评论 -
docker run的--rm选项详解
在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据。但是,对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,因而可以在容器启动时设置--rm选项,这样在容器退出时就能够自动清理容器内部的文件系统。示例如下:docker run --rm ba-208等价于docker run --rm=true ba-20...原创 2017-06-11 23:54:51 · 121927 阅读 · 8 评论 -
Docker容器的重启策略及docker run的--restart选项详解
1. Docker容器的重启策略Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。Docker容器的重启策略如下:no,默认策略,在容器退出时不重启容器 on-failure,在容器非正常退出时(退出状态非0),才会重启容器 on-failure:3,在容器非正常退...原创 2017-06-11 23:39:51 · 142082 阅读 · 3 评论 -
docker run命令概述及Docker容器的两种运行模式
docker run命令用于根据镜像文件创建并启动一个容器实例。一个容器实例就是宿主机器上的一个独立的进程。每次执行docker run,就创建一个Docker容器进程,拥有独立的文件系统、网络和进程树。1. 命令格式docker run [OPTIONS] IMAGE_NAME:TAG|IMAGE_NAME@DIGEST ...2. 容器的运行模式Docker容器进程有两种运...原创 2017-06-07 23:13:09 · 7522 阅读 · 0 评论 -
Docker守护进程的配置及日志
安装Docker并启动,在Docker所在的服务器上,就一直有一个Docker守护进程dockerd在运行。默认手工启动Docker守护进程,只需要执行如下命令:dockerd停止上述进程,只需要CTRL+C键盘命令。当然在服务器上,更多的是以后台程序的方式启动:dockerd&1. dockerd的配置文件如果要使用非默认配置参数启动Docker守护进程,...原创 2017-06-07 11:13:42 · 19846 阅读 · 0 评论 -
Docker容器中Data volumes详解
Data volumes可以视为容器中的一种特殊的文件路径,用以保存与容器实例生命周期无关的共享数据。1. Data volumes的特性在容器创建的时候初始化 作为文件系统的一部分,但是不受Union File System的管理; 便于持久化存储数据和共享数据 Data volumes的数据是持久化的,删除容器不影响Data volumes的数据 对Data volumes的操...原创 2017-05-23 23:24:34 · 6312 阅读 · 1 评论 -
Dockerfile中的COPY和ADD指令详解与比较
Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的。COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。满足同等功能的情况下,推荐使用COPY指令。ADD指令更...原创 2017-06-14 13:53:25 · 94356 阅读 · 4 评论 -
Dockerfile中的ARG指令详解
Dockerfile中的ARG指令用以定义构建时需要的参数,使用格式如下:ARG a_nameARG a_nother_name=a_default_valueARG指令定义的参数,在docker build命令中以--build-arg a_name=a_value形式赋值。如果docker build命令传递的参数,在Dockerfile中没有对应的参数,将抛出如下警告:[W原创 2017-06-15 23:38:56 · 40599 阅读 · 0 评论 -
以Github为上下文,构建Docker image详解
以远程Github为上下文,Docker构建image的示例如下:docker build -t myAccount/myImage https://github.com/champagne/docker-myImage.git默认以refs/heads/master分支docker build -t myAccount/myImage https://github.com原创 2017-05-12 13:43:07 · 1056 阅读 · 0 评论