Docker是一个虚拟化的平台(官网为http://www.docker.com/),由Go语言实现.可通过虚拟化的方式,为应用提供可运行的容器.基于这种方式 可更快的打包.测试以及部署应用程序.
现阶段,很多应用软件的安装都在向基于docker方式的安装进行实现。例如mysql,那么为什么不直接在操作系统中安装一个mysql,而是用容器呢?因为,安装MySql过程并不简单,要配置安装源,安装依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍,但有了docker,一个安装配置好的mysql容器,可以直接拿到另一台主机上启动,而不必重新安装mysql。另外,docker还有一重要的用处,就是可以保证开发,测试和生产环境的一致.
Docker的核心对象 镜像(Image)Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如JDK镜像、Centos镜像、MySQL镜像等,可以暂时先将其理解为一个安装程序。
容器(Container)Docker容器可以将其理解为一个运行镜像的载体,镜像(Image)和容器(Container)的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。
Docker架构图- Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
- Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中
- Docker Daemon是docker的服务线程,处理Docker客户端命令。
- Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。
systemctl start docker
查看docker状态systemctl status docker
设置docker开机自启systemctl enable docker
禁用docker开机自启systemctl disable docker
重新启动docker服务systemctl restart docker
查看docker信息docker info
查看docker info 中具体key的信息docker info | grep 'Docker Root Dir'
停止docker服务systemctl stop docker
docker镜像加速由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json
下面命令直接生成文件 daemon.json
Docker镜像操作cat <
/etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
1. 下载镜像 docker pull 镜像名
2. 浏览镜像文件 docker images
3. 查看镜像详情 docker inspect 镜像名/ID
4. 查看历史镜像 (一个镜像是由多个层组成的 获取具体内容) docker history 镜像名
5. 导出镜像文件(Linux系统中的镜像文件下载到本地) docker save hello-word | gzip > hello-woed.tar.gz
6. 删除镜像文件 docker image rm 镜像名
7. 导入镜像操作(需要在镜像所在的文件下目录下执行) docker load < 镜像文件
8. 运行镜像文件 docker run 镜像名
Docker容器的常用操作1. 先下载镜像Centos 目前使用是 7 docker pull centos:7 (官方的镜像地址为https://hub.docker.com/)
2. 查看镜像 docker images
3. 创建并启动容器 docker run -it xxx bash (xxx为镜像名 或者images前三位 -it表示两个参数-i表示交互式操作,-t表示终端 bash表示进入操作终端,基于交互式进行相关操作)
4. 通过docker启动运行centos7镜像 docker run -it centos:7 bash
5.查看docker中运行的容器 docker ps
6. 查看docker 运行中的所有容器 docker ps -a
7.查看容器日志 docker container logs 容器id
8. 停止运行的容器 docker container stop 容器id
9. 重启容器 docker container restart 容器id
10. 进入指定容器 docker exec -it 容器id bash
11. 从容器中退出 exit
12. 删除容器 docker container rm 容器id
13.删除 运行中的容器 docker container rm -f 容器id
14. 清理所有终止状态的容器 docker container prune
Docker数据管理 一.数据卷数据卷是一个可以提供一个或者多个容器使用的特殊目录, 可以在容器之间共享和重用 默认一直存在 即使容器被删除
二.数据卷常用操作1. 创建数据卷 docker volume create container-vol
2. 查看所有的数据卷 docker volume ls
3. 查看指定数据卷的信息 docker volume inspect container-vol
4. 启动挂载数据卷的容器 docker run -it -v container-vol:/root centos:7 bash
5. 删除数据卷 (如果数据卷被容器使用则无法删除) docker volume rm container-vol
6.清理无主数据卷 docker volume prune
三. 挂载主机目录1. 在容器启动时 以目录直接挂载的方式进行数据操作 docker run -it -v /usr/app:/opt/app centos:7 bash
2. 查看挂载目录信息 docker inspect 容器id
Dcokerfile 镜像制作 镜像制作分析 制作jdk镜像- centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像,就类似通过一个空的光盘或u盘创建一个系统启动盘是一样的)
- jdk压缩包 jdk-8u51-linux-x64.tar.gz(可以从课前资料获取),基于此压缩包,制作jdk镜像。
创建每个新的镜像时都需要Dockerfile文件 需要跟导入的jdk放在同一目录
1. vim Dockerfile
创建jdk镜像文件FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
1.docker build -t jdk:8 . 不要丢掉 . -t表示镜像标识(镜像名) 是tag的缩写
基于jdk启动sentinel1. 将sentinel复制到宿主机的目录
2. 基于jdk:8 镜像启动运行sentinel服务
docker run -d -p 8180:8080 --name sentinel
-v /root/servers:/usr/sca
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
-d 表示后台运行 -p表示实现端口映射 (假如外部需要访问这个容器,必须要做端口映射)
-name 表示为启动的容器起一个名字
查看日志信息 docker container logs 容器id/容器名
3.访问sentinel需要通过宿主机访问 不可以直接访问 所以需要做端口映射
制作sentinel镜像说明,通过docker images指令查看centos:7是否存在,然后将 jdk-8u51-linux-x64.tar.gz,sentinel-dashboard-1.8.0.jar放在/root/setup/sentinel目录(目录不存在的话自己创建)
在sentinel所在的目录下创建Dockerfile文件
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/
ADD sentinel-dashboard-1.8.0.jar /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51
PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]
在Dockerfile文件所在的目录执行 docker build -t sentinel:8 .
后台运行sentinel docker run -d --name sentinel8181 -p 8181:8080 sentinel:8



