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的容器使用命令

指令 说明
-i Interactive 交互式
-t Tty 分配一个伪终端
-d Detach 运行容器到后台
-e -env 设置环境变量
-p Publish list 发布容器端口到主机
-name String指定容器名称
-h Hostname 设置容器主机名
-ip String 指定容器ip,只能用于自定义网络
-network 连接容器到一个网络
-mount Mount将文件系统附加到容器
-v Volume 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 彦祖强的[email protected]

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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_57207884/article/details/130185411