Docker基础学习
Docker安装
官网打开docs,按流程操作即可,不做赘述
Docker run 运行原理
Docker命令
帮助命令
docker version命令
译为:docker 版本
查看当前docker的版本信息
docker info命令
译为: docker 信息
查看docker的全部信息,包括镜像和容器的数量
docker –help命令
查看docker的帮助信息
镜像命令
docker images 显示镜像命令
image 译为:形象,镜像
查询镜像
选项
-a / –all 显示所有镜像
–digests 显示摘要
-f 显示满足条件的镜像;
**–format :**指定返回值的模板文件;
**–no-trunc :**显示完整的镜像信息;
-q :只显示镜像ID
docker search 查找镜像命令
search 译为:搜索
用于从Docker Hub查找镜像
选项:
-f : 根据提供的条件过滤输出
–format string 使用Go模板格式化字符串打印搜索
参数说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
docker pull 下载镜像命令
pull 译为:拉
用于将docker hub 中的镜像下载至docker中
例如: docker pull mysql
选项:
- -a 从镜像仓库下载所有镜像
可选:**[:tag]** //指定下载的镜像版本,默认最新版
指定下载版本:
docker pull mysql :5.7 (版本必须在docker hub 中存在)
docker rmi 删除镜像命令
简单理解:rm 是linux系统的删除文件命令,i是images,所以rmi即为删除镜像
选项:
**-f :**强制删除;
- **–no-prune :**不移除该镜像的过程镜像,默认移除;
批量删除:
docker rmi -f $(docker image -aq)docker rmi -f 容器1 容器2 容器3 ……..
docker commit 命令从容器中下载镜像
commit 译为:犯罪,承诺,保证
语法:docker commit [选项] 容器id 目标镜像名:版本号 [存放位置]
将我们改动后的容器下载成一个新的镜像
- **-a :**提交的镜像作者;
- **-c :**使用Dockerfile指令来创建镜像;
- **-m :**提交时的说明文字;
- **-p :**在commit时,将容器暂停。
容器命令
docker run 命令启动容器
创建一个新的容器并运行一个命令
语法: docker run [选项] 镜像 [命令]
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=”nginx-lb”: 为容器指定一个名称;
- –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=[]: 开放一个端口或一组端口;
- –volume , -v: 绑定一个卷
选项:
注意:
docker ps 查看容器运行情况
docker ps 查看当前正在运行的容器
选项:
- -a : 显示所有容器,包括曾经运行的容器
- -f :根据条件过滤显示的内容
- **–format :**指定返回值的模板文件
- **-l :**显示最近创建的容器
- **-n :**列出最近创建的n个容器
- **–no-trunc :**不截断输出
- **-q :**静默模式,只显示容器ID
- **-s :**显示总的文件大小
退出容器
exit #直接退出容器
Ctrl + P + Q #容器不停止退出
docker rm 命令删除容器:
同linux删除文件命令,删除容器
语法:docker rm 容器id
- **-f :**通过 SIGKILL 信号强制删除一个运行中的容器。
- **-l :**移除容器间的网络连接,而非容器本身。
- **-v :**删除与容器关联的卷。
删除正在运行的容器使用-f强制删除
docker restart/stop/kill 命令启动/重启/停止/杀死 容器
语法:docker start 容器id 启动一个或多个已经被停止的容器
语法:docker restart 容器id 重启容器
语法: docker stop 容器id 停止一个运行中的容器
语法: docker kill 容器id 杀死容器进程/强制停止
**-s :**向容器发送一个信号
其他命令
docker logs查看日志
语法:docker logs [options选项] 容器id
- -f : 跟踪日志输出
- **–since :**显示某个开始时间的所有日志
- -t : 显示时间戳
- **–tail :**仅列出最新N条容器日志
docker top 查看进程
语法: docker top 容器id
docker inspect 显示容器元信息
iinspect 译为:检查
语法 :docker inspect 容器id
选项:
- **-f :**指定返回值的模板文件。
- **-s :**显示总的文件大小。
- **–type :**为指定类型返回JSON。
进入正在运行的容器
docker exec
docker exec [选项] 容器命令
exec 译为:执行
在运行的容器中执行命令
例如:
docker run -d centos docker exec -it centos(id)
- **-d :**分离模式: 在后台运行
- **-i :**即使没有附加也保持STDIN 打开
- **-t :**分配一个伪终端
docker attach
docker attach [选项] 容器
attach 译为:连接
连接到正在运行中的容器。
要attach上去的容器必须正在运行
- 注意:
dcoker cp 命令复制容器
**docker cp :**用于容器与主机之间的数据拷贝。
语法:docker cp [选项] 容器id:容器内路径 目的主机路径
**-L :**保持源目标中的链接
拷贝是一个手动的过程,使用卷可自动同步
docker save 命令将容器打包到本机
语法 docker save -o [目标文件夹名] [镜像]
小结:
容器的数据卷
数据卷的意义
数据卷就是对数据的同步
绑定数据卷后相当于在本地做了备份,即使容器被删除,数据依旧存在
无论在容器中修改卷目录中的文件还是本地修改,对应挂载卷的位置都会进行同步
挂载信息可以使用docker inspect 容器名/id 进行查看
run命令 -v选项
docker run -v 选项用于对数据卷进行挂载
语法格式:docker run -v 本地位置:容器位置
-v选项还可以定义读写权限
用于限定容器和挂载位置的权限
- docker run -d -P –name=”nginx” -v 本地:容器:ro/rw(权限) 镜像名
简单理解:将容器的某个或某些目录进行了备份,备份位置为指定的本地位置
具名挂载与匿名挂载
具名挂载
即挂载卷时定义了名称
语法:docker run -v name 路径 镜像名 即是具名挂载
-v 选项不指定本地目录时,将挂载至随机目录
在没有指定挂载目录时,默认挂载到 /var/lib/docker/volumes/ 目录下
-P 选项用于随机映射端口
通过具名挂载可以方便的找到一个卷
匿名挂载
挂载卷时未定义名称为匿名挂载
语法:docker run -v 路径 镜像名 既是匿名挂载
docker volume命令 管理卷
挂载数据到容器的两种命令之一
这里用于查看挂载的情况,具名挂载或匿名挂载
语法:docker volume ls
这里的挂载方式都是匿名挂载,如果是具名挂载,volumne name 会显示我们自己定义的卷名
Dockerfile
docker 就是用来构造镜像的文件 本质是命令脚本
docker file 脚本中每个指令忽略大小写,但建议使用大写
通过脚本可以生成一个镜像
步骤:
构建思路总结:
- 基于什么
- 添加什么
- 构建环境
- 运行
脚本示例:
FROM centos
MAINTAINER atmujie
env mypath /bin/bash
workdir $mypath
run yum -y install vim
run yun -y install net-tools
expose 80
cmd echo &mypath
docker build 命令运行dockerfile构建镜像
语法:docker build 选项【一般用 -f】 dockerfile文件路径 【其他命令】 构建成功的镜像名:版本 .
选项:
- **–build-arg=[] :**设置镜像创建时的变量;
- **–cpu-shares :**设置 cpu 使用权重;
- **–cpu-period :**限制 CPU CFS周期;
- **–cpu-quota :**限制 CPU CFS配额;
- **–cpuset-cpus :**指定使用的CPU id;
- **–cpuset-mems :**指定使用的内存 id;
- **–disable-content-trust :**忽略校验,默认开启;
- **-f :**指定要使用的Dockerfile路径;
- **–force-rm :**设置镜像过程中删除中间容器;
- **–isolation :**使用容器隔离技术;
- **–label=[] :**设置镜像使用的元数据;
- **-m :**设置内存最大值;
- **–memory-swap :**设置Swap的最大值为内存+swap,”-1”表示不限swap;
- **–no-cache :**创建镜像的过程不使用缓存;
- **–pull :**尝试去更新镜像的新版本;
- **–quiet, -q :**安静模式,成功后只输出镜像 ID;
- **–rm :**设置镜像成功后删除中间容器;
- **–shm-size :**设置/dev/shm的大小,默认值是64M;
- **–ulimit :**Ulimit配置。
- **–squash :**将 Dockerfile 中所有的操作压缩为一层。
- –tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
- –network: 默认 default。在构建期间设置RUN指令的网络模式
–volumes-from 选项实现容器间数据共享
docker run centos02 –volume-form centos01
简单理解:让两个容器相互同步
docker 指令
FROM
指定构建所用的基础镜像,一切的开始
MAINTAINER 译为:维修人员 新版以过期,改用LABELS
说明镜像的作者,统一格式为姓名加邮箱
RUN
镜像构建时需要运行的命令
ADD
添加/集成镜像在基础镜像的基础上添加其他镜像或者内容
格式同COPY
WORKDIR
定义镜像的工作目录,一般默认为/bin/bash
WORKDIR <工作目录路径>
VOLUME 译为:行李
挂载卷,在主机设置备份
VOLUME ["<路径1>", "<路径2>"...] VOLUME <路径>
EXPOSE 译为:暴露
指定暴露的端口 与-p 作用相同
EXPOSE <端口1> [<端口2>...]
CMD
指定容器启动时要运行的命令 ,可被替代【替换】
CMD <shell 命令> CMD ["<可执行文件或命令>","<param1>","<param2>",...] CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
ENTRYPOINT 译为:进入点,入口点
指定容器启动时要运行的命令 ,存在多个时只有最后一个会生效,可以追加命令【追加】
可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
语法:
ENTRYPOINT ["<executeable>","<param1>","<param2>",...] //executeable 可执行的 param 参数
UNBUILD 译为:取消生成
当继承一个DockerFile时,运行该指令。触发指令
ONBUILD <其它指令>
COPY
类似ADD,将我们的文件拷贝到镜像中
COPY [--chown=<user>:<group>] <源路径1>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] #<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则 #<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。 COPY hom* /mydir/ COPY hom?.txt /mydir/
ENV
构建的时候设置环境变量
语法:
ENV <key> <value>
注意:
docker hub 中百分之99的镜像都以scratch镜像开始
[ ] 用于执行多行命令,用逗号分隔(也就是空格)
如:run [“./test.php”,”dev”,”offline”] 等同于 run ./test.php dev offline
<命令行命令> 等同于在终端操作的shell命令
Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
FROM centos
FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz 以上执行会创建 3 层镜像。可简化为以下格式: FROM centos RUN yum install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
docker build 命令最后一个 . 是上下文路径
是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。