Docker

docker介绍

容器
1.VMware 是一个重量级的虚拟化技术,Docker 则是轻量级
2.Docker 主要是伴随着微服务兴起的。

根据 wikipedia 中的介绍:

Docker 是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
Docker 利用 Linux 核心中的资源分脱机制,例如 cgroups ,以及 Linux 核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一 Linux 实体下运作,避免启动一个虚拟机造成的额外负担。Linux 核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户 ID 与挂载文件系统,而核心的 cgroup 提供资源隔离,包括 CPU 、存储器、block I/O 与网络。从 0.9 版本起,Dockers 在使用抽象虚拟是经由 libvirt 的 LXC 与 systemd - nspawn 提供界面的基础上,开始包括 libcontainer 库做为以自己的方式开始直接使用由 Linux 核心提供的虚拟化的设施。
依据行业分析公司“451研究”:“Dockers 是有能力打包应用程序及其虚拟容器,可以在任何 Linux 服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。” 。

这里的介绍有点绕口,让我来介绍下 docker 解决了哪些痛点:

  1. 简化环境管理
    传统的软件开发与发布环境复杂,配置繁琐,我的代码开发环境可以运行,一旦部署到服务器上就运行不了了。这个问题很常见,开发环境、测试环境、生产环境,每个环节都有可能出现这样那样的问题,如果能够在各个环境中实现一键部署,就会方便很多,例如一键安装 linux 、一键安装 mysql、一键安装 nginx 等,docker 彻底解决了这个问题。

  2. 虚拟化更加轻量级
    传统的虚拟机都是先虚拟出一个操作系统,然后在操作系统上完成各种各样的配置,这样并不能充分的利用物理机的性能,docker 则是一种操作系统级别的虚拟技术,它运行在操作系统之上的用户空间,所有的容器都共用一个系统内核甚至公共库,容器引擎提供了进程级别的隔离,让每个容器都像运行在单独的系统之上,但是又能够共享很多底层资源。因此 docker 更为轻量、快速和易于管理。

  3. 程序可移植
    有了前面介绍的两个特点,程序可移植就是顺理成章的事情了。

docker 核心组件

docker 中有三大核心组件:

  • 镜像

镜像是一个只读的静态模版,它保存了容器需要的环境和应用的执行代码,可以将镜像看成是容器的代码,当代码运行起来之后,就成了容器,镜像和容器的关系也类似于程序和进程的关系

  • 容器

容器是一个运行时环境,是镜像的一个运行状态,它是镜像执行的动态表现

  • DockerHub

类似于github,这是个镜像托管的地方,可以使用很多官方提供的镜像,
库是一个特定的用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像

docker相关技术

  1. 隔离性
  2. 可度量性
  3. 移植性
  4. 安全性

docker 安装

CentOS7安装步骤
Docker安装
遇到过的问题

查看系统版本: cat /etc/redhat-release

启动Docker: service docker start

查看Docker信息: docker info

设置开机启动: chkconfig docker on

容器分类:

1.交互型容器
2.后台型容器

容器操作:

1.搜索镜像docker search mysql
在这里插入图片描述

index	相当于仓库名
name	镜像名
desciption	镜像的描述
stars	镜像的星(赞)
official	是否官方镜像
automated	镜像是否是自动构建的

2.查看正在运行的容器docker ps
在这里插入图片描述

container id	容器的ID,这是64位的唯一字符串
image	创建这个容器所依据的镜像
command	容器的启动命令
created	容器的创建时间
status	容器的状态
ports	容器的端口
names	容器的名字,唯一的,可在创建容器时进行配置,不配置也可,会有默认名字
  1. 查看所有容器docker ps 可以添加一个参数 -a,表示查看所有的容器,包括正在运行和没有运行的。

  2. 终止容器docker stop xxx
    终止一个容器,可以重新启动,原本数据还在
    docker stop 后面的参数可以是容器名,也可以是容器 id。

  3. 启动终止的容器docker start xxx

  4. 删除容器docker rm xxx
    容器删除后,镜像还在。注意:删除后,容器上的数据会丢失
    正在运行的容器无法删除,但可以通过加-f参数强制删除,但建议还是先停止,再删除

  5. 查看所有容器的IDdocker ps -a -q ,可以实现容器的批量停止或批量删除

批量停止:docker stop $(docker ps -a -q)
批量删除:docker rm $(docker ps -a -q)
批量删除的另个命令:docker container prune

  1. 交互型容器的创建

