目录
五、本地镜像发布到阿里云
5.1、本地镜像发布到阿里云流程
5.2、镜像的生成方法
基于当前容器创建一个新的镜像(第一种方法)
DockerFile(第二种方法)
5.3、将本地镜像推送到阿里云
本地镜像素材原型
创建仓库镜像
选择控制台,进入容器镜像服务
命名空间
仓库名称
进入管理命令获得脚本
将镜像推送到阿里云
将镜像推送到阿里云Registry
管理界面脚本
脚本实例
5.4、将阿里云上的镜像下载到本地
下载到本地
六、本地镜像发布到私有库
6.1、本地镜像发布到私有库流程
6.2、是什么?
6.3、将本地镜像推送到私有库
(1)下载镜像Docker Registry
(2)运行私有库Registry,相当于本地有个私有Docker hub
(3)案例演示创建一个新镜像,ubuntu安装ifconfig命令
① 从Hub上下载ubuntu镜像到本地并成功运行
② 原始的ubuntu镜像是不带ifconfig命令的
③ 外网连通的情况下,安装ifconfig命令并测试通过
④ 安装完成后,commit我们自己的新镜像
⑤ 启动我们的新镜像并和原来的对比
(4)curl验证私服库上有什么镜像
(5)将新镜像clayubuntu:1.3修改符合私服规范的Tag
(6)修改配置文件使之支持http
(7)push推送到私服库
(8)pull到本地并运行
七、Docker容器数据卷
7.1、坑:容器卷记得加入
7.2、回顾上一讲的知识点,参数v
7.3、是什么?
运行一个带有容器卷存储功能的容器实例
7.4、能干嘛?
7.5、数据卷案例
宿主vs容器之间映射添加容器卷
命令
编辑
查看数据卷是否挂载成功
容器和宿主机之间数据共享
读写规则映射添加说明
读写
只读
卷的继承和共享
容器1完成和宿主机的映射
容器2继承容器1的卷规则
八、Docker常规安装简介
8.1、总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像
停止镜像
移除容器
8.2、安装Tomcat
Docker hub上面查找Tomcat镜像
从Docker hub上拉取Tomcat镜像到本地
查看是否拉取到Tomcat
创建Tomcat容器实例
访问Tomcat首页
问题
解决
免修改版说明
8.3、安装Mysql
Docker hub上面查找mysql镜像
从Docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
使用mysql5.7镜像创建容器(也叫运行镜像)
命令出处,哪里来的?
简单版
使用mysql镜像
实战版
新建mysql容器实例
新建my.cnf
重新启动mysql容器实例再重新进入并查看字符编码
再新建库新建表再插入中文测试
结论
8.4、安装Redis
Docker hub上面拉取redis镜像到本地标签为6.0.8
入门命令
在Centos宿主机下新建目录/app/redis
将一个redis.conf文件模板拷贝进/app/redis目录下
/app/redis目录下修改redis.conf文件
使用redis6.0.8镜像创建容器(也叫运行镜像)
测试redis-cli连接上来
请证明docker启动使用了我们自己指定的配置文件
修改前
修改后
测试redis-cli连接上来第2次
五、本地镜像发布到阿里云
5.1、本地镜像发布到阿里云流程
5.2、镜像的生成方法
基于当前容器创建一个新的镜像(第一种方法)
docker commit [options] 容器ID [repository[:tag]]
OPTIONS说明:
-a:提交的镜像作者;
-m:提交时的说明文字;
本次案例centos+ubuntu两个,当堂讲解一个,家庭作业一个,请大家务必动手,亲自实操。
DockerFile(第二种方法)
5.3、将本地镜像推送到阿里云
本地镜像素材原型
创建仓库镜像
选择控制台,进入容器镜像服务
命名空间
仓库名称
进入管理命令获得脚本
将镜像推送到阿里云
将镜像推送到阿里云Registry
管理界面脚本
脚本实例
5.4、将阿里云上的镜像下载到本地
下载到本地
六、本地镜像发布到私有库
6.1、本地镜像发布到私有库流程
6.2、是什么?
1、官方Docker Hub地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。
2、Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。
Docker Registry是官方提供的工具,可以用于构建私有镜像仓库
6.3、将本地镜像推送到私有库
(1)下载镜像Docker Registry
docker pull registry
(2)运行私有库Registry,相当于本地有个私有Docker hub
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调。
(3)案例演示创建一个新镜像,ubuntu安装ifconfig命令
① 从Hub上下载ubuntu镜像到本地并成功运行
注意:因为以前下载过,所以这里不过多赘述。
② 原始的ubuntu镜像是不带ifconfig命令的
③ 外网连通的情况下,安装ifconfig命令并测试通过
docker容器内执行上述两条命令:
apt-get update
apt-get install net-tools
之后再输入ifconfig就可以使用了。
④ 安装完成后,commit我们自己的新镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
注意:一定要在容器外执行。
这里还有个点,你退出的时候一定要用ctrl+p+q,不要用exit。
docker commit -m="ifconfig cmd add" -a="clay" 6a15b30bb5b9 clayubuntu:1.3
⑤ 启动我们的新镜像并和原来的对比
先把原来的ubuntu关闭掉,docker stop xxxx。
发现我们的新镜像是可以使用ifconfig命令的。
(4)curl验证私服库上有什么镜像
curl -XGET http://你的ip:5000/v2/_catalog
注意:这里的IP地址是你虚拟机的IP,而5000是你刚刚运行的私服库,我们的查询结果是私有库中没人任何镜像。
(5)将新镜像clayubuntu:1.3修改符合私服规范的Tag
按照以下公式来做:
docker tag 镜像:Tag Host:Port/Repository:Tag
使用命令 docker tag 将clayubuntu:1.3 这个镜像修改为你的ip:5000/clayubuntu:1.3
docker tag clayubuntu:1.3 你的ip:5000/clayubuntu:1.3
(6)修改配置文件使之支持http
vim /etc/docker/daemon.json
在我们之前配置的阿里云镜像后面加上这句:
"insecure-registries": [你的ip:5000"]
上述理由:docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,建议重启docker。
(7)push推送到私服库
docker push 你的ip:5000/clayubuntu:1.3
(8)pull到本地并运行
docker pull 你的ip:5000/clayubuntu:1.3
七、Docker容器数据卷
7.1、坑:容器卷记得加入
--privileged=true
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可!
如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即
使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
7.2、回顾上一讲的知识点,参数v
还记得蓝色框框中的内容吗?
7.3、是什么?
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
一句话:有点类似我们Redis里面的rdb和aof文件。
将Docker容器内的数据保存进宿主机的磁盘中。
运行一个带有容器卷存储功能的容器实例
docker run -it --privileged=true -v/宿主机绝对路径目录:/容器内目录 镜像名
7.4、能干嘛?
将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
特点:
1:数据卷可在容器之间共享或重用数据。
2:卷中的更改可以直接实时生效,爽。
3:数据卷中的更改不会包含在镜像的更新中。
4:数据卷的生命周期一直持续到没有容器使用它为止。
7.5、数据卷案例
宿主vs容器之间映射添加容器卷
命令
docker run -it --privileged=true -v/宿主机绝对路径目录:/容器内目录 镜像名
我们ctrl + p + q退出时,再看
果然同步到宿主机了。
当然我们在宿主机上创建文件也可以同步到容器中。
查看数据卷是否挂载成功
docker inspect 容器ID
容器和宿主机之间数据共享
1:docker修改,主机同步获得。
2:主机修改,docker同步获得。
3:docker容器stop,主机修改,docker容器重启看数据是否同步。
哪怕你docker容器挂了,挂的这段时间宿主机的操作也一样会同步到docker容器中。
读写规则映射添加说明
读写
默认就是可读可写的。
只读
容器实例内部被限制,只能读取不能写。
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
卷的继承和共享
容器1完成和宿主机的映射
docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
容器2继承容器1的卷规则
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
总结:我们之前创建了u1 ubuntu,相当于用来备份的硬盘A,现在我们又创建了u2 ubuntu硬盘B,继承自硬盘A,哪怕A挂了,B照样能同步数据,等硬盘A复活,A照样有挂掉这期间的数据,相当于一主二从。
八、Docker常规安装简介
8.1、总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像
停止镜像
移除容器
8.2、安装Tomcat
Docker hub上面查找Tomcat镜像
docker search tomcat
从Docker hub上拉取Tomcat镜像到本地
docker pull tomcat
查看是否拉取到Tomcat
docker images
创建Tomcat容器实例
docker run -it -p 8080:8080 tomcat
-p小写,主机端口:docker容器端口。
-P大写,随机分配端口。
i:交互。
t:终端。
d:后台。
访问Tomcat首页
问题
解决
(1)可能没有映射端口或者没有关闭防火墙
(2)把webapps.dist目录换成webapps
先成功启动tomcat
直接访问localhost:8080
免修改版说明
刚才的Tomcat太过麻烦,因为是新版,导致把webapps里面的东西给清空了,我们还得多几步操作,将webapps.dist改为webapps才行,所以我们还是用老一点的版本。
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
8.3、安装Mysql
Docker hub上面查找mysql镜像
docker search mysql
从Docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
docker pull mysql:5.7
使用mysql5.7镜像创建容器(也叫运行镜像)
命令出处,哪里来的?
简单版
使用mysql镜像
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker ps
docker exec -it 容器ID /bin/bash
mysql -uroot -p
实战版
新建mysql容器实例
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
新建my.cnf
通过容器卷同步给mysql容器实例
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
重新启动mysql容器实例再重新进入并查看字符编码
再新建库新建表再插入中文测试
结论
之前的DB 无效。
修改字符集操作+重启mysql容器实例。
之后的DB 有效,需要新建。
结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据。
8.4、安装Redis
Docker hub上面拉取redis镜像到本地标签为6.0.8
入门命令
命令提醒:容器卷记得加入--privileged=true。
Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可。
在Centos宿主机下新建目录/app/redis
mkdir -p /app/redis
将一个redis.conf文件模板拷贝进/app/redis目录下
/app/redis目录下修改redis.conf文件
使用redis6.0.8镜像创建容器(也叫运行镜像)
docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
测试redis-cli连接上来
请证明docker启动使用了我们自己指定的配置文件
修改前
修改后
记得重启服务。