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 的镜像更换成自己的阿里云中提供的镜像地址

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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