docker的介绍及使用

                                  **Docker**

一、docker简介
1、docker是什么
使用最广泛的开源容器引擎 一种操作系统级的虚拟化技术 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制) 一个简单的应用程序打包工具

2、docker的设计目标

(1)、快速的交付和部署:使用docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发 完成之后,测试和运维人员可以直接使用相同环境来部署代码。docker可以快速创建and删除容 器,实现快速迭代,大量节约开发,测试,部署的时间,并且,各个步骤都有明确的配置和操 作,整个过程可见,使团队更容易理解应用的创建和工作过程。
(2)、高效的利用资源:docker容器的运行不需要额外的虚拟化管理程序支持,只需要内核级别的虚拟 化,可以实现更高的性能,同时对资源的额外需求很低。 轻松的迁移和扩展:几乎可以在任何平台之上运行,包括物理机,虚拟机,公有云,私有云,个 人电脑等。这种兼容性可让用户在不同平台之间轻松地迁移应用。
(3)、简单的更新管理:使用Dockerfile,只需要修改配置,就可以替代以外大量的更新工作。并且所 有的修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。

3、docker的组成

Docker Client(客户端)Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build等都是 Docker的相关命令
docker Daemon(守护进程)Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
Docker Images(镜像)Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
Docker Container(容器)容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
Docker Registry(镜像仓库)Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助 Docker Registry来避免镜像的手动复制。一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker镜像。

在这里插入图片描述

4、docker容器和传统虚拟化的比较

在这里插入图片描述

在这里插入图片描述

5、docker的应用场景
(1)、应用程序打包和发布
(2)、应用程序隔离
(3)、持续集成
(4)、部署微服务
(5)、快速搭建测试环境
(6)、提供PaaS产品(平台即服务)

6、docker的三大核心概念
(1)、镜像(镜像里装容器)
(2)、容器(各种服务)
(3)、仓库(装镜像)

二、docker安装(yum)

1、linux安装依赖软件
yum install -y yum-utils device-mapper-persistent-data lvm2
在这里插入图片描述

2、更新docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
在这里插入图片描述

3、安装docker
yum install -y docker-ce docker-ce-cli containerd.id
在这里插入图片描述

4、将docker启动并设置开启自启
systemctl start docker #启动docker
systemctl enable docker #将docker设置为开机自启
在这里插入图片描述

5、添加docker国内镜像
docker官方镜像仓库网速较差,我们需要设置国内镜像服务:
参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://akchsmlh.mirror.aliyuncs.com”]
}
EOF

##重新加载文件
sudo systemctl daemon-reload
##重启docker
sudo systemctl restart docker

三、镜像

1、镜像:总体来说,镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件系统, 将每一层的改变以读写层的形式增加到原来的只读文件上,这有点像洋葱,通过基础镜像可创建 出不同的容器

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

3、镜像的写复制机制
通过 docker run 命令指定一个容器创建镜像时,实际上是在该镜像之上创建一个空的可读写 的文件系统层级,可以将这个文件系统层级当成一个临时的镜像来对待,而命令中所指的模版镜 像则可以称之为父镜像。父镜像的内容都是以只读的方式挂载进来的,容器会读取共享父镜像的 内容,用户所做的所有修改都是在文件系统中,不会对父镜像造成任何影响。 简而言之,镜像就是一个固定的不会变化的模版文件,容器是根据这个模版创建出来的,容器会 在模版的基础上做一些修改,这些修改本身并不会影响到模版,我们还可以根据模版(镜像)创 建出来更多的容器

在这里插入图片描述

三、docker的网络模式
(1)、bridge模式 - net=bridge (默认)通过 -p 指定端口映射。
(2)、host模式 --net=host 容器和宿主机共享 Network namespace。
(3)、none模式 --net=none 容器有独立的Network namespace
在这里插入图片描述

四、docker的使用命令

1、docker的镜像管理命令
(1)、docker 指令 参数

指令说明
Build列出镜像
Images查看镜像
Search搜索镜像
pull下载镜像
rmi或者rm删除镜像
tag给镜像打标签
load导入一个镜像包
save导出一个镜像包

(2)、docker常用命令

搜索镜像 docker search [image_name]

#下载镜像 docker pull [image_name]
#查看镜像 docker images
#查看镜像的详细信息 docker inspect [image_id/image_name]
#删除镜像 docker rmi [image_name]
#给镜像打标签 docker tag [docker_id] [image_name]
#导出一个镜像 docker save [image.tar.gz] [image_name]

2、docker的容器使用命令

