Docker的基本使用.docx
Docker的基本使用 1. 初始docker 1.1 docker概念 我们写的代码会接触到好几个环境 开发环境、测试环境和消费环境 Docker 是一个开源的应用容器引擎 诞生于 2021 年度初 基于 Go 语言实现 dotCloud 公司出品 后改名为Docker Inc Docker 可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中 然后发布到任何流行的 Linux 机器上 容器是完全使用沙箱机制 互相隔离 容器性能开销极低 Docker 从 17.03 版本之后分为 CE Community Edition: 社区版 以及 EE Enterprise Edition: 企业版 1.2 安装docker Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上 本课程基于CentOS 7 安装 Docker。官网 s:/ docker # 1、yum 包更新到最新 yum update# 2、安装需要的软件包 yum-util 提供yum-config-manager功能 另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2# 3、 设置yum源yum-config-manager -add-repo s:/download.docker /linux/centos/docker-ce.repo# 4、 安装docker 出现输入的界面都按 y yum install -y docker-ce# 5、 查看docker版本 验证是否验证成功docker -v 1.3 docker架构 *镜像 Image *Docker 镜像 Image 就相当于是 一个 root 文件系统。比方官方镜像 ubuntu:16.04 就包 含了完好的一套 Ubuntu16.04 最小系统的 root 文件系 统。容器 Container 镜像 Image 以及容器 Contain er 的关系 就像是面向对象程序设计中的类以及对象一 样 镜像是静态的定义 容器是镜像运行时的实体。容 器可以被创立、启动、停顿、删除、暂停等。仓库 Repository 仓库可看成一个代码控制中心 用来保存镜像。 1.4 配置 Docker 镜像加速器 默认情况下 将来从docker hub s:/hub.docker / 上下载 docker镜像 太慢。一般都会配置镜像加速器 USTC 中科大镜像加速器 s:/ 阿里云 网易云 腾讯云 本次我们使用阿里云镜像 1.登录阿里云网站 s:/ aliyun / 查看文件/etc/docker/daemon.json # 执行如下命令 cat /etc/docker/daemon.json 2 .docker命令 2.1 进程相关命令 关于进程相关的命令 2.1.1 启动docker效劳 这里注意防火墙状态,假如无法映射对应的端口报错,删除网卡重新启动docker systemctl start docker 2.1.2 停顿docker效劳 systemctl stop docker 2.1.3 重启docker效劳 systemctl restart docker 2.1.4 查看docker效劳状态 systemctl status docker 2.1.5 开机启动docker效劳 systemctl enable docker 2.2 Docker 镜像相关命令 2.2.1 查看镜像 查看本地所有的镜像 docker imagesdocker images q # 查看所用镜像的id REPOSITORY 镜像名称 TAG 镜像标签 IMAGE ID 镜像ID CREATED 镜像的创立日期 SIZE 镜像大小 2.2.2 搜索镜像 从网络中查找需要的镜像 docker search 镜像名称 NAME 镜像名称 DESCRIPTION 镜像描绘 STARS 用户评价 反响一个镜像的受欢送程度 OFFICIAL 是否官方 AUTOMATED 自动构建 表示该镜像由Docker Hub自动构建流程创立的 2.2.3 拉取镜像 从Docker仓库下载镜像到本地 镜像名称格式为 名称:版本号 假如版本号不指定那么是最新的版本。 假如不知道镜像版本 可以去docker hub 搜索对应镜像查看。 docker pull 镜像名称 2.2.4 删除镜像 删除本地镜像 docker rmi 镜像id # 删除指定本地镜像docker rmi docker images -q # 删除所有本地镜像 关于docker更多命令 大众可以菜鸟教程查看, 网址 s:/ runoob /docker/docker-command-manual.html 2.3 容器相关的命令 2.3.1 查看容器 docker ps # 查看正在运行的容器docker ps a # 查看所有容器 包括正在运行以及停顿的容器 2.3.2 创立并启动容器 docker run -di -name xx images名称 参数docker create xx/假如要运行 使用docker start 命令 参数讲明 -i 保持容器运行。通常与 -t 同时使用。参加it这两个参数后 容器创立后自动进入容器中 退出容器后 容器自动关闭。 -t 为容器重新分配一个伪输入终端 通常与 -i 同时使用。 -d 以守护 后台 形式运行容器。创立一个容器在后台运行 需要使用docker exec 进入容器。退出后 容器不会关闭。 -it 创立的容器一般称为交互式容器 -id 创立的容器一般称为守护式容器 -name 为创立的容器命名。 1 交互式容器 以交互式方式创立并启动容器 启动完成后 直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式 启动容器 假如退出容器 那么容器会进入停顿状态。 # 先拉取一个镜像 这一步不是每次启动容器都要做的 而是因为前面我们删除了镜像 无镜像可用所以才再拉取一个 docker pull centos:7 #创立并启动名称为 mycentos7 的交互式容器 下面指令中的镜像名称 centos:7 可以以使用镜像id docker run -it -name mycentos7 centos:7 /bin/bash 2 守护式容器 创立一个守护式容器 假如对于一个需要长期运行的容器来讲 我们可以创立一个守护式容器。命令如下 容器名称 不能重复 #创立并启动守护式容器docker run -di -name mycentos2 centos:7#登录进入容器命令为 docker exec -it container_name (或 container_id) /bin/bash exit退出 时 容器不会停顿 docker exec -it mycentos2 /bin/bash 2.3.3 进入容器 docker exec 参数 # 退出容器 容器不会关闭docker exec -it 容器名称 /bin/bash 2.3.4 停顿容器 docker stop 容器名称或容器id 2.3.5 启动容器 docker start 容器名称或容器id 2.3.6 删除容器 #删除指定容器docker rm 容器名称或容器id# 删除所有容器 docker rm docker ps -a -q 2.3.7 查看容器信息 docker inspect 容器名称或容器id 讲明 容器之间在一个局域网内 linux宿主机器可以与容器进展通信 但是外部的物理机笔记本是不能与容器直接通信的 假如需要那么需要通过宿主机器端口的代理。 2.4Docker的开机自启以及容器自启 2.4.1 docker 效劳的自启 # 开启 docker 自启动systemctl enable docker.service# 关闭 docker 自启动systemctl disable docker.service12345 2.4.2 容器的开机自启以及关闭开机自启 # 开启容器自启动docker update -restart always 【容器名】# 关闭容器自启动docker update -restart no【容器名】 注意 假如容器是运行状态那么删除失败 需要停顿容器才能删除 3 . docker容器的数据卷 3.1 数据卷概念 考虑 Docker 容器删除后 在容器中产生的数据也会随之销毁 Docker 容器以及外部机器可以直接交换文件吗 容器之间想要进展数据交互 数据卷 数据卷是宿主机中的一个目录或者文件当容器目录以及数据卷目录绑定后 对方的修改会立即同步一个数据卷可以被多个容器同时挂载一个容器可以以被挂载多个数据卷 数据卷的作用 容器数据持久化 外部机器以及容器间接通信 容器之间数据交换 3.2 配置数据卷 创立启动容器时 使用 v 参数 设置数据卷 docker run . v 宿主机目录(文件):容器内目录(文件) . 考前须知 目录必须是绝对途径 假如目录不存在 会自动创立 一个容器可以挂载多个数据卷 一个数据卷可以以被多个容器挂载 两个容器可以挂载同一个容器 在宿主机中实现与容器目录的挂载 在c1容器中的root目录下就可以看到data_container文件夹 如下列图 同时我们我们回到宿主机中 可以在data文件夹下创立一个文件oldlu.txt ,可以发如今容器中也会生成oldlu.txt文件 如下列图 数据卷的持久化 当我们把c1容器删除后 宿主机中的数据卷仍然存在。 所以当我们重新创立一个容器的同时仍然可以挂载宿主机中的data文件夹 对应data里的数据仍然同步到容器中。 一个容器可以挂载多个数据卷 多个容器可以挂载同一个数据卷 分别创立两个容器 两个容器都挂载宿主机中data目录 当 修改c3容器的data目录c4会实现同步。 进而实现两个容器之间的交互。 3.3 配置数据卷容器 多容器进展数据交换 多个容器挂载同一个数据卷 数据卷容器 步骤 1.创立启动c3数据卷容器 使用 v 参数 设置数据卷 docker run it -name c3 v /volume centos:7 /bin/bash 创立启动 c1 c2 容器 使用 -volumes-from 参数 设置数据卷 docker run it -name c1 -volumes-from c3 centos:7 /bin/bashdocker run it -name c2 -volumes-from c3 centos:7 /bin/bash 3.4 数据卷小结 数据卷概念 宿主机的一个目录或者文件 数据卷作用 容器数据持久化 客户端以及容器数据交换 容器间数据交换 数据卷容器 创立一个容器 挂载一个目录 让其他容器继承自该容器( -volume-from )。 通过简单方式实现数据卷配置 4. 应用部署 参考资料中docker应用部署 5. Dockerfile 前面的课程中已经知道了 要获得镜像 可以从Docker仓库中进展下载。那假如我们想自己开发一个镜像 那该如 何做呢 答案是 Dockerfifile Dockerfifile其实就是一个文本文件 由一系列命令以及参数构成 Docker可以读取Dockerfifile文件并根据Dockerfifile文 件的描绘来构建镜像。 5.1 Docker 镜像原理(解析) 考虑 Docker 镜像本质是什么 是一个分层文件系统 Docker 中一个centos镜像为什么只有200MB 而一个centos操作系统的iso文件要几个个G ? Centos的iso镜像文件包含bootfs以及rootfs 而docker的centos镜像复用操作系统的bootfs 只有rootfs以及其他镜像层 Docker 中一个tomcat镜像为什么有500MB 而一个tomcat安装包只有70多MB ? 由于docker中镜像是分层的 tomcat固然只有70多MB 但他需要依赖于父镜像以及根底镜像 所有整个对外暴露的 tomcat镜像大小500多MB Linux操作系统 文件系统 Linux 内核态 cpu 用户态(内存 硬盘) 5.2 镜像制作 5.2.1 容器转为镜像 使用docker commit命令可以将容器保存为镜像。 命令形式 docker commit 容器名称 镜像名称 eg:docker commit 381827f60f70 itheima_tomcat:1.0 使用docker save命令可以将已有镜像保存为tar 文件。 命令形式 docker save o tar文件名 镜像名 docker save -o itheima_tomcat:1.0.tar 使用docker load命令可以根据tar文件恢复为docker镜像。 命令形式 docker load -i tar文件名 # 加载恢复镜像docker load -i itheima_tomcat.tar # 在镜像恢复之后 基于该镜像再次创立启动容器 docker run -di -name new_tomcat -p 8080:8080 itheima_tomcat:1.0 注意 新的镜像制作后 本来容器中挂载的目录将失效 索引一般在恢复镜像创立容器容器的时候需要重新挂载。 5.3 Dockerfile 概念 Dockerfile 是一个文本文件包含了一条条的指令每一条指令构建一层 基于根底镜像 最终构建出一个新的镜像对于开发人员 可以为开发团队提供一个完全一致的开发环境对于测试人员 可以直接拿开发时所构建的镜像或通过Dockerfile文件 构建一个新的镜像开场工作了对于运维人员 在部署时 可以实现应用的无缝移植 Dochub网址 s:/hub.docker 关键字 关键字作用备注FROM指定父镜像指定dockerfile基于哪个image构建MAINTAINER信息用来标明这个dockerfile谁写的LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image根本信息中可以查看RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或 RUN “command , “param1,“param2CMD容器启动命令提供启动容器时候的默认命令 以及ENTRYPOINT配合使用.格式 CMD command param1 param2 或 CMD “command , “param1,“param2ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用COPY复制文件build的时候复制文件到image中ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程效劳ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name valueARG构建参数构建参数 只在构建的时候使用的参数 假如有ENV 那么ENV的一样名字的值始终覆盖arg的参数VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME “目录EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或 EXPOSE 8080/udpWORKDIR工作目录指定容器内部的工作目录 假如没有创立那么自动创立 假如指定/ 使用的是绝对地址 假如不是/开始那么是在上一条workdir的途径的相对途径USER指定执行用户指定build或启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户HEALTHCHECK安康检查指定监测当前容器的安康监测的命令 根本上没用 因为很多时候 应用本身有安康监测机制ONBUILD触发器当存在ONBUILD关键字的镜像作为根底镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用途也不怎么大STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell5.4 Dockerfile 案例 需求1 自定义centos7镜像。要求 默认登录途径为 /usr可以使用vim 实现步骤 定义父镜像 FROM centos:7 定义信息 MAINTAINER itheima 执行安装vim命令 RUN yum install -y vim 定义默认的工作目录 WORKDIR /usr 定义容器启动执行的命令 CMD /bin/bash 通过dockerfile构建镜像 docker bulid f dockerfile文件途径 t 镜像名称:版本 Dockerfile文件 文件编写完成执行命令构建 docker build -f ./centos_dockerfile -t itheima_centos:1 . 需求2 定义dockerfile 发布springboot工程 实现步骤 定义父镜像 FROM java:8 定义信息 MAINTAINER itheima 将jar包添加到容器 ADD springboot.jar app.jar 定义容器启动执行的命令 CMD java jar app.jar 通过dockerfile构建镜像 docker bulid f dockerfile文件途径 t 镜像名称:版本 文件编写完成执行命令构建 docker build -f ./springboot_dockerfile -t app . 6. 效劳编排 6.1 效劳编排概念 微效劳架构的应用系统中一般包含假设干个微效劳 每个微效劳一般都会部署多个实例 假如每个微效劳都要手动启停 维护的工作量会很大。 要从Dockerfile build image 或去dockerhub拉取image要创立多个container要管理这些container 启动停顿删除 效劳编排 按照一定的业务规那么批量管理容器 6.2 Docker Compose 概述 6.2.1 Docker Compose Docker Compose是一个编排多容器分布式部署的工具 提供命令集管理容器化应用的完好开发周期 包括效劳构建 启动以及停顿。使用步骤 利用 Dockerfile 定义运行环境镜像 使用 docker-compose.yml 定义组成应用的各效劳 运行 docker-compose up 启动应用 6.2.2 Docker Compose 安装使用 参考?docker-compose? 7. Docker 私有仓库 Docker官方的Docker hub s:/hub.docker 是一个用于管理公共镜像的仓库 我们可以从上面拉取镜像 到本地 可以以把我们自己的镜像推送上去。但是 有时候我们的效劳器无法访问互联网 或你不祈望将自己的镜 像放到公网当中 那么我们就需要搭建自己的私有仓库来存储以及管理自己的镜像。 搭建参考?docker 私有仓库.md? 8. Docker相关概念 docker容器虚拟化 与 传统虚拟机比拟 dubbo以及rockeMQ有什么区别,分不清楚 准备用现成的 知道做了什么,命令记不住, -e之类的缩写记不住意思.独立完成困难