博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker
阅读量:4229 次
发布时间:2019-05-26

本文共 15399 字,大约阅读时间需要 51 分钟。

资源控制

资源打包,

资源管理(限制你使用多少)

目录


什么是容器?

• 容器技术已经成为应用程序封装和交付的核心技术

• 容器技术的核心有以下几个内核技术组成:
– Cgroups(Control Groups)-资源管理
– NameSpace-进程隔离
– SELinux安全
• 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速

• Docker是完整的一套容器管理系统

• Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术

 

优点:

• 相比于传统的虚拟化技术,容器更加简洁高效

• 传统虚拟机需要给每个VM安装操作系统
• 容器使用的共享公共库和程序

VM(需装操作系统)   ------->  Docker(无需装操作系统)

Docker缺点

• 容器的隔离性没有虚拟化强

• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭
• 监控容器和容器排错是挑战(难搞)

 

第一              命令空间 主机名

第二              ip(网络)

第三               磁盘

第四               进程

第五               ipc(信号比如kill)

第六               用户名

 

 

部署Docker

新建2台虚拟机

192.168.5.30/24   4G内存  2CPU  20G磁盘

192.168.5.31/24   4G内存  2CPU  20G磁盘  

下面以192.168.5.30为例(2台都有配置): 

# virsh edit 虚拟机名 直接修改内存;

vim /etc/sysconfig/network-scripts/ifcfg-eth0

# Generated by dracut initrd

DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.5.30"
NETMASK="255.255.255.0"
GATEWAY="192.168.5.254"

vim /etc/resolv.conf   ----> nameserver 192.168.5.254

]#poweroff  --->然后开机    加载配置

需要64位操作系统, RHEL7版本,防火墙关闭(熟悉Docker了就不用关)

配置yum源

vim /etc/yum.repos.d/local.repo

[local_repo]

name=CentOS-$releasever - Base
baseurl="ftp://192.168.5.254/centos-1804"
enabled=1
gpgcheck=1
[0_repo]
name=docker0
baseurl="ftp://192.168.5.254/extras"  #Docker的包仓库源,不在本地yum里
enabled=1
gpgcheck=0
yum repolist

yum -y install docker

ifconfig                      #查看时没有docker0

systemctl restart docker

systemctl enable docker

ifconfig                      #查看时有docker0

 

镜像

• 在Docker中容器是基于镜像启动的

• 镜像是启动容器的核心
• 镜像采用分层设计
• 使用快照的COW技术,确保底层数据不丢失

docker   search  busybox                           #搜索相关镜像

docker   search  centos

docker   search  nginx 

docker   help pull / push                           #查看下载/上传帮助

docker    pull  docker.io/busybox             # 下载镜像

docker images                                          #查看本地镜像列表

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

名称                           标签                        ID                   创建时间               大小

 

docker       push  docker.io/busybox            #上传镜像

docker save docker.io/busybox:latest  -o  busybox.tar     #导出本地镜像为tar文件

ls

 

真机传相关的tar镜像文件

scp 'docker_images.zip'  root@192.168.5.31:/root

yum  -y install unzip

unzip docker_images.zip

cd docker_images/

ls  ---->  centos.tar  nginx.tar  redis.tar  registry.tar  ubuntu.tar

for i in *.tar; do docker load -i $i ; done                                      #导入镜像

docker load  -i 镜像文件.tar                          #使用tar包导入镜像

docker images                                               #查看镜像列表

启容器格式:  docker 命令  参数  镜像名称:标签  启动命令

docker run -it docker.io/centos:latest /bin/bash(容器内的命令,不加则用默认的)              #运行容器

进去配置yum和本机的一致,安装相关命令的包,查看ip/主机名/磁盘/进程/用户名/ipc(如kill信号)

yum provides 命令          #查找该命令相关的软件包

docker run --help

docker run -it  docker.io/busybox:latest /bin/bash()          

docker run -it docker.io/redis:latest

docker run -it  docker.io/nginx:latest /bin/bash

docker run -it docker.io/ubuntu:latest 

docker port    名字 端口                   #快捷地查看端口的绑定情况。

docker  ps  [-qa]                              #查看容器信息

