概念:docker就是一个开源的容器引擎
可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的LInux机器上
容器是完全使用沙箱机制,呼吸隔离
安装:
配置docker镜像加速器docker hub
阿里云每个人都有免费的镜像加速器
启动docker:systemctl start docker
查看docker状态:systemctl status docker
停掉docker:stop docker
开机启动docker:systemctl enable docker
查看镜像命令:docker images
搜索镜像命令:docker search redis:5.0(版本和名称用:隔开)
拉取镜像命令(下载redis):docker pull redis(可以看官方镜像docker hub里面支持redis的版本)
官方连接:Docker
删除镜像命令:docker rmi (image id)镜像id
查看所有镜像:docker images -q
删除所有镜像:docker rmi docker images -q
创建容器命令(创建完运行并进入容器内部):docker run -it --name=c1 centos:7 /bin/bash
(i表示一直运行,t表示分配终端接受命令;--name=c1也可以--name c1,name后面是名称;centos:7:镜像名称:镜像版本)
创建容器命令(创建完运行 不进入容器内部):docker run -id --name=c2 centos:7
(-id:d表示创建完不进入容器;/bin/bash不需要进入就不加)
退出容器(容器就不运行):exit
查看正在运行的容器:docker ps
查看历史运行的容器:docker ps -a
进入容器命令:docker exec -it c2 /bin/bash
关闭容器:docker stop c2(容器名称)
删除容器:docker rm c1(容器名称/容器id)
查看所有容器id:docker ps -aq(q:表示可以查看所有容器id)
删除所有容器:docker rm docker ps -aq(不能删除正在运行的容器)
查看容器信息:docker inspect c2(容器名称)
docker容器的数据卷
目录映射
数据卷概念:数据卷是宿主机中的一个目录或文件
当容器目录和数据卷目录绑定后,对方的修改回立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
容器和数据卷通过挂载进行同步目录(目录名称可以不一样,就可以理解为备份)
数据卷作用:容器数据持久化
外部机器和容器间接通信
容器之间数据交换
配置数据卷
创建启动容器时设置数据卷:docker run -it —name=c1 -v ~/data:/root/datatime condos:7 /bin/basn
(宿主机目录可以用~代表/root,但是容器目录不可以;/bin/bsh可以不写;没有改目录会自动创建)
数据卷容器
多容器进行数据交换
1.多个容器挂载同一个数据卷
2.数据卷容器
docker应用部署
mysql部署
1.搜索mysql镜像
2.拉取mysql镜像
3.创建容器
4.操作容器中的mysql
容器内的网络服务和外部机器不能直接通信
外部机器和宿主机可以之间通信
宿主机和容器可以之间通信
容器和外部机器通信方式:端口映射
Tomcat部署
Nginx部署
Dockerfile-镜像原理
镜像制作
1.容器转为镜像
docker commit 容器id 镜像名称:版本号
压缩文件:docker save -o 压缩文件名称 镜像名称:版本号
解压文件:docker load -i 压缩文件名称
2.dockerfile
概念: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 或者 [“command”,”param1”,”param2”]
ENTRYPOINT:入口:一般在制作一些执行就关闭的容器中会使用
COPY:复制文件:build的时候复制文件到image中
ADD:添加文件:build的时候添加文件到image中,不仅仅局限于当前build上下文可以来源于远程服务
ENV:环境变量:指定build时候的环境变量,可以在启动的容器的时候通过-e覆盖格式ENVname=value
ARG:构建参数:构建参数只在构建的时候使用的参数如果ENV那么ENV的相同名字的值始终覆盖的arg参数
服务编排dockerCompose
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大
概念:是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务工具,启动和停止。使用步骤:
1.利用dockerile定义运行环境镜像
2.使用docker-compose.yml定义组成应用的各服务
3.运行docker-cpmpose up启动应用
docker私有仓库
私有仓库构建
1.拉取私有仓库镜像
docker pull registry
2.启动私有仓库容器
docker run -id —name=registry -p 5000:5000 registry
3.打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{“repositories”:[]}表示私有仓库搭建成功
4.修改daemon.json
vim /etc/docker/daemon.json
(在上述文件中添加一个key,保存退出。此步用于让docker信任私有仓库地址;注意将私有仓库服务ip修改为自己私有仓库服务器真实ip)
{“insecure-registries”:[“私有仓库服务器ip:5000”]}
5.重启docker服务
systemctl restart docker
docker start registry
Docker容器虚拟化与传统的虚拟机区别
相同:容器和虚拟机具有相似的资源隔离和分配优势
不同:容器虚拟化是操作系统,虚拟机虚拟化的是硬件
传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统
容器启动是秒级,虚拟机启动是分钟级;
容器硬盘使用一般为MB,虚拟机硬盘使用一般为GB;
容器性能接近原生,虚拟机性能弱于原生;
容器系统支持量单机支持上千个容器,虚拟机系统支持量一般几十个