博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【笔记】docker核心概念和使用 docker命令
阅读量:3904 次
发布时间:2019-05-23

本文共 3027 字,大约阅读时间需要 10 分钟。

介绍

在Linux服务器部署一个单体JavaWeb应用,一般会在服务器安装Tomcat、MySql、Redis、JDK等相关环境或软件,安装完软件之后需要进行相关配置,最后把项目打成War包,放在服务器进行部署。这样有几个缺点,那就是面对黑糊糊的命令行,如果想部署成功需要一定的Linux知识储备,再者就是如果我们想在另一台服务器上部署,也需要重复刚刚的下载软件、配置环境、部署,极为繁琐。而Docker作为一门容器技术,很好的解决这一问题。

我们只需要在一台Linux机器上完成软件的安装和配置,然后把他们做成镜像,MySQL做成MySQL-Docker镜像,Tomcat做成Tomcat-Docker镜像。当我们在另一台Linux服务器
安装的时候只需要安装Docker这个软件,然后把镜像拿过来运行即可,这个镜像就成了一个容器。容器启动是非常快速的。类似windows里面的ghost操作系统,安装好后什么都有了,这样就降低了对linux操作的难度。

原理

和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,􀀀所有容器共享操作系统,在进程级
进行隔离
根据操作系统的不同,可以通过shell或者远程桌面进行

不同与传统容器,docker早起基于LXC,􀀀后来基于自研的libContainer,docker对于传统容器做了许多优化,如下:

  1. 跨平台的可移植性
  2. 面向应用
  3. 版本控制
  4. 组件复用
  5. 共享性
  6. 工具生态系统

Docker采用了C/S架构,分为Docker客户端(Docker可执行程序)与Docker守护进程,Docker客户端通过命令行和API的形式与Docker守护进程进行通信,Docker守护进程则提供Docker服务。因此,我们操作的各种docker命令实际上都是由docker􀀀客户端发送到docker守护进程上去执行。我们在构建

一个镜像时,不可避免的需要将一些本地文件拷贝到镜像中,用户在构建镜像时,需要指定构建镜像的上下文路径(即前文的.),docker build在获得这个路径之后,会将路径下的所有内容打包,然后上传给Docker引擎

docker应用场景

  1. 加速本地开发
  2. 自动打包和部署应用
  3. 创建轻量、私有的PaaS环境
  4. 自动化测试和持续集成/部署
  5. 部署并扩展Web应用、数据库和后端服务器

Docker的核心概念

docker镜像(Images):Docker 镜像是用于创建Docker 容器的 模板。

docker容器(Container):容器是独立运行的一个或一组应用。
docker客户端(Client):客户端通过命令行或者其他工具使用 Docker API 与Docker
的守护进程通信
docker主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
docker仓库(Registry):Docker 仓库用来保存镜像,可以理解 为代码控制中的代码仓
库,Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用

docker容器查看命令

docker中的容器就是一个轻量级的虚拟机,是镜像运行起来的一个状态

如果需要查看所有容器,则可以通过docker ps -a命令查看
使用docker ps -l可以查看最近创建的容器
可以使用docker ps -n=XXX来查看最新创建的n个容器
如果开发者需要既创建又启动容器,则可以使用docker run命令。docker run􀀀命令又可以启动两种不同模式的容器:􀀀后台型容器和交互型容器,顾名思义,后台型容器就是一个在后台运行的容器,默默的在后台执行计算就行了,不需要和开发者进行交互,而交互型容器则􀀀需要接收开发者的输入进行处理给出反馈。对于开发者而言,大部分情况下创建的都是后台型容器,不过在很多时候,即使是后台型容器也不可避免的需要进行交互,下面分别来看。

docker run --name nginx1 -d -p 8080:80 nginx

–name含义和上文一样,表示创建的容器的名字,-d表示容器在后台运行,-p表示将容器的80端口映射到宿主

机的8080端口,􀀀创建过程如下图:
在这里插入图片描述
首先依然会去本地检查,本地􀀀没有相应的容器,则会去Docker Hub上查找,􀀀查找到了下载并运行,并且生
成了一个容器id。运行成功后,在浏览器中输http://localhost:8080就能看到Nginx的默认页面了

