Docker 学习笔记

镜像命令

docker images

  • docker images: 查看本地的所有镜像
  • 后面可以跟的常用参数有 :
    • -a : 列出所有的镜像

    • -q : 只显示镜像 id

      image.png
  • REPOSITORY : 镜像的仓库源

  • TAG : 镜像的标签

  • TMAGE ID : 镜像的 id

  • CREATED : 镜像的创建时间

  • SIZE : 镜像的大小

docker search

  • docker search : 搜索镜像
  • docker search mysql --filter=STARS=3000: 搜索 MySQL 镜像 stars 超过 3000 的镜像

docker pull

  • docker pull 镜像名称:[tag版本] : 下载镜像, 默认下载最新版

docker rmi

  • docker rmi -f 镜像id : 删除指定镜像, 如果要删除多个镜像, 则每个镜像 id 之间用空格隔开
  • docker rmi -f $(docker images -aq) : 删除所有的镜像

容器命令

  • 有了镜像后才可以创建容器

新建容器并启动

  • docker run [可选参数] 镜像id

  • 参数:

    • --name="容器名称"
    • -d : 以后台方式运行
    • -it : 进入到容器内部, 常用的是: docker run -it centos /bin/bash
    • -p : 指定容器端口
      • -p ip:主机端口:容器端口
      • -p 主机端口:容器端口
      • -p 容器端口
      • 容器端口
    • -P : 随机指定端口
    • -e : 环境配置, 如配置 MySQL 密码

退出容器

  • exit : 退出并关闭容器

  • command + p + q : 退出但是不关闭容器

查看正在运行中的容器

  • docker ps
  • docker ps -a : 查看正在运行的容器和曾经运行过的容器
  • docker ps -n=3: 显示最近新建的 3 个容器
  • docker ps -q : 只显示容器的编号

删除容器

  • docker rm 容器id : 删除指定的容器, 不能删除正在运行的容器, 如果想要删除正在运行的, 可以使用 rm -f
  • docker rm -f $(docker ps -aq) : 删除所有的容器
  • docker ps -a -q|xargs docker rm : 删除所有的容器

启动容器

  • docker start 容器id

重启容器

  • docker restart 容器id

停止正在运行的容器

  • docker stop 容器id

强制停止正在运行的容器

  • docker kill 容器id

其他常用命令

常看日志

  • docker logs -tf 容器id : 查看指定容器的日志

  • docker logs -tf --tail 10 容器id : 查看指定容器的最近 10 条的日志

查看容器的进程信息

  • docker top 容器id

查看镜像的元数据

  • docker inspect 镜像id

进入当前正在运行的容器

  • docker exec -it 容器id /bin/bash : 进入容器后新开启一个终端, 可以在里面进行一些操作 (常用)
  • docker attach 容器id : 进入当前正在执行的终端

从容器内拷贝文件到主机上

  • docker cp 容器id:容器内路径 目的主机路径

查看 CPU 状态

  • docker stats

增加 tag

  • docker tag 镜像id 镜像名称:版本号

commit 镜像

  • docker commit -m='提交的描述信息' -a='作者' 容器id 目标镜像名:[版本]

数据卷

查看所有的数据卷

  • docker volume ls
  • 可以使用 docker inspect 容器id 来查看是否挂载成功, 在显示的信息中查看 Mounts 部分的内容

指定路径挂载

  • docker run -it -v 主机目录:容器内目录 镜像名称 /bin/bash

匿名挂载

  • docker run -it -v 容器内目录 镜像名称

具名挂载

  • 大多数情况下都使用的是具名挂载

  • docker run -it -v 随便起的名字:容器内目录 镜像名称

  • docker run -it -v 随便起的名字:容器内目录:ro 镜像名称 : 其中 ro 表示的是只能读, read only, 表示的是不能在容器内部进行修改, 只能通过宿主机来修改

  • docker run -it -v 随便起的名字:容器内目录:rw 镜像名称 : 其中 rw 表示的是可读可写, read write (默认的)

使用 dockerfile 来挂载

  • 案例:

    • touch dockerfile

    • vim dockerfile

      • FROM centos
        VOLUME ['volume01', 'volume02']
        
        CMD echo '====end======'
        CMD /bin/bash
        
    • docker build -f dockerfile -t xiaosheng/centos .

      • -f : 表示 dockerfile 文件的路径
      • -t : 表示要生成的镜像名称
      • . : 表示要生成在哪个目录下
    • 最后可以使用 docker inspect 镜像id 来查看数据卷的详细信息