指令说明
-iInteractive 交互式
-tTty 分配一个伪终端
-dDetach 运行容器到后台
-e-env 设置环境变量
-pPublish list 发布容器端口到主机
-nameString指定容器名称
-hHostname 设置容器主机名
-ipString 指定容器ip,只能用于自定义网络
-network连接容器到一个网络
-mountMount将文件系统附加到容器
-vVolume list 绑定挂载一个卷
-restart容器退出时重启策略

(1)、docker run 指令
指令 说明

(2)、常用命令使用
#下载一个nginx镜像 docker pull nginx
#运行一个容器(前台) docker run -p 80:80 nginx
#运行一个容器(后台) docker -d -p 80:80 nginx
#删除容器(需要先停止才能删除) docker stop nginx &&docker rm nginx
#给容器指定端口以及容器名称 docker run -d -p 82:80 –name “nginx123” nginx
#运行后进入容器 docker run -it –name “nginx123” nginx /bin/bash
#列出所有容器:docker ps -a
#把容器导出一个镜像 Docker export [container_name] -o [container_name.tar]
#导出一个镜像 docker import [container_name.tar] [image_name:version]
#清理已停止的容器:docker container prune -f

五、docker的存储
(1)、data volume 数据卷
(2)、data volome dontainers 数据卷容器(通用的)
docekr提供三种方式将数据从宿主机挂载到容器中
volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)保存数据的最佳方式
bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。

volume的命令
1、docker volume create 名字 #创建volume
2、docker volume ls #查看volume
3、创建一个volume并挂载到nginx容器中
docker run -d -it -name “nginx-01” --mount src=nginx-vol,dst=/usr/share/nginx/html/ -p 80:80 nginx
4、volume的特点
1)、多个运行容器之间共享数据,多个容器可以同时挂载相同的卷
2)、当容器停止或者移除时,改卷依然存在
3)、当明确删除卷时,卷才会被删除
4)、将容器的数据存储在远程主机或者其他存储上(间接)
5)、将数据从一台docker主机迁移到另外一台时,先停止容器,然后再备份卷的目录,路径为(/var/lib/docker/volumes/)

bind mounts命令
1、先创建好需要共享给容器,宿主机的目录 例如:mkdir -p /opt/mounts/
2、运行容器
docker -run -d -it -name “nginx-bind” -p 80:80 --mount type=bind,src=/opt/mounts,dst=/usr/share/nginx/html nginx
3、bind mounts特点
1)、从主机共享配置文件到容器,默认情况挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
2)、在docker主机上的开发环境和容器之间共享代码,容器可以直接共享代码目录。
3)、当docker主机的文件或者目录结构保证与容器所需的绑定挂载一致事。

六、dockerfile编写
1、dockerfile简介:Dockerfile 是一个用来构建镜像的文本文件.使用 Docker 中的docker image build命令会读取 Dockerfile,并将应用程序容器化。

2、dockerfile的基本语法

指令说明
FROM基础镜像,一切从这里开始构建
MAINTAINER镜像是谁写的,姓名+邮箱
RUN镜像构建的时候需要运行的命令
ADD步骤,tomcat镜像,这个tomcat的解压压缩包!
WORKDIR镜像的工作目录
VOLUME挂载的目录
EXPOSE暴露端口配置
CMD指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令
COPY类似ADD,将我们文件拷贝到镜像中
ENV构建的时候设置环境遍量

在这里插入图片描述

七、使用docker运行一个tomcat镜像

docker search tomcat #搜索tomcat镜像
在这里插入图片描述

docker pull tomcat #下载tomcat
在这里插入图片描述
在这里插入图片描述
运行tomcat
docker run -it -d -p 8080:8080 tomcat

八、使用dockerfile写一个tomcat镜像

1、准备一个tomcat和jdk压缩包
在这里插入图片描述

2、编写dockerfile
Vim dockerfile

FROM centos:7
MAINTAINER 彦祖强的1048375712@qq.com

ADD jdk1.8.0_191.tar.gz /usr/local/
ADD apache-tomcat-9.0.19.tar.gz /usr/local/

RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_191
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.19
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.19
ENV PATH $PATH:$JAVA_HOME/bin:$CLASSPATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.19/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.19/logs/catalina.out
在这里插入图片描述

3、构建镜像
docker build -t tomcat9 .
在这里插入图片描述

Docker images
在这里插入图片描述

4、运行镜像
docker run -d -p 9090:8080 tomcat9
在这里插入图片描述

访问本机http://ip:9090

在这里插入图片描述
在这里插入图片描述

5、将镜像打包
Docker save tomcat > /root/docker/tomcat9.tar.gz
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值