Docker基础学习


Docker基础学习

Docker安装

官网打开docs,按流程操作即可,不做赘述

Docker run 运行原理

image-20210407200440453

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]** //指定下载的镜像版本,默认最新版

image-20210410144056382

指定下载版本:

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时,将容器暂停。

image-20210512151404838

容器命令

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: 绑定一个卷

选项:

image-20210410214941892

  • 注意:

    image-20210411171041896

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条容器日志

image-20210411171858912

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上去的容器必须正在运行

  • 注意:
  • image-20210411174339114

dcoker cp 命令复制容器

**docker cp :**用于容器与主机之间的数据拷贝。

语法:docker cp [选项] 容器id:容器内路径 目的主机路径

**-L :**保持源目标中的链接

拷贝是一个手动的过程,使用卷可自动同步

docker save 命令将容器打包到本机

语法 docker save -o [目标文件夹名] [镜像]

小结:

image-20210411175629753

容器的数据卷

数据卷的意义

数据卷就是对数据的同步

绑定数据卷后相当于在本地做了备份,即使容器被删除,数据依旧存在

无论在容器中修改卷目录中的文件还是本地修改,对应挂载卷的位置都会进行同步

挂载信息可以使用docker inspect 容器名/id 进行查看

run命令 -v选项

docker run -v 选项用于对数据卷进行挂载

语法格式:docker run -v 本地位置:容器位置

-v选项还可以定义读写权限

用于限定容器和挂载位置的权限

  • docker run -d -P –name=”nginx” -v 本地:容器:ro/rw(权限) 镜像名

简单理解:将容器的某个或某些目录进行了备份,备份位置为指定的本地位置

image-20210413220539366

具名挂载与匿名挂载

  • 具名挂载

    即挂载卷时定义了名称

    语法:docker run -v name 路径 镜像名 即是具名挂载

    • -v 选项不指定本地目录时,将挂载至随机目录

      在没有指定挂载目录时,默认挂载到 /var/lib/docker/volumes/ 目录下

    • -P 选项用于随机映射端口

    通过具名挂载可以方便的找到一个卷

  • 匿名挂载

    挂载卷时未定义名称为匿名挂载

    语法:docker run -v 路径 镜像名 既是匿名挂载

docker volume命令 管理卷

挂载数据到容器的两种命令之一

这里用于查看挂载的情况,具名挂载或匿名挂载

语法:docker volume ls

image-20210414114309609

这里的挂载方式都是匿名挂载,如果是具名挂载,volumne name 会显示我们自己定义的卷名

Dockerfile

docker 就是用来构造镜像的文件 本质是命令脚本

docker file 脚本中每个指令忽略大小写,但建议使用大写

通过脚本可以生成一个镜像

  • 步骤:

    image-20210414143819811

    构建思路总结:

    • 基于什么
    • 添加什么
    • 构建环境
    • 运行

脚本示例:

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 指令

image-20210414144838928

  • 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 引擎,如果文件过多会造成过程缓慢。

Docker网络原理

IDEA整合Docker

Docker Compose

Docker Swarm

CI\CD Jenkins


文章作者: Atmujie
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Atmujie !
评论
  目录