1.Docker概念
? Docker 是一个开源的应用容器引擎 ? 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
? Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
? 容器是完全使用沙箱机制,相互隔离 ? 容器性能开销极低。
? Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
2.安装Docker
2.1Docker可以运行在MAC,Windows,CentOS,UBUNTU等操作系统上。官网地址:http://www.docker.com/
2.2安装示例,CentOS7操作系统安装:
(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?https://download.docker.com/linux/centos/docker-ce.repo
(4)、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
(5)、 查看docker版本,验证是否验证成功
docker -v
3.Docker架构
4.配置Docker镜像加速器
4.1配置示例:阿里云配置示例
(1)进到阿里云控制台,搜索镜像加速器。
(2)进入到当前页面,选择打勾处的脚本,粘贴到CentOS7操作系统里面,进行执行就可以了。
Docker进程相关命令
(1)启动docker服务:systemctl start docker
(2)停止docker服务:systemctl stop docker
(3)重启docker服务:systemctl restart docker
(4)查看docker服务状态:systemctl status docker
(5)设置开机启动docker服务:systemctl enable docker
Docker镜像相关命令
(1)查看镜像:查看本地所有的镜像
docker images; docker images -q; 查看所有镜像的id
(2)搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
(3)拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。 如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
(4)删除镜像:删除本地镜像
docker rmi 镜像id;删除指定本地镜像 docker rmi ‘docker images -q’; 删除所有本地镜像
Docker容器相关命令
(1)查看容器:docker ps; 查看正在运行的容器 docker ps –a; 查看所有容器
(2)创建并启动容器:docker run 参数
参数说明:
* -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中 ,退出容器后,容器自动关闭。
* -t:为容器重新分配一个伪输入终端,通常与-i同时使用。
* -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入 容器。退出后,容器不会关闭。
* -it:创建的容器一般称为交互式容器,-id创建的容器一般称为守护式容器。
* --name:为创建的容器命名。
(3)进入容器:docker exec 参数;退出容器,容器不会关闭
(4)停止容器:docker stop 容器名称
(5)启动容器:docker start 容器名称
(6)删除容器:如果容器是运行状态则删除失败,需要停止容器才能进行删除
docker rm 容器名称
(7)查看容器信息:docker inspect
Docker容器的数据卷
数据卷概念
配置数据卷
数据卷容器
配置数据卷容器
(1)创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash
(2)创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
数据卷小结
(1)数据卷概念:宿主机的一个目录或文件,前提是挂载到容器所对应的目录或文件。
(2)数据卷作用:1.容器数据持久化。2.客户端和容器数据交换。3.容器间数据交换。
(3)数据卷容器:创建一个容器,挂载一个目录,让其它容器继承该容器;通过简单的方式实现数据卷配置
Docker 应用部署
部署MySQL
(1)搜索mysql镜像:docker search mysql
(2)拉取mysql镜像:docker pull mysql
(3)创建容器,设置端口映射、目录映射:
在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
创建容器
docker run -id -p 3307:3306 --name=mysql1 -v /mysql/conf:/etc/mysql/conf.d -v /mysql/log:/etc/mysql/log -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
(4)当我们退出容器后,可以借助下面这个命令进入容器:
docker exec –it c_mysql /bin/bash
Dockerfile
Docker 镜像原理
总结:
(1)Docker镜像的本质是一个分层文件系统.
(2)Docker的复用技术,使Docker中拉取centos镜像时,只需要拉取rootfs基础镜像,而复用了当前宿主机上的bootfs,因为不同的liunx发行版上所使用的bootfs基本一样,所以,拉取centos时只有70M左右,而一个centos操作系统的iso文件就要几个G。
(3)但拉取tomcat时,却有500M左右,比我们平时获取tomcat的安装包大了许多,其实这是因为,tomcat在拉取时,需要指定其它的父镜像,因为它需要依赖与这些环境,比如rootfs基础镜像,jdk镜像,然后再是tomcat镜像;几个镜像叠加在一起,就会变得很大。
镜像制作
1.容器转为镜像:
(1)把容器转换为镜像:docker commit 容器id 镜像名称:版本号
(2)把镜像压缩成文件以方便传输:docker save -o 压缩文件名称 镜像名称:版本号
(3)把镜像文件进行解压缩,恢复成镜像:docker load –i 压缩文件名称
2. Dockerfile
Dockerfile概念:
Dockerfile 关键字
关键字 | 作用 | 备注 |
FROM | 指定父镜像 | 指定dockerfile基于那个image构建 |
MAINTAINER | 作者信息 | 用来标明这个dockerfile谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 |
RUN | 执行命令 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] |
CMD | 容器启动命令 | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 |
COPY | 复制文件 | build的时候复制文件到image中 |
ADD | 添加文件 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 |
ENV | 环境变量 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
ARG | 构建参数 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 |
VOLUME | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"] |
EXPOSE | 暴露端口 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目录 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
USER | 指定执行用户 | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 |
HEALTHCHECK | 健康检查 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 |
ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 |
STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 |
SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell |
自定义一个centos7镜像。要求:
(1)默认登录路径为/usr
(2)可以使用vim
实现步骤:
(1)定义父镜像:FROM centos:7
(2)定义作者信息:MAINTAINER 作者信息或者邮箱
(3)执行安装vim命令:RUN yum install -y vim
(4)定义默认的工作目录:WORKDIR /usr
(5)定义容器启动执行的命令:CMD /bin/bash
(6)通过dockerfile构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本 .
(7)构建镜像命令示例:
定义一个springboot项目镜像
实现步骤:
(1)定义父镜像:
(2)定义作者信息:MAINTAINER 波 <bo@bo.cn>
(3)将jar包添加到容器:ADD springboot.jar app.jar
(4)定义容器启动执行的命令:CMD java -jar app.jar
(5)通过dockerfile构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本 .
(6)构建镜像命令示例:docker build -f ./文件名 -t app:1 .