2015-02-07

容器的网络

  • docker run -P … 当-P标记时,随机映射端口至容器开放的网络端口
  • docker run -p 5000:5000
  • docker run -p 127.0.0.1:5000:5000 标记-p,映射指定端口
  • docker run -p 127.0.0.1::5000 指定地址的任意端口
  • docker port container_uuid 查看端口映射情况
  • 容器的名称是唯一的,可以在docker run –name NAME 来指定
  • docker run 添加–rm 标记,容器终止后立即删除,不可以与-d同时使用

容器间通信

#--link 实现互联, 实现机制:环境变量、更新/etc/hosts文件
$docker run -d --name db postgres
$docker run -d -P --name web --link db:db webapp python app.py

[root@king ~]# docker exec web env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=fb2308fbca60
DB_PORT=tcp://172.17.0.3:5432
DB_PORT_5432_TCP=tcp://172.17.0.3:5432
DB_PORT_5432_TCP_ADDR=172.17.0.3
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web/db
DB_ENV_PG_VERSION=9.3
HOME=/root

[root@king ~]# docker exec db env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=c39183d87bd7
HOME=/
PG_VERSION=9.3

基于Dockerfile创建镜像

Dockerfile组成部分

  • 基础镜像信息
  • 维护者信息
  • 镜像操作命令
  • 容器启动时执行指令

Dockerfile示例

#This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: Liu Jinlong
# Command format: Instruction [arguments / command]

#基础镜像
FROM ubuntu

#维护者信息
MAINTAINER Liu_Jinlong nnuljl@gmail.com

#镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

#容器启动时执行命令
CMD /usr/sbin/nginx

创建镜像

$docker build -t build_repo/first_image /tmp/docker_builder/
#自动搜索/tmp/docker_builder/目录下文件Dockerfile
#build_repo/first_image 为创建镜像的标签信息

Dockerfile指令

一般格式 INSTRUCTION arguments

FROM 
#FROM <image> or FROM <image>:<tag>
#创建多个镜像可以使用多次


MAINTAINER
#MAINTAINER <name> 维护者信息

RUN
#RUN <command> 后者 RUN ["executable", "param1", "param2"]
#前者在/bin/sh -c运行,后者使用 exec 执行

CMD
#CMD ["executable", "param1", "param2"]
#CMD command param1 param2  在/bin/sh中执行
#CMD ["param1", "param2"] 提供给ENTRYPOINT的默认参数
#启动时只会执行一条,多条最后一条执行,会被用户指定命令覆盖

EXPOSE
#EXPOSE <port> [<port>...]
#暴露的端口,-P会映射到该项

ENV
#ENV <key> <value>
#被RUN使用,运行时保持

ADD
#ADD <src> <dest>
#复制src到容器dest,src为Dockerfile的相对路径(文件或目录),URL

COPY
#COPY <src> <dest>
#复制本主机的src到dest,区别于ADD,COPY不支持URL,所以本地目录推荐COPY

ENTRYPOINT
#ENTRYPOINT ["executable", "param1", "param2"]
#ENTRYPOINT command param1 param2 (shell中执行)
#容器启动后执行的命令,不能被docker run中参数覆盖,只有一个,多个执行最后一个

VOLUME
#VOLUME ["/data"]
#创建基于本地或者其它容器的挂载点

USER
#USER daemon
#指定容器运行时用户,RUN执行用户

WORKDIR
#WORKDIR /path/to/workdir
#为RUN、CMD、ENTRYPOINT指定配置工作目录,多条指定,后续命令参数为相对路径则会基于之前指定的路径

ONBUILD
#ONBUILD [INSTRUCTION]
#配置当前镜像作为其它镜像的基础镜像时,执行的操作指令