查看指定数据卷对应的目录

  • docker volume inspect 具名挂载时起的名字
  • 当挂载数据卷并且没有指定路径的时候,Linux 中一般都是挂载在 /var/lib/docker/volume 目录中

配置 MySQL

docker run -d -p 3306:3306 -v /home/mysql/my.conf:/etc/mysql/my.conf -v /home/mysql/data:/use/local/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

  • -e 可以用来配置 MySQL 密码, 可以同时挂载多个数据卷

数据卷容器

  • 可以在多个容器之间共享数据

  • 案例

    • 先开启一个 nginx01 的容器

    • 然后需要再开启一个 nginx02 的容器, 同时这两个容器之间需要数据共享, 那就在开启 nginx02 的时候就可以使用以下命令:

      docker run -it --name nginx02 --volumes-from nginx01 xiaosheng/centos

    • 同时还可以有其他的容器来和 nginx01 一起共享数据

    • 即便 nginx01 容器关掉或者销毁, 并不会影响到其他容器中共享的数据

    • 只要还有一个容器在使用, 那么数据就不会消失

Dockerfile

  • dockerfile 是用来构建 docker 镜像的文件

步骤 :

  1. 编写 dockerfile 文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像 (可以发布到 dockerhub 或者是 阿里云镜像仓库)

dockerfile 文件

  • 每一个保留关键字 (指令) 都必须是大写

  • 从上往下开始执行

  • # 表示注释

  • 每一个指令都会创建一个镜像层

  • 常用指令:

    FROM              # 基础镜像
    MAINTAINER        # 镜像作者, 一般是姓名<邮箱>
    RUN               # 构建镜像的时候需要运行的命令
    ADD           # 构建镜像的时候, 需要添加的内容, 比如要在 centos 镜像中添加一个 NGINX, 如果添加的是一个压缩包的话, 会自动解压
    WORKDIR       # 镜像的工作目录
    VOLUME            # 挂载的目录
    EXPOSE            # 端口配置
    CMD           # 容器启动的时候需要运行的命令, 只有最后一个会生效, 这个最后一个生效, 并不是指在 dockerfile 文件中, 在 dockerfile 文件中仍然可以有多个 CMD 命令, 指的是在使用 docker run 的时候, 后面不能加命令, 如果加了, 那么 docker run 后面的命令将会替换掉 dockerfile 文件中的命令
    ENTRYPOINT        # 容器启动的时候需要运行的命令, 可以追加命令
    ONBUILD       # 当构建一个被继承的 dockerfile 的时候, 会运行 ONBUILD 指令
    COPY          # 将文件拷贝到镜像中
    ENV           # 构建的时候设置环境变量
    
  • 案例 (尝试构建自己的 centos)

    • 编写 dockerfile 文件

      FROM centos  # 基础镜像是 centos
      MAINTAINER xiaosheng<1029739052@qq.com> # 作者信息
      
      ENV MYPATH /usr/local # 自定义一个变量 MYPATH, 值是 /usr/local
      WORKDIR $MYPATH # 指定工作目录, 即用户当进去 centos 后所在的目录
      
      RUN yum -y install vim # 安装 vim
      RUN yum -y install net-tools # 安装 net-tools
      
      EXPOSE 80 # 暴露端口
      CMD echo $MYPATH
      CMD echo "===end===="
      CMD /bin/bash
      
    • 开始构建

      docker build -f dockerfile文件的地址 -t 镜像名:[版本号]

    • 使用 docker history 镜像id 来查看镜像的构建历史

发布镜像

发布到 dockerhub

  • 注册一个 dockerhub 的账号
  • docker login -u 用户名, 然后输入密码
  • docker push 用户名(随便起的)/镜像名:版本号

发布到阿里云

  • 可以先将 docker 的镜像更换成自己的阿里云中提供的镜像地址

  • 登录阿里云, 进入容器镜像

  • 创建命名空间和镜像仓库, 创建仓库的时候选择本地仓库

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启...
    执笔梦一场阅读 3,205评论 2 10
  • 目录 [TOC] 1. 简介 Docker是GO语言实现的开源项目,基于Linux容器技术,主要目标是一次封装,到...
    水煮鱼又失败了阅读 265评论 0 2
  • 【版权声明】本博客转载自汤小洋 一、Docker简介 1. Docker是什么? ​ 产生背景: 开发和运维之...
    云未声阅读 450评论 0 7
  • Docker应用容器 1. 初识 Docker 我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境。 ...
    itlu阅读 308评论 0 5
  • Docker应用容器 1. 初识 Docker 我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境。 ...
    itlu阅读 339评论 0 1