Docker的学习与使用

本文是基于CentOS 7.3系统环境,进行Docker的学习和使用

  • CentOS 7.3
  • Docker-ce

一、Docker简介

(1) Docker的定义

  • 解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

(2) Docker的优势

  • 轻量、秒级的快速启动速度
  • 标准统一的打包/部署/运行方案
  • 镜像支持增量分发,易于部署
  • 易于构建】良好的REST API
  • 性能,尤其是内存和IO的开销

(3) Docker的三要素

a. 镜像

  • 镜像就是一个只读的模板
  • 镜像用来创建多个容器实例

b. 容器

  • 容器是利用镜像创建的运行实例
  • 可以把容器看作一个轻量、简易版的Linux环境和运行在其中的应用程序

c. 仓库

  • 仓库是集中存放镜像文件的场所
  • 仓库注册服务器存放着多个仓库

二、Docker安装

(1) 操作系统环境

  • CentOS 7.3

(2) 卸载旧版本的Docker

若之前没有安装过Docker,则跳过该步骤

  • 命令行终端执行下面命令

    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

(3) 修改yum源

  • 命令行终端执行下面命令

    yum -y install yum-utils device-mapper-persistent-data lvm2

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(4) 安装Docker-ce的依赖环境

  • 命令行终端执行下面命令

    yum-config-manager --enable docker-ce-edge
    yum-config-manager --enable docker-ce-test

(5) 安装Docker-ce

  • 命令行终端执行下面命令

    yum -y install docker-ce

(6) 启动Docker-ce

  • 命令行终端执行下面命令

    systemctl enable docker
    systemctl start docker

