• Docker基础语法学习笔记


    镜像

    镜像名词

    名称释义备注
    REPOSITORY镜像的仓库源
    TAG镜像的版本标签同一仓库源可以有多个 TAG, eg:ubuntu:15.10 ubuntu 仓库源 15.10 标签版本,所以 用 REPOSITORY: TAG 来定义不同的镜像
    IMAGE ID镜像ID
    CREATED镜像创建时间
    SIZE镜像大小

    镜像命令

    获取新镜像(仓库管理)

    docker login //登录

    docker search <镜像名> //搜索 某镜像名 来寻找适合我们的镜像

    docker pull <仓库源>:<版本标签> //下载镜像

    • 当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

    docker push <镜像name>:<镜像tag>//将自己的镜像推送到 Docker Hub

    • –disable-content-trust :忽略镜像的校验,默认开启

    docker logout //退出

    创建镜像

    1、从已经创建的容器中更新镜像,并且提交这个镜像

    docker run -t -i ubuntu:15.10 /bin/bash //更新镜像之前,我们需要使用镜像来创建一个容器。//第一步通过某需要复制的镜像创建一个容器

    apt-get update// 在容器内执行该命令 更新
    apt install <命令> //在容器中安装命令 (非必须),

    exit / ctrl+c 退出容器

    docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2 //通过命令 docker commit 来提交容器副本

    2、使用 Dockerfile 指令来创建一个新的镜像

    命令释义备注
    -FROM指定基础镜像必须是第一条指令, 如果不以任何镜像为基础,可以写成FROM scratch
    -RUN运行指定的命令RUN是构建容器时就运行的命令以及提交运行结果, Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大
    -CMD容器启动时要运行的命令(变参)CMD是容器启动时执行的命令,在构建时并不运行,构建时仅仅指定了这个命令到底是个什么样子.CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
    -EXPOSE指定容器运行时监听的端口想要主机和容器之间的端口有映射关系,必须在容器启动的时候加上-P或者-p选项
    -ENV设置环境变量
    -ARG设置变量命令构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
    -ADD把文件复制到镜像中如果是压缩文件,会自动解压,相当于scp命令,只是ADD不需要进行验证
    -COPY复制命令与ADD的区别 :COPY的只能是本地文件,并且不能解压,其他用法一致
    -ENTRYPOINT启动时的默认命令(定参)类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
    -VOLUME实现挂载数据卷作用:①避免重要的数据,因容器重启而丢失,这是非常致命的。②避免容器不断变大。docker run 时 -v 参数修改挂载点
    -USER设置启动容器的用户
    -WORKDIR设置工作目录设置之后,容器启动就会进入设置的目录中
    -ONBUILD用于延迟构建命令的执行ONBUILD指令只对当前镜像的子镜像生效
    -STOPSIGNAL当容器退出时给系统发送什么样的指令
    -HEALTHCHECK检查容器健康状况
    -LABEL用来给镜像添加一些元数据key1=value1 key2=value2 形式
    • 上下文路径: 是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包
    • 上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

    docker build -t <镜像名> //构件镜像

    • -t :指定要创建的目标镜像名

    docker tag <镜像ID> <用户名称>/<镜像源名>

    查看镜像

    docker images //列出本地主机上的镜像

    runoob@runoob:~$ docker images           
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
    php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
    nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
    mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    docker image ls //展示所有镜像的关键信息

    删除镜像

    docker rmi -rf <镜像> //删除本地一个或多个镜像。 (docker rmi -f runoob/ubuntu:v4)

    • -f :强制删除;
    • –no-prune :不移除该镜像的过程镜像,默认移除;

    容器

    容器名词

    名称释义备注
    CONTAINER ID容器 ID
    NAMES容器名称自动分配 且和id一样保持唯一
    IMAGE使用的镜像eg:ubuntu15.10
    COMMAND启动容器时运行的命令
    STATUS容器状态状态有7种:created(已创建) restarting(重启中) running 或 Up(运行中) removing(迁移中) paused(暂停) exited(停止) dead(死亡)
    PORTS容器的端口信息和使用的连接类型(tcp/udp)eg : 0.0.0.0:32769->5000/tcp 即 tcp连接 ,Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

    容器命令

    启动和重启

    docker run -it <镜像名> /bin/bash //可交互

    • -t: 在新容器内指定一个伪终端或终端。
    • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
    • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
    • ctrl+C 或exit 退出命令模式

    docker run -d -p <映射主机端口>: --name <容器名> <应用启动文件> //后台启动一个应用

    • 通过 -d 参数 实现 ( -d 参数默认不会进入容器)
    • -P -p:将容器内部使用的网络端口随机映射到我们使用的主机上。
      -P: 是容器内部端口随机映射到主机的端口(-P 8081) 。
      -p: 是容器内部端口绑定到指定的主机端口(-p 8081:5000)
      -p: 指定容器绑定的网络地址(-p 127.0.0.1:5001:5000)。
      -p: 指定tcp/udp (-p 127.0.0.1:5000:5000/udp)
    • –name 标识来命名容器

    docker start <容器ID> //启动一个已经停止的容器

    docker restart <容器ID> // 重新启动容器

    进入容器

    docker attach <容器ID> //进入容器 退出后停止容器,不建议用

    docker exec <容器ID> //进入容器 且 退出后不会停止容器

    容器的停止及删除

    docker stop <容器ID> //停止

    docker rm -f <容器ID> //删除镜像

    • 删除容器时,容器必须是停止状态,否则会报如下错误
    runoob@runoob:~$ docker rm wizardly_chandrasekhar
    Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
    
    • 1
    • 2

    容器的导出及导入

    docker export 容器ID> 文件名.tar // 导出并快照到tar文件

    cat 文件名.tar | docker import 镜像名 //导入tar文件到某镜像

    docker import 某url或目录 镜像名//导入指定 URL 或者某个目录到某镜像(eg : docker import http://example.com/exampleimage.tgz example/imagerepo)

    提交

    docker commit -m=“提交的描述信息” -a=“指定镜像作者” <容器 ID> <创建的镜像名> // 提交容器副本 保存成新镜像

    • -m: 提交的描述信息
    • -a: 指定镜像作者

    查看容器

    docker ps -a //查看当前所有容器的信息和状态

    runoob@runoob:~#  docker ps
    CONTAINER ID        IMAGE                             PORTS                     NAMES
    bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar
    d3d5e39ed9d3        training/webapp     ...        0.0.0.0:32769->5000/tcp   xenodochial_hoov
    
    • 1
    • 2
    • 3
    • 4

    docker port <容器ID或者 容器名称>//查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号

    runoob@runoob:~$ docker port bf08b7f2cd89
    5000/tcp -> 0.0.0.0:5000
    
    • 1
    • 2

    docker top <容器ID/容器名称>

    runoob@runoob:~$ docker top wizardly_chandrasekhar
    UID     PID         PPID          ...       TIME                CMD
    root    23245       23228         ...       00:00:00            python app.py
    
    • 1
    • 2
    • 3

    docker inspect <容器ID/容器名称>// 来查看 Docker 的底层信息

    docker ps -l //查询最后一次创建的容器:

    log

    docker logs -f <容器ID/容器名称>

    • -f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

    容器互联

    1、先创建一个新的Docker网络

    docker network create -d bridge <网络名(eg: test-net)>

    • -d:参数指定 Docker 网络类型,有 bridge、overlay。

    2、运行多个容器并连接到新建的网络中

    docker run -itd --name <容器名(test1)> --network <网络名(test-net)> <镜像名(ubuntu)> /bin/bash
    docker run -itd --name test2 --network test-net ubuntu /bin/bash

    3、多个容器之间需要互相连接,使用 Docker Compose

    Docker Compose

    Docker Compose 教程

  • 相关阅读:
    Prometheus接入AlterManager配置邮件告警(基于K8S环境部署)
    SpringApplication启动详解说明
    数码视讯Q5、Q7_晶晨S905L/M/M2_nand&emmc通刷_完美精简线刷固件
    JVM介绍
    2022年最新江西建筑施工物料提升(建筑特种作业)模拟题库及答案
    iOS(Object C) 冒泡排序
    Java重要知识点
    scrum敏捷开发方法论
    墨子web3时事周报
    【多服务场景化解决方案】AR虚拟技术助力智能家装
  • 原文地址:https://blog.csdn.net/yuqiongran/article/details/128161183