为什么使用docker
我们写的代码会接触到好几个环境: 开发环境,测试环境以及生产环境:
部署:
环境不同会造成水土不服:运行有问题
如何解决:只需要将所需要的环境一起打包部署即可
Docker的概念
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
Docker的应用
安装Docker
Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,该文章基于CentOS7安装Docker。官网: www.docker.com
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 download.docker.com/linux/cento…
4、安装docker ,出现输入的界面都按y
yum install -y docker-ce
5、查看docker版本,验证是否验证成功
docker -v
Docker的架构
-
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
-
容器(Container) :Docker 利用容器(Container)独立运行的一个或一组应用。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台
-
仓库(Repository)是集中存放镜像文件的场所。
类似于
Maven仓库,存放各种jar包的地方;
github仓库,存放各种git项目的地方;
Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(hub.docker.com/),
存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等
配置Docker镜像加速器
默认情况下,将来从docker hub (hub.docker.com/)上下载docker镜像,太慢。一般都会配置镜像加速器:
USTC:中科大镜像加速器(docker.mirrors.ustc.edu.cn),仅限校内使用
阿里云
网易云
腾讯云
配置的是阿里云镜像加速器
Docker常用命令
Docker服务相关的命令
启动docker服务 systemctl start docker
停止docker服务 systemctl stop docker 重启docker服务 systemctl restart docker
查看docker服务状态 systemctl status docker
开机启动dockeh服务 systemctl enable docker
查看docker命令帮助文档: docker 具体命令 --help
Docker镜像相关的命令
查看镜像 docker images
搜索镜像 docker search redis
Docker Hub Container Image Library | App Containerization
拉取镜像 docker pull redis:6.0 冒号后跟的是版本号,如果不跟默认latest
查询所有镜像的id docker images -q
删除镜像
根据id删除 docker rmi id
根据名称:版本号删除 docker rmi redis:6.0
删除所有镜像 docker rmi $(docker images -q)
删除未使用的镜像 docker image prune -a
Docker容器相关的命令
1.创建容器
2.查看容器
docker ps --查看正在运行的容器
docker ps -a --查看所有容器
3.创建一个容器但不进入容器
4.进入指定容器内
这时再使用exit退出容器,则不会关闭容器
5.启动容器
6.停止容器
7.删除容器
docker rm 容器id #只删除未启动的容器
docker ps -aq #查看所有容器的id
docker rm $(docker ps -aq) #删除所有容器
8.查看容器信息
9.输出当前容器日志信息
docker logs 容器id
容器的数据卷
1.数据卷的概念和作用
dockers容器删除后,容器中的产生的数据还在吗?
思考: Docker容器和外部机器可以直接交换文件吗?
思考: 容器之间想要进行数据交互》
数据卷的概念
数据卷是宿主机中的一个目录或问文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以挂载多个数据卷。
作用:
1.解决数据持久化问题
2.解决外部机器和容器的间接通讯问题
3.解决容器之间的数据交换
配置数据卷
docker run -id --name=c2 -v /usr/app:/usr/ykq -v /usr/app2:/usr/ykq2 centos:7 /bin/bash