B站——【公开课】Docker入坑教程【33集】 庄七
11. Docker的远程访问
12. Dockerfile指令
13. Dockerfile构建过程
环境准备:
第二台安装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"
创建一个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
已经存在的镜像
基础镜像
必须是第一条非注释指令
MAINTAINER
指定镜像的作者信息,包含镜像的所有者和联系信息
RUN
指定当前镜像中运行的命令
shell模式
RUN
默认shell /bin/sh -c command
exec模式
RUN [ "executable", "param1", "param2"]
可以指定其他shell RUN ["/bin/bash", "-c", "echo hello"]
EXPOSE
指定运行该镜像的容器使用的端口
在使用时仍需指定 -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 …
ADD [""…""] (使用于文件路径中有空格的情况)
COPY …
COPY [""…""] (使用于文件路径中有空格的情况)
ADD vs COPY
ADD包含类似tar的解压功能
如果单纯复制文件,Docker推荐使用COPY
VOLUME ["/data"]
用于向基于镜像创建的容器添加数据卷,共享数据/数据持久化
WORKDIR /path/to/workdir
在镜像创建新容器时,指定工作目录,一般使用绝对路径,相对路径会持续传递
ENV
ENV
用户设置环境变量
USER daemon
指定镜像运行的用户,默认为root
ONBUILD [INSTRUCTION]
镜像触发器
当一个镜像被其他镜像作为基础镜像时执行
会在构建过程中插入指令
从基础镜像运行一个容器
执行一条指令,对容器做出修改
执行类似docker commit的操作,提交一个新的镜像层
基于刚提交的镜像运行一个新容器
执行Dockefile中的下一条指令,直至所有指令执行完毕
中间层镜像不会被删除,中间层容器会被删除
可以使用中间层镜像调试
查找错误
构建缓存
不适用构建缓存
# docker build --no-cache
或者
在Dockerfile中设置缓存刷新时间
ENV REFRESH_DATE 2019-8-2
查看镜像构建的过程
# docker history [image]