文章目录
- 虚拟化
- 虚拟化技术
- 虚拟化分类
- 容器化
- Docker三大核心概念
- Docker官方服务
- Docker服务安装
- Docker镜像
- 构建新的镜像
- 通过Dockerfile构建
- 导出和载入
- 保存镜像为文件
- 从文件载入镜像
- 镜像重命名
- 推送到镜像库
- Docker容器
- 搭建私人仓库
虚拟化
虚拟化技术
概念:虚拟化是一种资源管理技术,是将计算机的各种实体资源抽象(例如:CPU、内存等)、转换后呈现出俩,打破实体结构间的不可切割的障碍,是用户可以更好的方式使用这些资源
核心:对资源抽象
目的:通过在同一台主机上运行多个系统,从而提高系统资源的利用率,并且带来了降低成本、方便管理和容错容灾等好处。
- 拓展
沙箱:沙箱是一种按照安全策略限制程序行为的执行环境云平台:是指基于硬件资源和软件资源的服务,提供计算、网络和存储能力
虚拟化分类
容器化
Docker三大核心概念
镜像:可以理解为创建容器的模板(一个只读的文件系统,版本管理和增量快照都借鉴了Git的设计思路)
容器:可以理解为轻量级的沙箱环境(通过在镜像最上层创建一个读写层实现,是镜像的一个运行实例)
仓库:存放镜像的地方(类似Git的代码仓库)
Docker官方服务
Docker引擎:分为社区版CE(一般够用)、企业版EE
DockerHub:镜像托管服务
DockerCloud:云服务
Docker服务安装
Docker镜像
构建新的镜像
通过Dockerfile构建
构建Dockerfile
FROM registry.cn-qingdao.aliyuncs.com/starcharge-base/oracle-jdk8
WORKDIR /ejy
ENTRYPOINT nohup java -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Dfile.encoding=UTF-8 -server -Xverify:none -jar ${jvmparams} app.jar > ./logs/console.log 2>&1
打包成镜像文件
# ejy-jdk8:1.0.0 -> 镜像名:版本号;. -> Dockerfile所在目录
docker build -t ejy-jdk8:1.0.0 .
用镜像启动应用
#!/bin/bash
cId=$(docker ps -a | grep 'demo' | awk '{print $1}')
echo "demo container id : $cId"
if [ -n "$cId" ]; then
# echo "111111"
sId=$(docker ps | grep 'demo' | awk '{print $1}')
if [ -n "$sId" ]; then
echo "stop container id:"
docker stop $sId
fi
echo "rm container id:"
docker rm $cId
fi
echo "restart container"
docker run --name demo --restart=always -v /opt/demo/jar/demo.jar:/ejy/app.jar -v /opt/demo/logs:/ejy/logs -p 8798:8798 -e jvmparams="-Xmx1g -Xms1g -XX:+PrintCommandLineFlags" -d ejy-jdk8:1.0.0
导出和载入
保存镜像为文件
docker save -o 要保存的文件名 要保存的镜像
例如:
docker images
docker save -o java8.tar lwieske/java-8
从文件载入镜像
docker load --input 文件
或
docker load < 文件名
例如:
docker load < java8.tar
镜像重命名
## 老的镜像名+版本或镜像id->新的镜像名(如果是私有镜像需包含在镜像名中)+版本号
docker tag [imageId(镜像id)| image:tag(镜像名:版本号)] repository:tag
例如:
推送到镜像库
## 私有镜像库登录
docker login -u=18019699403 -p=xxxx registry.cn-hangzhou.aliyuncs.com
## 推送镜像到私仓
docker push registry.cn-hangzhou.aliyuncs.com/ejy365/ejy-jdk8:1.0.0
## 推送日志
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/ejy365/ejy-jdk8]
1d5eda3c4fc4: Pushed
1cf7cdb9e084: Mounted from ejy365/sentinel-dashboard
e15afa4858b6: Mounted from ejy365/sentinel-dashboard
1.0.0: digest: sha256:1dd2fce6dcfb182a13e98585349b3f21d4d5c4a0c9841c8a4f421619bd494d8b size: 949
Docker容器
搭建私人仓库
- 使用官方提供的registry搭建
[root@docker02 registry]# docker run -p 5000:5000 -v /usr/local/data/registry:/var/lib/registry -d registry
[root@docker02 registry]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ec98c2ff204 registry "/entrypoint.sh /etc…" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp awesome_lewin
- 添加5000端口防火墙白名单,参考 笔记【开启防火墙端口 in CentOS7.x】
- 查看是否搭建完成,由于目前没有资源只显示了{}
[root@docker01 ~]# curl 'http://192.168.1.131:5000/v2/'
{}
- 推送镜像报错,高版本registry会校验https,通过配置客户端避免安全校验
[root@docker01 ~]# docker push 192.168.1.131:5000/ubuntu:v1.0.0
The push refers to repository [192.168.1.131:5000/ubuntu]
Get "https://192.168.1.131:5000/v2/": http: server gave HTTP response to HTTPS client
# 修改daemon.json配置文件
[root@docker01 ~]# vi /etc/docker/daemon.json
{
"debug": true,
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"],
"insecure-registries": ["192.168.1.131:5000"]
}
# 重启服务
[root@docker01 ~]# systectl restart docker
# 重新推送镜像
[root@docker01 ~]# docker push 192.168.1.131:5000/ubuntu:v1.0.0
The push refers to repository [192.168.1.131:5000/ubuntu]
5d46e30d8bbf: Pushed
e59fc9495612: Pushed
v1.0.0: digest: sha256:4faa72c1424a6e7cb5d49504d5ba71c8a175fe3a64dc793e9a07b608ff6dd0cb size: 736
# 密码认证功能,待续...