什么是Docker?
容器在docker中如同货轮上的集装箱一般互相独立、彼此隔离
什么是Dockerfile?
Dockerfile是用来构建Docker镜像的文本文件,是由一系列命令和参数构成的脚本,并且支持以 # 开头的注释行,Dockerfile中的指令具有特定的书写和使用规则:
每条保留的指令都必须是大写字母且后面要跟随至少一个参数
指令按照从上到下的顺序执行,并且每条指令都会创建一个新的镜像层
Dockerfile中的常用指令:
指令 | 说明 |
FROM | 基础镜像,当前的镜像是基于哪个镜像的,意味着继承 |
LABEL MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 容器构建时需要运行的命令 |
CMD | 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换 |
EXPOSE | 当前容器对外暴露的端口 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 |
ENTRYPOINT | 指定一个容器启动时要运行的命令ENTRRYPOINT和CMD一样,都是在指定容器启动程序及参数 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
USER | 指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。 |
WORKDIR | 指定在创建容器后,终端默认登录的进来工作目录 |
ONBUILD | 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发 |
一个简单的Dockerfile文件
Docker基础使用
docker build 命令用于使用 Dockerfile 创建镜像:
docker build -t 镜像名:tag . #docker duild的基础语法,-t后接镜像名称与版本号,根据当前目录下的Dockerfile构建镜像
其他参数说明:
docker search指令用于 从Docker Hub查找镜像:
docker search 镜像名称 #简单使用
其他可选参数:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-f <过滤条件>:列出收藏数不小于指定值的镜像。
docker pull指令用于从镜像仓库中拉取或者更新指定镜像
docker pull 镜像名:版本号 #简单使用
可选参数:
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
docker load 用于导入镜像压缩包
docker load 镜像包 #简单使用
可选参数:
--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。
docker run 运行docker镜像
docker run -it --rm --name 容器名称 -v 载入的目录:容器中的目录 镜像名称
#简单使用的一些参数,-it表示交互式的打开容器,-v将指定的目录挂载到容器中,--name为容器进行命名,--rm在使用结束后删除容器
可选参数:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
参考资料:
docker工具视频课程:https://bdtcd.xetslk.com/s/3Rcvt0
https://blog.csdn.net/Eternity_zzh/article/details/126616526
https://www.runoob.com/docker/docker-command-manual.html