Docker学习
Docker的思想
为什么这个世界上会有Docker这种东西?
因为java已经到了微服务的阶段了,会有很多的运维,部署,还需要弹性伸缩性好。所以就有了Docker。
传统的项目要想发个jar包或war时,还得对环境有要求,咱机器上需要装上jdk,tomcat。。。
每个不同的服务,都需要去专业的对待,必须要了解它,你才能整成功。
docker就会把jar或war包+环境配置=整体包,这个整体包就可以做成标准的集装箱。
java可以一次编译,处处运行;docker可以一次打包,处处部署。
docker是go语言实现,基于Linux的虚拟化技术切入的。
Linux系统=内核+文件系统
Linux虚拟化技术=复用原内核+自己定制文件系统
对比传统虚拟机总结
Docker架构
Images镜像就是jar,war或redis,mysql他们打出来的镜像包,其实就是个文件包。这些镜像放到一个数据集里面,把它创建成一个服务包时,他就变成了一个容器(Container)。
Docker基本概念
三个部件:镜像(Image)、容器(Container)、仓库(Repository)
镜像:Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接 从其他人那里下载一个已经做好的镜像来直接使用。
容器:容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互 隔离的、保证安全的平台。
仓库:仓库是集中存放镜像文件的场所。可分为公开仓库(Public)和私有仓库(Private)两种形式。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
我们创建的所有跑的镜像都需要有一个地方来存,像git仓库或maven仓库一样,docker也需要有个仓库来存(镜像仓库)。每一个镜像都可以创建出一个容器,一个镜像可以创建多个容器。如果容器里面有了一些修改,可以按当前容器的模板返回回来做成一个镜像(提交),提交我们一般都不怎么用。
容器、镜像的运行关系
镜像类似Class类,容器类似new对象
镜像总结
Docker的两大技术:1、Linux的容器方面技术 2、docker镜像技术
容器使用
容器是独立运行的一个或一组应用,以及它们的运行态环境
仓库使用
docker官方仓库: https://hub.docker.com
-------- 自由注册,邮件激活
Docker pull/search/login/push/tag
Tag: 标记本地镜像,将其归入某一仓库
Push: 推送镜像到仓库 --需要登陆
Search:在仓库中查询镜像 – 无法查询到tag版本
Pull: 下载镜像到本地
Login:登陆仓库
私有仓库使用
下载registry镜像:
docker pull registry
-----可配置加速器加速下载
启动:
docker run -d --name reg -p 5000:5000 registry
设置http传输:systemctl daemon-reload | systemctl restart docker
docker tag hello-world http://192.168.244.5:5000/hello-world
docker push 192.168.244.5:5000/hello-world
查询:curl http://192.168.244.5:5000/v2/_catalog | http://192.168.244.5:5000/v2/hello-world/tags/list
Docker初体验
安装Docker
1、查询安装过的包
yum list installed | grep docker
docker-engine.x86_64 17.03.0.ce-1.el7.centos @dockerrepo
2、删除安装的软件包
yum -y remove docker-engine.x86_64
3、删除镜像/容器等
rm -rf /var/lib/docker
CentOS7
CentOS7 系统 CentOS-Extras库中已带 Docker,可以直接安装:
$ sudo yum install docker ##不是最新版本
#最新版安装
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docke r-ce.repo
sudo yum install docker-ce
查看docker版本
docker version
docker info
启动docker
sudo service docker start
设置随系统启动
sudo chkconfig docker on
docker run hello-world ##进入 docker 世界
Docker基本操作
容器操作
docker [run|start|stop|restart|kill|rm|pause|unpause]
run/create[镜像名]: 创建一个新的容器并运行一个命令
start/stop/restart[容器名]:启动/停止/重启一个容器
kill [容器名]: 直接杀掉容器,不给进程响应时间
rm[容器名]:删除已经停止的容器
pause/unpause[容器名]:暂停/恢复容器中的进程
docker [ps|inspect|exec|logs|export|import]
ps:查看容器列表(默认查看正在运行的容器,-a 查看所有容器)
inspect[容器名]:查看容器配置元数据
exec -it [容器名] /bin/bash:进入容器环境中交互操作
logs --since=“2019-02-01” -f --tail=10 [容器名]:查看容器日志
cp path1 [容器名]****:path 容器与主机之间的数据拷贝
export -o test.tar [容器名] / docker export [容器名]>test.tar : 文件系统作为一个 tar 归档文件
import **test.tar [镜像名:版本号]😗*导入归档文件,成为一个镜像
镜像操作
docker images|rmi|tag|build|history|save|load]
images:列出本地镜像列表
rmi [镜像名:版本]:删除镜像
tag [镜像名:版本] [仓库]/[镜像名:版本]:标记本地镜像,将其归入某一仓库
build -t [镜像名:版本]
[path]:Dockerfile 创建镜像
history [镜像名:版本]: 查看指定镜像的创建历史
save -o xxx.tar [镜像名:版本] / save [镜像名:版本]>xxx.tar : 将镜像保存成 tar 归档文件
load –input xx.tar / docker load<xxx.tar : 从归档文件加载镜像
history 命令查看镜像层
例:docker history hello-world
查看镜像文件
镜像存放在 imagedb 里 一般在 image/overlay2/imagedb/content/sha256 下
交互式创建容器并进入
docker run -it --name centos centos /bin/bash(前台进程)
------------------------exit 退出也关闭容器; Ctrl+P+Q 退出不关闭容器
后台启动容器:
docker run -d --name nginx nginx
进入已运行的容器:
docker exec -it nginx /bin/bash
查看容器的元数据: docker inspect nginx
绑定容器端口到主机:
docker run -d -p 8080:80 --name nginx nginx:latest
挂载主机文件目录到容器内:
docker run -dit -v /root/peter_dir/:/pdir --name cent centos
复制主机文件到容器内:
docker cp anaconda-ks.cfg cent:/var
数据管理
Dockerfile使用
dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义镜像。
dockerfile的指令分为两种:构建指令和设置指令。构建命令:用于构建镜像的时候执行的,不会在该镜像上的容器里执行。
设置命令:用于设image的属性,将会在运行的容器里执行。
Dockerfile指令集
1 FROM
第一条指令必须为FROM指令,用于指定基础镜像。
2 MAINTAINER
指定维护者信息。
3 RUN
会在shell终端运行命令。
4 EXPOSE
格式为 EXPOSE [ …],声明容器需要暴露的端口号。
-----------镜像启动可以通过 –P 或 -p 进行端口映射的绑定。
5 ENV
指定一个环境变量,可以被后续的RUN引用,并且在容器中记录该环境变量。
6 ADD
该命令将复制指定的到容器中的。
-------其中可以是Dockerfile所在目录的一个相对路径;也可以是tar文件(自动解压)。
7 VOLUME
格式为 VOLUME [path]。
--------创建一个可以从本地主机或其他容器挂载点,一般用来存放需要保持的数据。
8 USER
指定运行容器时的用户名,后续的RUN也会指定该用户。
9 WORKDIR
指定工作空间,后续命令都在此目录下执行。
10 CMD
的绑定。
5 ENV
指定一个环境变量,可以被后续的RUN引用,并且在容器中记录该环境变量。
6 ADD
该命令将复制指定的到容器中的。
-------其中可以是Dockerfile所在目录的一个相对路径;也可以是tar文件(自动解压)。
7 VOLUME
格式为 VOLUME [path]。
--------创建一个可以从本地主机或其他容器挂载点,一般用来存放需要保持的数据。
8 USER
指定运行容器时的用户名,后续的RUN也会指定该用户。
9 WORKDIR
指定工作空间,后续命令都在此目录下执行。
10 CMD
11 ENTRYPOINT