赞
踩
官网地址:https://docs.docker.com/ 和https://www.docker.com/
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。虚拟化容器技术 ,主要解决我们开发环境配置迁移的问题。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
1.Web 应用的自动化打包和发布。
2.自动化测试和持续集成、发布。
3.在服务型环境中部署和调整数据库或其他的后台应用。
4.从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
1、虚拟机是在硬件级别进行虚拟化,模拟硬件搭建操作系统;而Docker是在操作系统的层面虚拟化,复用操作系统,运行Docker容器
2、Docker的速度很快,秒级,而虚拟机的速度通常要按分钟计算
3、Docker所用的资源更少,性能更高。同样一个物理机器Docker运行的镜像数量远多于虚拟机的数量
4、虚拟机实现了操作系统之间的隔离,Docker是进程之间的隔离,虚拟机隔离级别更高、安全性方面也更强。
5、虚拟机和Docker各有优势,不存在谁替代掉谁的问题,很多企业都采用物理机上做虚拟机,虚拟机中跑Docker的方式。
容器与虚拟机区别的总结如表:
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级别 |
硬盘使用 | 一般为MB | 一般GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 完全隔离 | 完全隔离 |
Docker 要求 CentOS7 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
1、通过 uname -r 命令查看你当前的内核版本
2、 使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum -y update
3、 如果安装过旧版本的话,卸载旧版本
yum remove docker docker-common docker-selinux docker-engine
4、 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
5、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6、 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort –r
7、 安装docker
sudo yum install -y docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1
8、 启动并加入开机启动
systemctl start docker
systemctl enable docker
9、 验证安装是否成功,如下图:(有client和service两部分表示docker安装启动都成功了)
eg:docker search mysql 展示所有mysql的镜像文件
docker search -s 30 mysql 列出点赞数超过30以上。
latest 表示为最新的镜像文件 mysql8.0版本
latest -----tag 最新版本的镜像文件
eg:docker pull nginx:latest
docker export 1e560fca3906 > ubuntu.tar
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
docker run -itd --name test1 --network test-net ubuntu /bin/bash
打开新的终端,再运行一个容器并加入到 test-net 网络:
docker run -itd --name test2 --network test-net ubuntu /bin/bash
进入在test1 容器,输入以下命令:
同理在 test2 容器也会成功连接到:
这样,test1 容器和 test2 容器建立了互联关系。
如果你有多个容器之间需要互相连接,推荐使用 Docker Compose,后面会介绍。
docker run mayikt
简单描述:首先会先从本地获取获取mayikt镜像文件,如果本地没有该镜像文件则会去
阿里云仓库查找该镜像文件,如果阿里云仓库也没有该镜像文件,则会报错找不到
镜像文件。
获取到镜像文件之后直接运行。
详细描述:
1.docker在本机缓存中 mayikt镜像文件,如果本地存在该镜像文件
,则以该镜像文件作为模板在容器中运行。
2.如果本地缓存中,没有mayikt镜像文件 则会从dockerhub 或者加速镜像中
查找,如果查找不到的话,则返回错误找不到该镜像。
3. 如果能够查找到该镜像,则以该镜像作为模板运行。
每个容器都有自己独立的网络 ip信息 运行成功 就是一个轻量级linux操作系统
镜像、容器、仓库是docker的三大核心概念。
简单概述他们之间的关系如下图:
Docker pull 从远程docker 官方仓库下载 镜像,到本地,在使用容器运行该镜像。
注意的是:docker官方镜像仓库地址部署在国外,下载镜像可能比较慢,建议配置国内加速镜像
https://hub.docker.com/search?q=redis&type=image —在国外访问可能比较慢
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了(如下图):
配置加速镜像的操作命令:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://puaeb5rh.mirror.aliyuncs.com(自己的加速器专属地址)"]
}
EOF
# 重新加载配置文件
sudo systemctl daemon-reload
#重启docker
sudo systemctl restart docker
#查看是否配置成功
docker info
如下图,已显示我的加速专属地址,表示已配置成功
例:运行一个tomcat的容器
docker pull tomcat:8(可以指定版本号,不指定默认最新版本latest,我这里 下载的tomcat8)
docker images
如图,我的tomca:8已下载成功,接下来运行tomcat
docker commit主要作用:根据当前容器制作为镜像文件
例:下载一个tomcat:8版本的镜像文件,在tomcat的webapps目录下创建自己的一个mytomcat项目,默认访问地址index.html
操作操作步骤:
(1)从docker hub中下载一个tomcat8镜像文件;并且运行
docker run -p 8081:8080 tomcat:8
(2)进入tomcat容器中,在webapps 目录中新增 mytomcat文件夹且创建index.html
docker exec -it 3a06b4c779a8 bash
cd webapps
mkdir mytomcat
cd mytomcat
touch index.html
echo "hello,这是我自个创建的镜像哟,嘻嘻" >>index.html
(3)根据当前容器作为模板制作为镜像文件
docker commit -m=“mytomcat” -a=“mytomcat” 3a06b4c779a8 mytomcat:1.0
(4)以当前自己制作的镜像文件运行
docker run -d --name=mytomcat -p 8081:8080 mytomcat:1.0
(5)验证是否能正常访问(如下图,已成功运行自己创建的镜像,且正常访问创建的文件)
数据卷就是宿主机上的一个文件或目录
当容器目录和数据卷(宿主机)目录绑定,双方修改会立即同步操作
一个数据卷可以被多个容器同时挂载
数据卷作用:容器数据的持久化 外部机器和容器间接通信 容器之间数据交换
使用 -v命令。
docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx
说明:-v /data/nginx/html 虚拟机目录 --挂载 容器目录,/usr/share/nginx/html 上传一个 html 放入到 /data/nginx/html。
在 /data/nginx/html下创建index.html,在进入nginx容器中的/usr/share/nginx/html下检验是否能看到index.html
通过上图,可发现在/data/nginx/html目录下创建index.html文件在nginx容器中也可以访问,说明已正常挂载成功。
挂载多个文件,如nginx .conf文件和日志文件
docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/logs:/var/log/nginx nginx
说明:\反斜杠 表示换行
指令 | 说明 |
---|---|
1. FROM | 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令 |
2. MAINTAINER | 维护者 |
3. RUN | 容器创建的时候执行一段命令 构建镜像时执行的命令 |
4. ADD | 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget |
5. COPY | 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 |
6. CMD | 构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件 |
7. ENV | 设置环境变量 |
8. EXPOSE | 指定于外界交互的端口 |
9. VOLUME | 用于指定持久化目录,数据卷挂载的目录 |
10. WORKDIR | 设置进入容器时的路径 默认访问的目录 |
下面的Tomcat的dockerFile,大家可以参照刚才讲到的指令,看下是否能够读懂:
https://github.com/docker-library/tomcat/blob/385e8403a38fab7097d4c3fed2484caba7dfd099/8.5/jdk8/openjdk-slim-buster/Dockerfile
在根目录的usr下创建DockerFile文件
编辑dockerFile文件
#继承docker hub中centos的镜像文件
FROM centos
#维护者信息
MAINTAINER mycentos-chenlili
#配置环境变量
ENV MYPATH /usr
#进入到容器默认访问的目录
WORKDIR $MYPATH
#安装vim插件
RUN yum -y install vim
#外部访问端口
EXPOSE 80
#启动容器后,自动进入容器中
CMD /bin/bash
命令:docker build -f Dockerfile -t mycs:1 .
#参数说明
Dockerfile ------配置文件
mycs----打包镜像文件名称
1 tag 版本号码
如下图可清晰看到在打包镜像文件过程中,我们制作的dockerFile文件内容从上到下的顺序在执行:
如图,我的镜像文件以及所依赖的centos父镜像也都有了,且运行自己创建的镜像(mycs)成功后,自动进入了/usr目录,vim查看也有安装成功。说明本次创建自己的DockerFile文件实验成功啦
1、创建一个springboot项目
项目创建步骤省略,可参考https://blog.csdn.net/zyhlwzy/article/details/78730587
下图是我创建的测试类:
2、将springboot项目打包成jar包(打包方式有多种,相信正在做过java项目的同学都都会,这里就不介绍了)
打包成功后,我的项目下demo\target目录就能看到打包好的jar包了
3、定义dockerfile文件,描述springboot项目配置依赖和环境变量(注意:springboot内置嵌入我们的tomcat服务器 所以不需要额外的tomcat容器)
#继承docker hub中centos的镜像文件
FROM java:8
#维护者信息
MAINTAINER mydemo-chenlili
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为demo.jar
ADD demo-0.0.1-SNAPSHOT.jar demo.jar
# 运行jar包
RUN bash -c 'touch /demo.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
#暴露8080端口
EXPOSE 8080
4、将DockerFile文件和springboot项目jar包上传到服务器
(在根目录的usr下创建mydemo,然后上传文件)
5、讲DockerFile文件打包成镜像文件
命令:docker build -f Dockerfile -t mydemo:1 .
如下图可清晰看到在打包镜像文件过程中,我们制作的dockerFile文件内容从上到下的顺序在执行:
7、启动容器,访问springboot验证部署是否成功
命令:docker run -d -p 8081:8080 --name=mydemo mydemo:1
如下图,可以正常访问我的springboot项目啦,表示用DockerFile打包第一个SpringBoot项目
参考:https://www.cnblogs.com/minseo/p/11548177.html
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Docker-Compose将所管理的容器分为三层:分别是工程(project),服务(service)以及容器(container)
Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
1、我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、添加可执行的权限
sudo chmod +x /usr/local/bin/docker-compose
3、验证是否安装成功
docker-compose -v
如下图,已正常显示安装的版本,表示已安装成功啦
docker-compose [-f …] [options] [COMMAND] [ARGS…]
命令选项如下:
docker-compose up [options] [–scale SERVICE=NUM…] [SERVICE…]
选项包括:
docker-compose ps [options] [SERVICE…]
docker-compose stop [options] [SERVICE…]
选项包括:
docker-compose -h 查看帮助
docker-compose down [options] 停止和删除容器、网络、卷、镜像。
选项包括:
docker-compose logs [options] [SERVICE…]
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose build [options] [–build-arg key=val…] [SERVICE…]
构建(重新构建)项目中的服务容器。
选项包括:
docker-compose pull [options] [SERVICE…]
拉取服务依赖的镜像。
选项包括:
docker-compose restart [options] [SERVICE…]
重启项目中的服务。
选项包括:
docker-compose rm [options] [SERVICE…]
删除所有(停止状态的)服务容器。
选项包括:
docker-compose start [SERVICE…]
docker-compose run [options] [-v VOLUME…] [-p PORT…] [-e KEY=VAL…] SERVICE [COMMAND] [ARGS…]
在指定服务上执行一个命令。
docker-compose scale web=3 db=2 设置指定服务运行的容器个数。通过service=num的参数来设置数量
docker-compose pause [SERVICE…] 暂停一个服务容器
docker-compose kill [options] [SERVICE…]
通过发送SIGKILL信号来强制停止服务容器。
支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT
docker-compose config [options]
验证并查看compose文件配置。
选项包括:
docker-compose create [options] [SERVICE…]
为服务创建容器。
选项包括:
docker-compose exec [options] SERVICE COMMAND [ARGS…]
选项包括:
docker-compose port [options] SERVICE PRIVATE_PORT
显示某个容器端口所映射的公共端口。
选项包括:
docker-compose push [options] [SERVICE…]
推送服务依的镜像。
选项包括:
docker-compose stop [options] [SERVICE…] 显示各个容器运行的进程情况。
docker-compose unpause [SERVICE…] 恢复处于暂停状态中的服务。
docker-compose version 打印版本信息。
案例:通过docker-compose部署一个springboot项目
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。