帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
镜像命令
docker images
docker search搜索镜像
docker pull 下载命令
dockers rml 删除镜像
容器命令
新建容器并启动
docker run [可选参数] image
列出所有运行中的容器
docker ps 命令
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重起容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用其他命令
后台启动容器
命令 docker run -d 镜像名
查看日志命令
docker logs -f -t --tail 容器
查看容器中的进程信息
docker top 容器id
进去当前正在运行的容器
docker exit -it 容器id bashShell
decker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,不会启动新的进程!
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机
参考文档https://www.cnblogs.com/qkshhan/p/14781515.html
2. 列出Dockerfile中常用指令及说明什么是Dockerfile?
dockerfile用于快速有序且直观地完成对镜像的定制。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Dockerfile常用指令
FROM
FROM命令指定了基础镜像,比如FROM ubuntu,则表示你的镜像的基本镜像来自ubuntu
MAINTAINER
maintainer意为维护者,用来标识维护者信息(作者)
RUN
格式为 RUN 或`RUN [“executable”, “param1”, “param2”],命令较长时可以使用****换行
CMD
格式为
1 CMD [“executable”, “param1”, “param2”]
2 CMD command param1 param2(在/bin/sh中执行)
3 CMD [“param1”, “param2”](提供给ENTRYPOINT的默认参数)
如果用户启动容器时指定了运行的指令,则会覆盖掉CMD的指令
EXPOSE
告诉Docker容器需要暴露的端口号,这样在启动时可以通过-P或-p来指定对应的端口映射
例:EXPOSE 20 8080
ENV
指定环境变量,会被后续的RUN指令使用,并在容器运行时保持
如ENV PG_VERSION 9.3.4
ADD
ADD
该指令可以复制文件或目录到容器,可以是Dockerfile所在目录的相对路径,也可以是URL,也可以是tar(会自动解压)。
COPY
COPY
复制本机的为容器的,相比ADD,它不支持URL,自动解压。
ENTRYPOINT
入口点,格式为ENTRYPOINT [“executable”, “param1”, “param2”] 或ENTRYPOINT command param1 param2(sh)
入口点只能被配置一个,在容器启动时会自动被执行,和CMD相比,它的特点是不会被用户提供的命令覆盖
VOLUME
指定数据挂载,创建数据卷
格式为:
1 VOLUME ["<路径1>", “<路径2>”…]
2 VOLUME <路径>
USER
指定运行容器时的用户名或UID,后续的RUN也会使用指定用户,可以通过这种方式限制权力
WORKDIR
指定WORKDIR,方便后续的RUN指令执行,后续的相对路径依据与WORKDIR
ONBULID
当该镜像将来被用来作为其它镜像的基础镜像时所执行的操作指令(新的Dockerfile使用From thisImage)
如onBULID ADD . /app/src,onBULID RUN echo “onbulid”
docker build命令依据Dockerfile创建镜像
docker build path,会自动搜索path下的Dockerfile,并将Dockerfile路径下所有的目录和文件发送到Docker服务端,由服务端来创建镜像
通过-t 可以指定生成的镜像的标签
使用.dockerignore 忽略路径下的目录和文件
每一行添加一条匹配模式,语法类似.gitignore
3. Dockerfile中的COPY与ADD指令有什么区别?COPY 复制文件
格式:
COPY <源路径>... <目标路径> COPY ["<源路径1>",... "<目标路径>"]
COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。比如:
COPY package.json /usr/src/app/
<源路径> 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则,如:
COPY hom* /mydir/ COPY hom?.txt /mydir/
<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
此外,还需要注意一点,使用 COPY 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。
ADD 更高级的复制文件
ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。
比如 <源路径> 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去。下载后的文件权限自动设置为 600,如果这并不是想要的权限,那么还需要增加额外的一层 RUN进行权限调整,另外,如果下载的是个压缩包,需要解压缩,也一样还需要额外的一层 RUN 指令进行解压缩。所以不如直接使用 RUN 指令,然后使用 wget 或者 curl 工具下载,处理权限、解压缩、然后清理无用文件更合理。因此,这个功能其实并不实用,而且不推荐使用。
如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。
在某些情况下,这个自动解压缩的功能非常有用,比如官方镜像 ubuntu 中:
FROM scratch ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz / ...
但在某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用 ADD 命令了。
在 Docker 官方的最佳实践文档中要求,尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。
另外需要注意的是,ADD 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
因此在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。
参考文档:https://yeasy.gitbooks.io/docker_practice
4. 如何在一个没有外网连接的Docker主机上使用一个来自其他主机的镜像?主要是实现主机之前可以互通ping通。
使用Docker容器跨主机通信方法:1、直接路由方式。2、基于OVS+GRE的大二层通信。
直接路由方式
方式最简单,只需一步:
增加一个静态路由。
当然前提是,docker0 网桥的网段改掉,同时需要提醒的是,需要把本机的路由转发打开。
ubuntu的话: 修改 /etc/sysctl.conf,把ip_forward = 1 的注释去掉即可 centos的话: 修改 /etc/sysctl.d/99-sysctl.conf 添加net.ipv4.ip_forward = 1,然后试试sysctl -p 很简单的方式,其实很像flannel网络的Host-Gateway的原理
OVS+GRE的大二层通信
修改Docker0的网络地址
创建ovs bridge
设置gre端口
参考文档:
https://www.cnblogs.com/xiao987334176/p/10049844.html
https://blog.csdn.net/xialingming/article/details/83093031