参数解析:

  • -t: 在新容器内指定一个伪终端或终端。

  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

  • -d: 让容器在后台运行

  • -P:  容器内部端口随机映射到主机的高端口。

  • -p:  容器内部端口绑定到指定的主机端口。(如果要绑定 UDP 端口,可以在端口后面加上 /udp

    如 127.0.0.1:5000:5000/udp)
  • 输出状态:

created(已创建)

restarting(重启中)

running(运行中)

removing(迁移中)

paused(暂停)

exited(停止)

dead(死亡)

 镜像下载地址

 

docker logs -f  ID/名字                                                #查看容器内部的标准输出 (= tail -f)

docker history  docker.io/centos                                 #查看镜像制作历史

docker inspect docker.io/busybox                              #查看镜像详细(底层)信息, ENV, Cmd

docker tag docker.io/busybox:latest  aaa:latest          #修改镜像名称和标签(硬链接)

docker tag docker.io/busybox:latest  aaa:123        

docker images  

docker rmi aaa:123                                                #删除本地镜像,注:启动容器时删除会提示error

docker rmi aaa:latest                             

docker rmi docker.io/busybox                                #前面已启用过,无法删除全部硬链接,会保留一个

docker ps -a

docker restart  4f39084d3910           #重启,只对正在运行的容器     

docker stop  4dd07b9d1d42                                            #关闭容器,后面跟ID

docker start 4dd07b9d1d42                                          #开启容器,后面跟ID

 docker inspect  4dd07b9d1d42  | grep IP                 #查看镜像详细信息

docker top 4d                 #查看容器进程列表,后面跟ID,可简写前面几位,要唯一性

docker top 4dd07b9d1d42

docker rm  4d                                                              #删除停止状态的容器

docker rm $(docker ps -qa)

docker ps -aq

docker run -it docker.io/centos:latest      EXIT退出后

docker ps -a

进入容器:

docker attach d0aaa18486f8     Ctrl + p + q 后台运行         #会接替上帝进入容器,  exit退出就会自杀进程关闭容器

docker exec -it d0aaa18486f8 /bin/bash                            #exit退出都不会关闭容器 ,以其他进程进入容器                      

docker top d0aaa18486f8                                 #查看容器进程列表,后面跟ID

docker stop $(docker ps -qa)

docker rm $(docker ps -qa)                                                  #删除全部容器(除了在运行的)

 

 

redhat                     Ubuntu

rpm                                 =         dpkg  (dpkg -l 软件名 查看版本;   dpkg  -L 软件=rpm -ql 软件)

yum                                =          apt-get  [update  更新源]

yum  -y  install  httpd      =     apt-get  install  apache2

 

 

 

自定义镜像

docker images

先启动容器

[root@docker01 ~]# docker run  -it docker.io/centos:latest /bin/bash

改yum源

[root@1a82d9c0cd2a /]# cd /etc/yum.repos.d/

[root@1a82d9c0cd2a yum.repos.d]# rm -rf *

[root@1a82d9c0cd2a yum.repos.d]# cat > loca.repo <<EE
> [local_repo]
> name=CentOS-$releasever - Base
> baseurl="ftp://192.168.5.254/centos-1804"
> enabled=1
> gpgcheck=0
> EE
[root@1a82d9c0cd2a yum.repos.d]# yum repolist

装包   net-tools  vim psmisc tree lftp  iproute

清空yum仓库            [root@1a82d9c0cd2a yum.repos.d]# yum clean all

[root@docker01 ~]# docker ps -a

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS               NAMES

1a82d9c0cd2a        docker.io/centos:latest   "/bin/bash"         7 minutes ago       Exited (0) 14 seconds ago                       high_easley
[root@docker01 ~]# docker commit 1a82d9c0cd2a myos:latest                                       #另存为一个新镜像
sha256:205563548eca0462301e0067eb9db38e967c827a95b2596678ebbb43ae8bcd54
[root@docker01 ~]# docker images 

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

myos                 latest              205563548eca        35 seconds ago      285.2 MB

docker.io/centos     latest              76d6bc25b8a5        8 months ago        199.7 MB