docker run --name ubuntu -it ubuntu /bin/bash

-it􀀀参数,i表示开发容器的标准输入(STDIN),t则表示告诉􀀀docker,为容器创建一个􀀀命令行终端。执行结果如下

在这里插入图片描述
docker stop命令可以终止一个容器,如下:

在这里插入图片描述

可以通过docker rm命令删除一个容器。删除容器时,只能删除已经停止运行的容器,不能删除正在运行的容器

容器也可以批量删除,命令如下:

docker rm $(docker ps -a -q)
docker ps -a -q会列出所有容器的id,供rm命令删除。
如下命令也支持删除已退出的孤立的容器:
docker container prune

docker attach

依附容器这个主要是针对交互型容器而言的,该命令有一定的局限性,可以作为了解。
通过docker inspect命令查看容器的详细信息,这些详细信息􀀀包括容器的􀀀id、容器名、环境变量、运行命令、主机配置、网络配置以及数据卷配置等信息
使用docker top命令可以查看容器中正在运行的进程,首先确保容器已经启动,然后执行docker top命令
在这里插入图片描述
如果要查看日志,则可以使用docker提供的docker logs
使用export命令可以导出容器,具体操作如下:

  1. 创建一个容器,进行基本的配置操作
    本案例中我首先创建一个nginx容器,然后启动,启动成功后,将本地一个index.html文件上传到容器中,修改nginx首页的显示内容。具体操作步骤如下
    容器导入成功后,就可以使用docker run命令运行了。
    可以通过docker images命令查看本地所有镜像
    镜像可以􀀀通过docker rmi命令进行删除,参数为镜像的id或者镜像名,参数可以有多个,多个参数之间用空
    格隔开。如下:
    在这里插入图片描述

镜像

镜像的体系结构

镜像的体系结构

镜像的最底层是一个启动文件系统(bootfs)镜像,bootfs的上层镜像叫做根镜像,一般来说,根镜像是一个操作系统,例如Ubuntu、CentOS等,用户的镜像必须构建于根镜像之上,在根镜像之上,用户可以构建出各种各样的其他镜像。
从上面的介绍读者可以看出,镜像的本质其实就是一系列文件的集合,一层套一层的结构有点类似于Git。

通过docker run命令指定一个容器创建镜像时,实际上是在该镜像之上创建一个空的可读写的文件系统层级,

可以将这个文件系统层级当成一个临时的镜像来对待,而命令中所指的模版镜像则可以称之为父镜像。父镜像的内容都是以只读的方式挂载进来的,容器会读取共享父镜像的内容,用户所做的所有修改都是在文件系统中,不会对父镜像造成任何影响。当然用户可以通过其他一些手段使修改持久化到父镜像中。

转载地址:http://ztten.baihongyu.com/

你可能感兴趣的文章
多队列网卡简介以及Linux通过网卡发送数据包源码解读
查看>>
多队列网卡简介
查看>>
多队列网卡简介
查看>>
linux内核对网卡驱动多队列的支持
查看>>
Effective Gigabit Ethernet Adapters-Intel千兆网卡8257X性能调优
查看>>
Introduction to Receive Side Scaling
查看>>
TCP/IP学习(30)——L2数据链路层的数据包处理详细流程
查看>>
TCP/IP学习(31)——TCP接收数据包如何选择socket
查看>>
TCP/IP源码学习(47)——socket与VFS的关联
查看>>
TCP/IP学习(37)——L2如何设置包的协议类型
查看>>
TCP/IP学习(32)——软中断的处理详细分析
查看>>
TCP/IP学习(29)——kernel如何选择socket接收数据
查看>>
TCP/IP学习(28)——数据包完整接收流程
查看>>
TCP/IP学习(27)——协议初始化与简要的接收/发送流程
查看>>
Linux网络协议栈之数据包处理过程
查看>>
Receive packet steering patch详解
查看>>
linux协议栈中网卡相关的名词解释
查看>>
linux内核中的每cpu变量
查看>>
linux:每CPU变量
查看>>
linux:激活第一个CPU
查看>>