docker基础
1、安装以及配置
1.1、docker的基本组成
- 镜像
镜像就是一个只读的模板,可以通过这个模板创建容器服务,一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)。
- 容器
- Docker利用容器技术,独立运行的一个或一组应用。容器是用镜像创建的运行实例。
- 它可以被启用,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
- 可以把容器看作是一个简易版的Linux系统(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
- 容器的定义和镜像几乎一摸一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
- 仓库
- 仓库是集中存放镜像文件的场所。
- 仓库和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
- 仓库分为公开仓库(public)和私有仓库(private)两种形式
- 最大的开放仓库是国外的 Docker Hub,存放了数量庞大的镜像供用户下载。
- 国内的公开仓库包括阿里云,网易云都有容器服务器(需要配置镜像加速)等
1.2、准备安装环境
需要准备一台系统为Cent OS 7&8
的服务器,这里我所使用的是阿里云的服务器。
1.3、安装
- 卸载旧版本
直接通过yum
来安装 docker 服务。
如果在系统之中有旧版本的 docker ,需要首先卸载旧的版本
1 | sudo yum remove docker \ |
- 安装新版本
1
sudo yum install -y yum-utils
- 设置镜像地址
1
2
3
4
5
6
7
8
9
10默认是国外的
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
换成阿里云镜像地址
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 安装最新版Docker Engine和容器
1
2docker-ce社区版(docker-ee企业版)
sudo yum install docker-ce docker-ce-cli containerd.io
1.4、安装完成后启动
1 | sudo systemctl start docker |
查看是否安装成功并启动
1 | docker version |
1.5、测试
运行hello world测试
1 | sudo docker run hello-world |
查看刚才运行的镜像
1 | docker images |
2、docker常用命令
3、实战部署
3.1、部署Nginx
1 | 1. 搜索镜像 |
3.2、部署Tomcat
1 | 官方使用 |
3、容器数据卷
3.1、什么是容器数据卷
docker的理念:将应用和环境打包成一个镜像!通过镜像启动容器运行。
而现在有这样一个问题:在容器中存储的程序数据是需要持久化的,不能容器删了数据也随之删除。比如,安装一个MySQL容器,在其中存储了大量数据,结果把容器删了数据也没了,就相当于删库跑路,这是不可能发生的
而为了解决这个问题,就有了 容器数据卷 的概念:Docker容器所产生的数据会自动同步到本地,这样子即使将容器删除了,数据依然还在;同时,同一份数据还可以在多个容器中进行共享。
类似于将容器的目录挂载到本地(本地指的是:服务器的本地)
3.2、使用容器数据卷
使用数据卷有两种方式,一种是通过命令行挂载的方式,一种是通过dockerfile的方式添加,首先进行第一种模式的介绍。
1 | docker run -it -v 主机目录:容器内目录 |
举例:
1 | docker run -it -v /home/test:/home centos /bin/bash |
启动之后可以用docker inspect查看容器详细信息,可以看到挂载的信息。
其中-v
表示在容器中创建一个数据卷,通过该命令,会在docker以及宿主中分别创建一个相同的目录,两个目录相互共享,里面的文件也是一样。
同时在创建容器数据卷的的时候还可以给它加上权限,如果我们想要给宿主机只能读取数据卷中的数据,但是不能修改,我们就可以通过以下的方式进行设置:
1 | docker run -it -v /主机目录 : /容器内目录 :ro 镜像名 |
而一般情况下,只写很少使用,同样通过docker inspect可以查看权限。
下面我们介绍dockerfile的方式创建容器数据卷。
3.3、初识Dockerfile
DockerFile也就是用来创建docker镜像的构建文件,而dockerFile对于docker镜像而言就如同java中某个类的.class文件对应上该类的.java文件。
首先在linux服务器根目录上新建docker文件夹并建立DockerFile文件,使用volume命令(出于可移植可分享的的考虑,用以上 -v /宿主机绝对路径目录 : /容器内目录
的这种方式不能够直接在dockerFile中直接实现,因为宿主机目录是依赖于特定的宿主机的,并不能保证所有的宿主机都存在这样特定的目录)
首先我们编写一个dockerfile文件:
1 | FROM 镜像名 |
以上的文件脚本相当于命令行: docker run -it -v /主机目录 : /容器内目录
然后通过docker build
编译运行该脚本文件:
1 | docker build -f /docker/DockerFile -t 命名空间/镜像名 |
执行后输入docker images就可以发现自己通过DockerFile所build的镜像,里面有挂载数据卷。