[root@docker01 ~]# docker run -it myos:latest /bin/bash     ---->测试ifcongif  pstree vim等命令,然后exit
[root@docker01 ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND             CREATED              STATUS                      PORTS               NAMES
7b29c6c90d8b        myos:latest               "/bin/bash"         About a minute ago   Exited (0) 19 seconds ago                       cocky_noether

[root@docker01 ~]# docker history  myos:latest

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
205563548eca        4 minutes ago       /bin/bash                                       85.49 MB            
76d6bc25b8a5        8 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           8 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sch   0 B                 
<missing>           8 months ago        /bin/sh -c #(nop) ADD file:8f4b3be0c1427b158f   199.7 MB

 

 

Dockerfile  (封装服务)

• 语法格式
– FROM:基础镜像
– MAINTAINER:镜像创建者信息
– COPY <src>目录或文件 <dest>不存在则自动创建
–VOLUME 用于在image中创建一个挂载点目录,以挂载docker host 上的卷或其他容器上的卷(注:如果挂载点目录路径下此前在文件存在,docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中)
– HEALTHCHECK  [OPTION] CMD command(通过在容器内运行命令来检查容器运行状况)健康检查

HEALTHCHECK NONE(禁用从基础映像继承的任何运行状况检查)

OPTION选项:--interval=DURATION(default:30s):每隔多长时间探测一次,默认30秒

                         --timeout=DURATION(default:30s):服务响应超时时长,默认30秒

                         --start-period=DURATION(default:0s):服务启动多久后开始探测,默认0秒

                         --retries=N(default:3):认为检测失败几次为宕机,默认3次

返回值:0容器成功是健康的,随时可以使用,1不健康的容器无法正常工作,2保留不使用此退出代码

– EXPOSE <port>/tcp或udp ,用于为容器打开指定要监听的端口以实现与外部通信
– ENV 用于镜像定义所需的环境设置变量,并可被DockerFile文件中位于其后的其他指令(ENV,ADD,COPY)
– ADD:复制文件到镜像,支持使用tar文件和URL路径
– RUN:制作镜像时执行的命令,可以有多个;也可以是json格式数组RUN ["<executable>""<param1>""<param2>"]
– WORKDIR:定义容器默认工作目录           (解决cd问题),可以出现多次,其路径可以为相对路径,相对此前一个WORKDIR指定的路径
– CMD:容器启动时执行的命令,仅可以有一条CMD
– ONBUILD 用于DockerFile中定义一个触发器,dockerfile用于build映像文件,此映像文件亦可作为base image被另一个DockerFile用作FROM指令的参数,并以之构建新的映像文件,
– USER 用于指定运行image时的或运行DockerFile中任何RUN,CMD或EntRyPoInT指令指定的程序时的用户名或UID,默认情况下,container的运行身份为root用户

– ARG类似ENV,定义一个变量,区别于ENV:用户可以在构建时docker build --build-arg <varname> = <value> 进行对变量的修改;ENV不可以

– SHELL 允许覆盖shell命令形式的默认shell,必须JSON格式写入
– STOPSIGNAL 设置将发送到容器出口的系统调用信号,此信号可以是与内核的系统调用表中的位置匹配的有效无符号数,例如9,或者SIGNAME格式的信号名,例如SIGKILL

注:如果你不知道思路怎么写,就运行一个容器进入把你要做的事情手工做一遍

docker build [-t打标签, -cCPU份额(相对权重),-m内存限制,-build-arg设置构建变量,就是构建的时候修改ARG指令的参数] PATH | URL | -

[root@docker01 ~]# mkdir aa

[root@docker01 ~]# cd aa
[root@docker01 aa]# ls
[root@docker01 aa]# vim Dockerfile

FROM docker.io/centos:latest

RUN rm -rf /etc/yum.repos.d/*.repo
ADD docker.repo /etc/yum.repos.d/docker.repo
RUN yum -y install net-tools vim psmisc tree iproute iftp
RUN yum clean all
[root@docker01 aa]# vim docker.repo

[local_repo]

name=CentOS-$releasever - Base
baseurl="ftp://192.168.5.254/centos-1804"
enabled=1
gpgcheck=0
[root@docker01 aa]# docker build  -t  myos:test  .(点表示当前目录)

[root@docker01 aa]# docker run -it myos:test /bin/bash       --->  进入测试ifconfig pstree  vim yum源

 

[root@docker01 ~]# mkdir bb

[root@docker01 ~]# cd bb
[root@docker01 bb]# vim Dockerfile
FROM myos:latest
CMD ["/usr/bin/python"]

[root@docker01 bb]# docker build -t myos:python  .

[root@docker01 bb]# docker images 
[root@docker01 bb]# docker run -it myos:latest     #默认/bin/bash启动命令
[root@abf329e6aecf /]# exit
exit
[root@docker01 bb]# docker run -it myos:python    #配置Python启动;命令
Python 2.7.5 (default, Apr 11 2018, 07:36:10) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>                                       # Ctrl  +d 退出

 

[root@docker01 bb]# cd

[root@docker01 ~]#  mkdir cc
[root@docker01 ~]# cd cc
[root@docker01 cc]# vim Dockerfile

FROM myos:latest

RUN yum -y install openssh-server initscripts
RUN sshd-keygen
RUN echo "b" | passwd --stdin root
ENV EnvironmentFile=/etc/sysconfig/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
[root@docker01 cc]# docker build -t myos:sshd

[root@docker01 cc]# docker run -itd myos:sshd   #后台运行

988caf3683b96e492d43d870942ecf2948f3cea67a1473499f9a79a4ee4a574e

[root@docker01 cc]# docker inspect  988caf  | grep IP

[root@docker01 cc]# ssh 172.17.0.2

 

 

 

 

 

自定义镜像仓库

• 安装私有仓库(服务端)

– yum install docker-distribution
• 启动私有仓库,并设置开机自启动
– systemctl start docker-distribution
– systemctl enable docker-distribution

ss -nutlp | grep 5000

[root@docker01 ~]# curl http://192.168.5.30:5000/v2/

{}[root@docker01 ~]# 
• 仓库配置文件及数据存储路径
– /etc/docker-distribution/registry/config.yml
– /var/lib/registry

 

 

[root@docker01 ~]# vim /etc/sysconfig/docker

 13 ADD_REGISTRY='--add-registry docker01:5000'

 24 INSECURE_REGISTRY='--insecure-registry docker01:5000'

[root@docker01 ~]# systemctl stop docker
[root@docker01 ~]# systemctl start docker
[root@docker01 ~]# rsync -av /etc/sysconfig/docker  192.168.5.31:/etc/sysconfig/   传给docker02

[root@docker01 ~]# vim /etc/hosts

192.168.5.31 docker02
192.168.5.30 docker01

[root@docker01 ~]# rsync /etc/hosts  docker02:/etc/hosts

[root@docker01 ~]# docker tag docker.io/centos:latest docker01:5000/centos:latest 

[root@docker01 ~]# docker push  docker01:5000/centos:latest 

docker tag  test:python  docker01:5000/myos:python  ;  docker push docker01:5000/myos:python

docker tag  htpd:latest  docker01:5000/myos:http  ;  docker push docker01:5000/myos:http
docker tag  myos:test  docker01:5000/myos:test  ;  docker push docker01:5000/myos:test
 

[root@docker02 ~]# systemctl restart docker              #配置文件上面已经同步过来了,重启即可

[root@docker02 ~]# systemctl restart docker                #远程启动镜像

[root@docker01 v2]# curl http://192.168.5.30:5000/v2/_catalog                    查看镜像名称

{"repositories":["centos","myos"]}

[root@docker01 v2]# curl http://192.168.5.30:5000/v2/centos/tags/list           #查看某一仓库的标签

[root@docker01 v2]# curl http://192.168.5.30:5000/v2/myos/tags/list
 

 

 

Docker网络拓扑

封装应用环境

 

 

 

docker-machine

Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。

Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。

Docker Machine 管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean。

使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker 客户端和守护程序,以及配置 Docker 客户端与您的主机进行通信。

linux安装:

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&  sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&  chmod +x /usr/local/bin/docker-machine
$ docker-machine ls

--driver:指定用来创建机器的驱动类型,这里是 virtualbox。

  • config:查看当前激活状态 Docker 主机的连接信息。
  • creat:创建 Docker 主机
  • env:显示连接到某个主机需要的环境变量
  • inspect: 以 json 格式输出指定Docker的详细信息
  • ip: 获取指定 Docker 主机的地址
  • kill: 直接杀死指定的 Docker 主机
  • ls: 列出所有的管理主机
  • provision: 重新配置指定主机
  • regenerate-certs: 为某个主机重新生成 TLS 信息
  • restart: 重启指定的主机
  • rm: 删除某台 Docker 主机,对应的虚拟机也会被删除
  • ssh: 通过 SSH 连接到主机上,执行命令
  • scp: 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据
  • mount: 使用 SSHFS 从计算机装载或卸载目录
  • start: 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动
  • status: 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
  • stop: 停止一个指定的 Docker 主机
  • upgrade: 将一个指定主机的 Docker 版本更新为最新
  • url: 获取指定 Docker 主机的监听 URL
  • version: 显示 Docker Machine 的版本或者主机 Docker 版本
  • help: 显示帮助信息

Swarm集群管理

 

docker的集群管理工具

它将docker主机池转变为单个虚拟docker主机。

docker swarm提供标准的docker API,所有任何已经与docker守护程序通信的工具都可以使用swarm轻松扩展到多个主机

原理

swarm集群由管理节点(manager)和工作节点(work node)构成

swarm manager:复制整个集群的管理工作包括集群配置,服务管理等所有根集群有关的工作

work node:主要负责运行相应的服务来执行任务(task)

 

 

集群部署请自行百度啦啦小编就不贴出来了

 

docker-compose

compose是一个用于定义和运行多个容器docker应用程序的工具

  • 定义你的应用程序环境,DockerFile以便可以在任何地方进行复制。
  • 定义构成应用程序的服务,docker-compose.yml以便他们可以在隔离环境中一起运行。
  • 最后运行docker-compose up和compose将启动并运行整个应用程序。

docker-compose.yml配置文件详解

version: '2'

services:
  web:
    image: dockercloud/hello-world
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier

  redis:

    image: redis
    links:
      - web
    networks:
      - back-tier

  lb:

    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

networks:

  front-tier:
    driver: bridge
  back-tier:
    driver: bridge

--version 定义版本信息

--services 标签下第二级标签为自定义,服务名称 (类似于docekr container create)

--networks 定义网络信息                (docker network create)

--volumes  定义卷信息                    (docker volume create)

--image  指定服务的镜像或者镜像ID,如果不在本地则尝试拉取这个镜像

--build    指定DockerFile所在的文件夹路径,compose会利用它自动构建镜像并使用

相对路径: build: ./dir

设定上下文根目录,然后以改目录为指定的DockerFile

build:

  context: ../

  dockerfile: path/of/DockerFile

  args:

    - buildno=1

    - password=secret         # 第一种写法   

    group: abc                     #第二种写法 

    - user                              #空值

如果同时指定image和build那么会构建镜像并且命名为image后面的那个名字

args 在构建过程中指定环境变量,但是在构建成功后取消,前面的"-"不加也是支持的,与ENV不同的是它允许空值

YAML的布尔值(true,false,yes,no,on,off)必须使用引号引起来,否则会当成字符串解析。

--command  覆盖容器启动后默认执行的命令

                                                            command: bundle exec thin -p 3000                 

也可以写成类似DockerFlie中的格式:command: [bundle, exec, thin, -p, 3000]

--container_name  容器的命名

--depends_on  解决容器的依赖,启动先后的问题。先启动标签内的服务后启<服务名称>

--dns  

dns: 8.8.8.8                    

dns:                        #也可以是一个列表

  - 8.8.8.8

  - 9.9.9.9

--dns_search的配置语法同上有2中写法,配置DNS搜索域

dns_search: example.com  

--tmpfs  挂载临时目录到容器内部,与run的参数一样效果

--entrypoint 指定接入点,在docker-compose.yml定义接入点,覆盖DockerFile中的定义

1)entrypoint: /code/entrypoint.sh

2)entrypoint:

     - php

     - -d

     - zend_extension=/usr/local/lib/php.....

--end_file  从.env文件中获取环境变量,可以为单独的文件路径或列表

--environment  和arg类似,设置镜像变量,可以保存变量到镜像里面,启动容器也会包含这些变量设置

--expose 与DockerFile的EXPOSE一样,指定暴露端口,但不映射宿主机,只被连接的服务访问,实际上端口映射还得ports来

--ports 宿主端口:容器端口(HOST:CONTARNER)或仅仅指定容器的端口,宿主将会随机选择端口

--external_links  让compose项目里的容器连接到项目配置外部的容器(前提外部容器至少有一个是连接到与项目内部服务的同一个网络里面)

--labels  可以添加容器辅助说明

labels:  com.startupteam.description: "webapp for a startup team"  com.startupteam.department: "devops department"  com.startupteam.release: "rc3 for v1.0"

--extra_hosts  指定额外的host名称映射信息

extra_hosts: - "googledns:8.8.8.8" - "dockerhub:52.1.157.61"

启动后在服务容器中/etc/hosts文件添加以下条目

8.8.8.8 googledns52.1.157.61 dockerhub

--alias 网络上此服务的别名(备用主机名)。同一网络上的其他容器可以使用服务名称或此别名连接到其中一个服务的容器

services:  some-service:    networks:      some-network:        aliases:         - alias1         - alias3      other-network:        aliases:         - alias2

--healthcheck 通过命令检查容器是否健康运行

healthcheck:  test: ["CMD", "curl", "-f", "http://localhost"]  interval: 1m30s  timeout: 10s  retries: 3

--logging 配置日志选项

logging:  driver: syslog  options:    syslog-address: "tcp://192.168.0.42:123"

driver支持三种日志驱动类型:"json-file", "syslog", "none"

options配置日志驱动的参数: max-size: "200k"   , max-file: "10"

 

--volumes  数据卷所挂载路径设置,可以设置宿主机路径或加上访问模式

--volumes_from  从另一个服务或者容器挂载它的所以卷

    - service_name

    - container_name

--sysctls 配置容器内核参数

sysctls:  net.core.somaxconn: 1024  net.ipv4.tcp_syncookies: 0sysctls:  - net.core.somaxconn=1024  - net.ipv4.tcp_syncookies=0

--ulimits  指定容器的ulimits限制值

--extends  基于已有的服务进行扩展,

原有服务webapp,common.yml模板文件如下

webapp:

  build: ./webapp

  environment:

    - DEBUG=false

    - SEND_EMAILS=false

编写一个新的development.yml,进行扩展

web:

  extends:

    file: common.yml

    service: webapp

    ports:

      - "8000:8000"

    links:

      - db

    image: postgres

后者会自动继承common.yml中的webapp服务相关环节变量

 

--net 设置网络模式(使用和docker client 的--net的参数一样) net: "bridge", "none" , "container:[name or id]", "host".

--pid  跟主机系统共享进程命名空间,打开该选项的容器可以相互通过进程ID来访问和操作

--cap_add,cap_drop 添加或放弃容器的linux能力

cap_add:

– ALL
cap_drop:
– NET_ADMIN
– SYS_ADMIN

 

 

 

转载地址:http://mriqi.baihongyu.com/

你可能感兴趣的文章
内存操作越界略述
查看>>
消息与消息队列
查看>>
关于#include "stdafx.h"
查看>>
VC下线程同步的三种方法(互斥、事件、临界区)/(转)
查看>>
非常好的一篇U-BOOT的文章--转载
查看>>
【设计模式】学习之创建型 单例模式
查看>>
【设计模式】学习之创建型 原型模式
查看>>
【设计模式】学习之结构型 适配器模式-装饰器模式-代理模式
查看>>
Maven+Eclipse+Tomcat+Spring MVC web 请求 404 问题总结及noHandlerFound
查看>>
SpringMVC API缓存 LastModified的实现总结
查看>>
406 Not Acceptable 415 Unsupported Media Type Spring MVC consumes与produces
查看>>
MyBatis 高级映射与懒加载
查看>>
HCIP-H12-222练习题
查看>>
点到点IPSec VPN的配置
查看>>
MySQL InnoDB何时更新表的索引统计信息
查看>>
MTU 设置错误导致防火墙或者路由器断网
查看>>
子网划分详解与子网划分实例
查看>>
游戏通讯技术:帧同步技术
查看>>
防火墙技术指标---并发连接数/吞吐量
查看>>
V100服务器和T4服务器的性能指标
查看>>