(7) 配置阿里云镜像加速器

  • 命令行终端执行下面命令

    vim /etc/docker/daemon.json

  • 键入以下内容

    {
    “registry-mirrors”: [“https://6i50hm7r.mirror.aliyuncs.com”]
    }

  • 命令行终端执行下面命令

    systemctl daemon-reload
    systemctl restart docker

  • 验证加速器是否配置成功

    docker info

(8) 测试hello-world

  • 验证客户端是否可用

    docker run hello-world

三、Docker的帮助类命令

(1) 查看docker版本信息

docker version

(2) 查看docker详细信息

docker info

(3) docker帮助命令

docker --help

(4) docker日志命令

  • Docker 引擎日志

    cat /var/log/upstart/docker.log

  • Docker 容器日志

    jounarlctl -u docker

四、Docker的镜像类命令

(1) docker images [options]

  • 查看本地的镜像

    docker images

  • 查看本地的镜像(含中间层)

    docker images -a

  • 只显示本地的镜像的唯一ID

    docker images -q

  • 显示本地的镜像的摘要信息

    docker images --digests

  • 显示完整的镜像信息

    docker images --no-trunc

(2) docker search [options]

  • 查找镜像

    docker search tomcat

  • 列出收藏数不小于指定值的镜像

    docker search -s 30 tomcat

  • 查找镜像时,显示完整信息

    docker search tomcat --no-trunc

  • 查找镜像时,只列出automated build类型的镜像

    docker search tomcat --automated

(3) docker pull [options]

  • 拉取镜像

    docker pull tomcat

  • 拉取指定版本的镜像

    docker pull tomcat:latest
    docker pull tomcat:7.0

(4) docker rmi [options]

  • 删除镜像

    docker rmi tomcat:latest

  • 删除多个镜像

    docker rmi -f 镜像1:TAG 镜像2:TAG

    强制删除多个镜像

  • 删除全部镜像

    docker rmi -f $(docker images -qa)

    强制删除多个镜像

三、Docker的容器命令

(1) 新建并启动容器

docker run [options] image [command][arg...]
--name "容器的新名字":为容器指定一个名词
-d:后台运行容器,返回容器ID,启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端
-P:随机端口映射
-p:指定端口映射
--privileged=true:如果写权限不够,加上这句话
docker run -it --name mycentos b5b4d78bc90c
# 启动centos容器,并命名为mycentos
docker run -it --name mycentos b5b4d78bc90c --privileged=true

(2) 列出所有正在运行的容器

docker ps [options]
无参数:列出当前正在运行的容器
-a:列出当前正在运行的容器和历史上运行过的容器
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:显示完整信息

(3) 退出容器

停止并退出容器
exit退出不停止容器
ctrl + P + Q

(4) 启动容器

docker start 容器ID或者容器名

(5) 重启容器

docker restart 容器ID或者容器名

(6) 停止容器

docker stop 容器ID或者容器名

(7) 强制停止容器

docker kill 容器ID或者容器名

(8) 删除容器

docker rm 容器ID或者容器名

(9) 删除多个容器

docker rm f $(docker ps -aq)
docker ps -aq | xargs docker rm

(10) 查看容器日志

docker logs [options] 容器ID
-t:加入时间戳
-f:跟随最新的日志打印
--tail:数字显示最后多少条

(11) 查看容器运行的进程

docker top 容器ID

(12) 查看容器内部的细节

docker inspect 容器ID

(13) 重新进入正在运行的容器

docker attach 容器ID或者容器名
docker exec -it 容器ID或者容器名 /bin/bash

(14) 拷贝文件到/root目录

docker cp mycentos1030:/tmp/temp.log /root

(15) 将修改后的容器发布成镜像

docker commit -m "tomcat without docs" -a "xuzheng" 8312674095ff inspur/tomcat01:1.0

四、Docker的数据卷

(1) 场景

容器在运行时,会产生一些数据,对于有些数据来说,是需要进行保存的,也就是我们要求对数据进行持久化存储。容器是在内存中运行的,一旦容器停止运行或者关闭,那么这些数据都将会消失

(2) docker保存数据的方式

  • 通过commit生成新的镜像
    docker容器产生的数据,可以通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来
  • 数据卷
    数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹

(3) 定义

数据卷就是在宿主中可以在容器之间进行共享和重用的一系列和文件和文件夹

(4) 作用

  1. 容器的持久化
  2. 容器间的继承+共享数据

(5) 特点

  1. 数据卷可在容器之间共享或重用数据
  2. 数据卷中的更改可以之间生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

(6) 添加数据卷的方式

  • 命令方式添加容器数据卷

    docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
    #对于容器来说,只读不可写
    docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

  • DockerFile方式添加容器数据卷

  1. 编写Dockerfile文件

    FROM centos
    VOLUME [“/dataVolume1”,“/dataVolume2”]
    CMD echo “finished…successful”
    CMD /bin/bash

  2. 构建新镜像

    docker build -f /data/Dockerfile -t xuzheng/centos .

(7) 继承父容器

子父之间的容器数据卷中的内容可以实现传递和共享(全都是双向的传递数据的)

docker run -it --name dc01 centos
#继承dc01
docker run -it --name dc02 --volumes-from dc01  centos

五、DockerFile

(1) DockerFile的定义

DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

(2) DockerFile构建步骤

  1. 编写DockerFile文件
  2. docker build
  3. docker run

(3) DockerFile构建步骤

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新的容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

(4) DockerFile关键字

  • FROM
    基础镜像,当前新镜像是基于哪个镜像的

    FROM centos

    基础镜像,当前镜像基于哪一个镜像

  • MAINTAINER
    镜像维护者的姓名和邮箱地址

    MAINTAINER xuzheng601797071@qq.com

    标记作者和邮箱

  • RUN
    容器构建时需要运行的命令

    RUN ls -l

    容器在构建时,需要执行的命令

  • EXPOSE
    当前容器运行时暴露的端口

    EXPOSE 8080

    暴露的端口号

  • WORKDIR
    在创建容器后,指定终端默认登录进来时的工作目录

    WORKDIR /usr/local

    登录容器内,默认的目录

  • ENV
    用来在构建镜像过程中设置环境变量

    ENV MYPATH /usr/local

    设置环境变量

  • ADD
    将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压tar压缩包

    ADD centos-7-docker.tar.gz

    加载tar压缩包进入镜像,并解压缩

  • COPY
    拷贝文件和目录到镜像中

    COPY centos-7-docker.txt

    拷贝文件或者目录进入镜像

  • VOLUME
    容器数据卷,用于数据保存和持久化工作

    VOLUME [“/dataVolume1”,“/dataVolume2”]

    设置数据卷

  • CMD
    指定一个容器启动时要运行的命令
    DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换

    CMD ls -l

    容器启动时要执行的命令,可以带多个cmd,但只有最后一个生效

  • ENTRYPOINT
    指定一个容器启动时要运行的命令,并可以追加在后面

    ENTRYPOINT ls -l

    容器启动时要执行的命令

  • ONBUILD
    当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发

    ONBUILD RUN echo “father image is inherited”

    父镜像被继承时,父镜像的ONBUILD被触发

六、DockerFile案例

(1) 带有vim和ifconfig的centos7

FROM centos:7
MAINTAINER xuzheng<601797071@qq.com>ENV MYPATH /tmp
WORKDIR $MYPATH
# 配置网络代理
ENV http_proxy "http://192.168.0.198:808"
ENV https_proxy "http://192.168.0.198:808"RUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "success------------------ok"
CMD /bin/bash
  • 构建镜像

    docker build -f /opt/containerd/mydocker/DockerFile -t xuzheng/centos7-vim-ifconfig:1.0 .

七、上传镜像至阿里云

# 登录
docker login --username=hitwh1106102 registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/inspur_xuzheng/tomcat01:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/inspur_xuzheng/tomcat01:[镜像版本号]

Docker的学习与使用相关推荐

  1. Docker容器学习梳理--日常操作总结

    使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands:attach Attach t ...

  2. Docker Compose学习之docker-compose.yml编写规则 及 实战案例

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  3. docker基础学习中遇到的一些问题

    docker基础学习中遇到的有关tomcat的一些问题 最近在学docekr,对docker的基础操作有了一些认识,并试着做了一些实操,但是在实操过程中遇到了一些问题.有些已经解决,有些还未解决.现在 ...

  4. Docker入门学习教程

    Docker入门学习 文章目录 Docker入门学习 1.简介 2 基本概念 2.1 镜像(Image) 2.2 容器(Container) 2.3 仓库(Repository) 3.Windows ...

  5. 《自己动手写Docker》学习笔记2

    <自己动手写Docker>学习笔记2 1 前言 由于本人毕业设计与云原生领域相关,因此最近在学习Docker相关知识,<自己动手写Docker>涵盖了Docker底层的各类知识 ...

  6. 《深入浅出Docker》学习笔记

    <深入浅出Docker>学习笔记 第三章:docker 安装 linux服务器安装:-略 windows服务器安装:-略 确认安装结果 docker --version 第四章:纵观DOc ...

  7. Docker容器学习笔记一

    Docker容器学习笔记一 狂神说B站视频:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 Docker容器学习笔记二:https://blog.csd ...

  8. 安装Docker及学习

    Docker安装及学习 1.环境介绍 OS:CentOS Linux release 8.5.2111 DNF是Dandified YUM的缩写,是一个面向基于RPM的Linux发行版的软件包管理器. ...

  9. Docker入门学习笔记

    文章目录 Docker入门学习 Docker为什么出现? 一.Docker的历史 二.Docker做什么 三.Docker 安装 Docker的基本组成 安装Docker 阿里云镜像加速 运行流程 底 ...

  10. Docker容器学习梳理--应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

最新文章

  1. python 音乐下载演示源代码
  2. 为什么要用相对论为GPS导航提供修正
  3. idea样式报错_来自强迫症患者的IDEA设置
  4. 前端开发攻城狮必须知道的开发环境和插件
  5. python-发送短信验证码-功能的实现
  6. excel pandas 空格_pandas 实现 Excel 常见操作 (1)
  7. [4/10]指定结进程名称的命令taskkill.exe
  8. winform对话框控件、打印控件
  9. 维基百科英文语料库下载地址
  10. SpringBoot官方文档学习
  11. WordPress实现前台登录or注册功能
  12. isbn书号查询php代码,eoLinker-API Shop ISBN书号查询 PHP调用示例代码
  13. 淘宝搜索上传图片获得上传sid
  14. (三)lvs负载均衡详解--lvs-DR+keepalived配置
  15. 电脑如何打开虚拟化设置?
  16. java 计算圆周率_java程序计算圆周率
  17. Win10 tensorflow 1.12 gpu + CUDA10 + Anaconda3-4.4 python3.6 安装过程
  18. 艺赛旗(RPA)python 的 tkinter 进度条的实现
  19. NLP自然语言处理-英文文本电影影评分类2-pytorch版本
  20. [转]Sqlite中文排序研究

热门文章

  1. cajviewer阅读器打不开怎么解决
  2. 电脑快捷键大全 Alt
  3. win10计算机拨号连接,拨号连接设置(Win10怎么设置宽带自动连接 win10开机自动连接宽带设置方法详解)...
  4. android 微信读书,微信读书(com.tencent.weread) - 5.4.3 - 应用 - 酷安
  5. 姚爱红计算机组成原理知识要点,计算机组成原理课程混合教学模式探究
  6. 用户坐标系和工具坐标系校准原理
  7. unity3d 坦克大战实战
  8. 结构为王——确定分析思路(数据分析方法论)
  9. STM32 DMA2D技术
  10. C C++实现网络验证和本地验证