简介
何为容器
容器是对应用程序及其依赖关系的封装。乍一看容器只是个轻量级的虚拟机,它和虚拟机 一样拥有一个被隔离的操作系统实例,用来运行应用程序。
- 容器能与主机的操作系统共享资源,因而它的效率高出一个数量级
- 容器具有可移植性,这极有可能彻底解决由于运行环境的些许改变而导致的问题
- 容器是轻量的,这意味着开发者能同时运行数十个容器,并能模拟分布式系统在真实运 行环境下的情况
更重要的是,虚拟机和容器的根本目标不尽相同。虚拟机的目的是要完整地模拟另一个环 境,而容器的目的则是使应用程序能够移植,并把所有依赖关系包含进去。
docker和容器
Docker 利用现有的 Linux 容器技术,以不同方式将其封装及扩展——主要是通过提供可移植的 镜像,以及一个用户友好的接口——来创建一套完整的容器创建及发布方案。Docker 平台拥有 两个不同部分:负责创建与运行容器的 Docker 引擎,以及用来发布容器的云服务 Docker Hub。
Docker 引擎提供了一个快速且便捷的接口用来运行容器。在此之前,使用如 LXC 等技术 运行容器需要相当多的专业知识以及手动操作。Docker Hub 提供大量的公共容器镜像以供 下载,方便用户快速上手,并且避免了重复劳动。Docker 还进一步开发了更多的工具,如 集群管理工具 Swarm、用于处理容器的图形用户界面 Kitematic,以及部署 Docker 主机的 命令行工具 Machine。
主要利用以下功能
- liux cgroup:将任意进程进行分组化管理的Linux内核功能
- linux namespace:资源隔离
- linux file system:存储驱动
- linux kernel
安装
liunx 安装
//配置镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//yum安装
yum install -y docker-ce
//启动
systemctl start docker
//设置开机启动
systemctl enable docker
//镜像加速器,这里使用的是阿里云镜像加速,请自行注册阿里云镜像账号
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Windows10安装
前提条件,检查电脑是否支持虚拟化,是否开启Hyper-V
Docker下载地址为:https://hub.docker.com/editions/community/docker-ce-desktop-windows 点击如图处即可下载安装包
下载完,按照提示安装即可,双击Docker Desktop启动程序
配置镜像加速器,如下图操作
镜像操作
制作镜像
编写Dockerfile文件制作镜像,示例镜像以springboot 打包的jar包
Dockerfile文件
//基础镜像jdk8
FROM registry.cn-hangzhou.aliyuncs.com/huangding/java8-ttf-dejavu
VOLUME /tmp
//复制本地执行jar包
COPY ./target/car-loan.jar app.jar
//启动时执行命令,设置时区,jar包等参数
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08","-jar","/app.jar"]
//时区配置
ENV TZ=Asia/Shanghai
//启动参数
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
执行Dockerfile文件制作镜像
//创建镜像 设置镜像名称和版本
docker build -t huangding/car_loan:xr .
//输出
Sending build context to Docker daemon 149.4MB
Step 1/6 : FROM registry.cn-hangzhou.aliyuncs.com/huangding/java8-ttf-dejavu
---> 06aa79300f83
Step 2/6 : VOLUME /tmp
---> Using cache
---> c201f0e93354
Step 3/6 : COPY ./target/car-loan.jar app.jar
---> 706b7d8e3398
Step 4/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08","-jar","/app.jar"]
---> Running in 993cc9cbe281
Removing intermediate container 993cc9cbe281
---> 418c30d6bdf7
Step 5/6 : ENV TZ=Asia/Shanghai
---> Running in 75e0fcf6d141
Removing intermediate container 75e0fcf6d141
---> 4cd59e7b13c2
Step 6/6 : RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
---> Running in e484bac42e70
Removing intermediate container e484bac42e70
---> 04ac2c9fb4a3
Successfully built 04ac2c9fb4a3
Successfully tagged huangding/car_loan:xr
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
使用docker images命令查看刚刚创建的镜像
docker images huangding/car_loan:xr
镜像上传到镜像仓库
需要docker仓库先创建仓库名称(kill/car_loan)
上传到镜像仓库,等待拉取发布到服务器,示例使用阿里云镜像仓库,hubdocker最近太难进去了
//登录阿里云仓库
$ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
// 使用docker tag命令标记本地镜像,将其归入某一仓库
$ sudo docker tag 04ac2c9fb4a3[ImageId] registry.cn-hangzhou.aliyuncs.com/kill/car_loan:xr[镜像版本号]
//使用docker push 上传镜像到私有仓库
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/kill/car_loan:xr[镜像版本号]
//输出
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/huangding/car_loan]
ae1658cf61ab: Pushed
edd2b01508ac: Pushed
44b633d19a15: Layer already exists
14361f2cd676: Layer already exists
20dd87a4c2ab: Layer already exists
78075328e0da: Layer already exists
9f8566ee5135: Layer already exists
Head https://registry.cn-hangzhou.aliyuncs.com/v2/huangding/car_loan/blobs/sha256:04ac2c9fb4a38b2bd967edd0557139995a9687eb200a7c1f00f45cc77e4432b4: EOF
Untagged: huangding/car_loan:xr
登录阿里云镜像仓库,查看是否已上传
启动镜像
选择需要部署的服务器,进行镜像启动
//登录阿里云镜像仓库
$ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
//使用docker pull imagename:tag拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/huangding/car_loan:xr
//使用docker run 启动 --restart=always 开机自启 -d 后台运行 --name 容器名称 -p设置端口
docker run --restart=always -d --name car_loan -p 8081:8081 registry.cn-hangzhou.aliyuncs.com/huangding/car_loan:xr
完毕
以上使用到的docker 命令
- docker login 登录命令
- docker build 打包构建命令
- docker tag 标记本地镜像
- docker push 推送到远程仓库
- docker pull 拉取镜像
- docker run 启动镜像