Docker入门学习笔记(三)


11. Docker的远程访问

12. Dockerfile指令

13. Dockerfile构建过程


11. Docker的远程访问

环境准备:

第二台安装Docker的服务器
修改Docker守护进程启动选项,区别服务器
保证Client API和Server API版本一致

# docker version
    查看版本API是否一致

修改服务器端配置

修改Docker守护进程启动项
-H  tcp://host:port
    unix:///path/to/socket
    fd://* or fd://socketfd
守护进程默认配置:
-H  unix:///var/run/docker.sock

vim /etc/default/docker
    DOCKER_OPTS = "-H tcp://0.0.0.0:2375"
    # 一般选择2375端口
重启服务 # service docker restart
ifconfig    获取本机IP地址

远程访问

curl http://服务器IP:配置port/info

客户端远程访问:

修改客户端配置
使用Docker客户端命令选项
-H  tcp://host:port
    unix:///path/to/socket
    fd://* or fd://socketfd
客户端默认配置:
-H  unix:///var/run/docker.sock

# docker -H tcp://ip:port info

使用环境变量简化操作DOCKER_HOST
export DOCKER_HOST="tcp://ip:port"

将环境变量置空则返回本机服务
export DOCKER_HOST=""

设置了远程访问模式后的服务端不再支持本机连接

1.将本机作为远程客户端,通过DOCKER_HOST连接
2.修改本机配置,添加默认配置
vim /etc/default/docker
    DOCKER_OPTS = "-H tcp://0.0.0.0:2375 -H  unix:///var/run/docker.sock"

12. Dockerfile指令

创建一个Dockerfile

# first dockerfile
FROM ubuntu:14.04
MAINTAINER  name "name@email"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80

指令格式

# Comment
INSTRUCTION argument

FROM <image>[:<tag>]

已经存在的镜像
基础镜像
必须是第一条非注释指令

MAINTAINER <name>

指定镜像的作者信息,包含镜像的所有者和联系信息

RUN

指定当前镜像中运行的命令
shell模式
    RUN <command>
    默认shell   /bin/sh -c command
exec模式
    RUN [ "executable", "param1", "param2"]
    可以指定其他shell   RUN ["/bin/bash", "-c", "echo hello"]

EXPOSE <port> [<port>…]

指定运行该镜像的容器使用的端口
在使用时仍需指定    -p port

CMD

提供容器运行时的命令,作为默认设置,会被docker run中相同命令覆盖
CMD [ "executable", "param1", "param2"] (exec模式)
CMD command param1 param2   (shell模式)
CMD ["param1", "param2"]    (作为ENTRYPOINT指令的默认参数)

ENTRYPOINT

ENTRYPOINT [ "executable", "param1", "param2"] (exec模式)
ENTRYPOINT command param1 param2   (shell模式)
默认不会被docker run中命令覆盖
可以使用 docker run entrypoint 覆盖

ADD、COPY

将文件/目录复制到Dockerfile构建的文件中,源地址,目标地址
ADD <src>…<dest>
ADD ["<src>"…"<dest>"]  (使用于文件路径中有空格的情况)

COPY <src>…<dest>
COPY ["<src>"…"<dest>"]  (使用于文件路径中有空格的情况)

ADD vs COPY
    ADD包含类似tar的解压功能
    如果单纯复制文件,Docker推荐使用COPY

VOLUME ["/data"]

用于向基于镜像创建的容器添加数据卷,共享数据/数据持久化

WORKDIR /path/to/workdir

在镜像创建新容器时,指定工作目录,一般使用绝对路径,相对路径会持续传递

ENV <key><value>

ENV <key>=<value>…

用户设置环境变量

USER daemon

指定镜像运行的用户,默认为root

ONBUILD [INSTRUCTION]

镜像触发器
当一个镜像被其他镜像作为基础镜像时执行
会在构建过程中插入指令

13. Dockerfile构建过程

  • 从基础镜像运行一个容器
  • 执行一条指令,对容器做出修改
  • 执行类似docker commit的操作,提交一个新的镜像层
  • 基于刚提交的镜像运行一个新容器
  • 执行Dockefile中的下一条指令,直至所有指令执行完毕


  • 中间层镜像不会被删除,中间层容器会被删除
  • 可以使用中间层镜像调试
    查找错误
  • 构建缓存
  • 不适用构建缓存
# docker build --no-cache
或者
在Dockerfile中设置缓存刷新时间
ENV REFRESH_DATE 2019-8-2
  • 查看镜像构建的过程
# docker history [image]