文章目录

  • 虚拟化
  • 虚拟化技术
  • 虚拟化分类
  • 容器化
  • Docker三大核心概念
  • Docker官方服务
  • Docker服务安装
  • Docker镜像
  • 构建新的镜像
  • 通过Dockerfile构建
  • 导出和载入
  • 保存镜像为文件
  • 从文件载入镜像
  • 镜像重命名
  • 推送到镜像库
  • Docker容器
  • 搭建私人仓库


虚拟化

虚拟化技术

概念:虚拟化是一种资源管理技术,是将计算机的各种实体资源抽象(例如:CPU、内存等)、转换后呈现出俩,打破实体结构间的不可切割的障碍,是用户可以更好的方式使用这些资源
核心:对资源抽象
目的:通过在同一台主机上运行多个系统,从而提高系统资源的利用率,并且带来了降低成本、方便管理和容错容灾等好处。

  • 拓展
沙箱:沙箱是一种按照安全策略限制程序行为的执行环境
云平台:是指基于硬件资源和软件资源的服务,提供计算、网络和存储能力

docker 运行容器后exit docker容器exited_docker 运行容器后exit

虚拟化分类

docker 运行容器后exit docker容器exited_容器_02

容器化

Docker三大核心概念

镜像:可以理解为创建容器的模板(一个只读的文件系统,版本管理和增量快照都借鉴了Git的设计思路)
容器:可以理解为轻量级的沙箱环境(通过在镜像最上层创建一个读写层实现,是镜像的一个运行实例)
仓库:存放镜像的地方(类似Git的代码仓库)

Docker官方服务

Docker引擎:分为社区版CE(一般够用)、企业版EE
DockerHub:镜像托管服务
DockerCloud:云服务

Docker服务安装

参考 搭建【docker in centos7.x】

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 .

docker 运行容器后exit docker容器exited_运维_03

用镜像启动应用

#!/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 运行容器后exit docker容器exited_docker_04

推送到镜像库
## 私有镜像库登录
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
[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
# 密码认证功能,待续...