docker run --name ubuntu -it ubuntu /bin/bash 启动一个Ubuntu容器。
这是个交互型容器,启动完成后会占据当前窗口。可通过exit命令退出容器,一退出,容器自动停止。
一般使用后台型容器,交互型使用的非常少

  1. 进入到容器内部docker exec -it xxx /bin/bash

后台型容器不一定满足需求,所以进入到后台型容器中,去修改配置以满足需求
例如: docker exec -it nginx /bin/bash 进入到nginx容器内部
不同于交互型,即使使用exit退出容器,容器依然在后台运行

  1. 资源拷贝docker cp ./xxx.html xxx:/xxx/xxxx

将宿主机的资源拷贝到容器中

  1. 共享目录docker run --name

  2. 查看容器信息docker inspect xxx
    详细信息包括容器的ID,容器名,环境变量,运行命令,主机丶网络丶数据卷配置等信息
    使用-f format参数可以只查看关心的数据,如:
    在这里插入图片描述

  3. 共享目录docker run --name xxx -p -d -v /usr/share/nginx/html/ nginx
    表示将容器的 /usr/share/nginx/html 目录和宿主机中的某一个目录共享。
    source 表示在宿主机中共享的目录,Destination 表示目标目录,即容器中共享的目录。

  4. 网络配置
    网络可以手动指定映射,也可以不指定。直接给个-p,表示使用宿主机中的随机端口映射到容器端口上

  5. 查看容器进程docker top xxx

  6. 查看容器日志docker logs

使用--tail 参数可以精确控制日志的输出行数,
-t参数则可以显示日志的输出时间,
-f会有其他日志持续输出
docker 的一大优势就是可移植性,容器因此 docker 容器可以随意的进行导入导出操作。

镜像操作

  1. 查看所有镜像docker images
    在这里插入图片描述
repository	镜像名称
tag			镜像版本号,latest表示最新
image id	镜像的ID,唯一标识符
created		镜像创建时间
size		镜像大小
  1. 拉取镜像docker pull
    如:默认情况下,当用户执行docker run –name nginx -d nginx命令时,docker 首先会去本地查看是否有相应的 nginx 镜像,
    如果有,则直接根据本地的nginx镜像创建出来容器,如果没有,则去 docker hub 上面查找并下载。
    如果觉得这样启动慢,可以先手动执行 docker pull,docker pull 可以拉取一个镜像下来。

  2. 删除镜像docker rmi xxx
    删除的镜像,必须是不存在关联的容器,如果有根据 该镜像创建的容器 存在,则镜像删除失败

  3. 创建镜像
    默认情况下,我们使用的镜像都是不同软件商官方提供的。
    如果需要自己制作镜像,整体上来说,有两种方式,
    一种是把容器重新定制成镜像;
    一种则是使用 Dockerfile 去构建镜像,第二种是目前主流方案。
    镜像的构建,必然是基于某一个根镜像

commint 创建本地镜像
在这里插入图片描述

-m	简单描述
--author	作者
ce1fe32739402	表示创建镜像所依据的容器ID
sang/nginx	仓库名,sang是名称空间,nginx是镜像名
v1	仓库的tag(标签)

创建完后通过docker images可查看刚刚创建的镜像

通过 commint 方式创建本地镜像的方式,存在一些问题,比如不够透明化,无法重复,体积较大,为了解决这些问题,可以考虑使用 Dockerfile ,实际上,主流方案也是 Dockerfile。

Dockerfile

Dockerfile 就是一个普通的文本文件,其内包含了一条条的指令,每一条指令都会构建一层。先来看一个简单的例子。

首先在一个空白目录下创建一个名为 Dockerfile 的文件,内容如下

在这里插入图片描述在 Dockerfile 的定义中,文件名是固定的,必须叫 Dockerfile,没有后缀。文件内的大写字母叫做指令。

FROM 	表示该镜像所基于的根镜像
MAINTAINER	镜像的作者信息
RUN		表示执行Linux命令,&& 可以连接多个Linux命令,镜像的内部结构像洋葱,每执行个命令,就会在镜像上裹一层
COPY	复制,将宿主机的文件复制到容器中

Dockerfile文件构建成功后,通过docker build -t namespace/name:tag来构建个新对象

项目部署

1.wordpress

wordpress 的部署主要运行两个容器,一个是 mysql 另一个则是 wordpress。
docker run --name mysql1 -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker run --name wordpress -p 80:80 -e WORDPRESS_DB_HOST=192.168.230.176:33061 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=123456 -d wordpress

2.jpress

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值