Docker
""
Docker
为什么要使用Docker
企业环境中存在的某个痛点
企业使用一项技术是为了解决当前企业环境中存在的某个痛点,目前行业存在以下几个痛点:
- 软件更新发布及部署低效,过程繁琐需要人工介入
- 环境一致性难以保证
- 不同环境之间迁移成本太高。
Docker能解决的问题
Docker的使用十分简单,从开发的角度来看就是三步:构建、运输、运行。
其中关键是构建步骤,即打包镜像文件。但是从测试和运维的角度来看,就只有两步:复制、运行。有了这个镜像文件,在哪里运行都可以,和平台无关。
Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源,不需要考虑应用之间的相互影响。
其次,因为在构建镜像时就处理完了服务程序对于系统的所有依赖,所以在使用时,可以忽略原本程序的依赖以及开发语言。对测试和运维人员而言,可以更专注于自己业务内容。
最后,Docker为开发者提供了一种开发环境的管理办法,帮助测试人员保证环境的同步,为运维人员提供了可移植的标准化部署流程。
Docker简介
Docker是一种运行与Linus和Windows上的软件,用于创建、管理和编排容器。
Docker引擎
Docker引擎可以从Docker网站下载,也可以基于GitHub上的源码进行构建,无论是开源版本还是商业版本,都有Linux和Windows版本
Docker引擎有两个版本:企业版EE和社区办CE。
每个季度,企业版和社区版都会发布一个稳定版本。社区版会提供 4 个月的支持,而企业版本会提供 12 个月的支持。
Docker官网
https://www.docker.com/
安装Docker
1 . 查看内核版本
linux操作系统Centos7,linux 3.10内核,docker指名至少要3.8以上,(ubuntu下要linux内核3.8以上)
在linux操作系统终端中输入:
uname -a
安装Docker
https://www.runoob.com/docker/ubuntu-docker-install.html
Docker的中央仓库
Docker中央仓库,就是存放镜像的网站
官网
镜像最全,但是下载速度慢
https://hub.docker.com/
网易蜂巢
http://c.163.com/hub
daoCloud(推荐)
http://hub.daocloud.io/
搭建私服
1. 修改注册文件
修改/etc/docker/daemon.json文件,若文件不存在,则手动创建。
添加内容如下
{
"registry-mirrors":["https://docker-cn.com"],
"insecure-registries":["ip:port"]//替换相应的ip和端口号
}
2. 重启服务
systemctl daemon-reload
systemctl restart docker
Docker镜像操作
拉取镜像到本地
docker pull 镜像名称[:tag]
如:
docker pull daocloud.io/library/tomcat:8.5.15-jre8
查看全部本地的镜像
docker images
删除本地镜像
docker rmi 镜像的标识
删不掉就是里面有东西
docker ps -a //查看镜像状态
docker rm 标志 //删除
docker rmi 标志 //删除镜像
导入导出
将本地镜像导出
pwd //查看当前路径
docker save -o 导出的路径 镜像id
加载本地的镜像文件
docker load -i 镜像文件
修改镜像名称
docker tag 镜像id 新镜像名称:版本
Docker容器操作
运行容器
docker run 镜像标识[:tag]
常用参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识名称[:tag]
- -d:代表后台运行
- -p:宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
- --name 容器名称 :指定容器的名称
查看运行结果
当容器中运行了tomcat的docker后,可以在浏览器中访问了
首先在Ubuntu中安装net-tools
sudo apt install net-tools
然后查看ip地址
sudo ifconfig
结果:有ip4地址。
inet 192.168.150.128 netmask 255.255.255.0 broadcast 192.168.150.255
因为已经端口映射了,所以直接在浏览器访问:
192.168.150.128:8080
就可以访问tomcat官网
查看正在运行的容器
docker ps [-qa]
- -a :查看全部的容器,包括没有运行的
- -q:只查看容器的标识
查看容器的日志
docker logs -f 容器id
进入到容器内部
docker exec -it 容器id bash
删除容器
删除容器前,需要先停止容器
## 停止指定的容器
docker stop 容器ID
##停止全部容器
docker stop $(docker ps -qa)
##删除指定容器
docker rm 容器ID
##删除全部容器
docker rm $(docker ps -qa)
##启动容器
docker start 容器ID
创建MySQL容器
创建MySQL镜像
docker pull daocloud.io/library/mysql:5.7.5-m15
查看MySQL镜像
docker images
创建MySQL容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql 镜像tag
测试
Docker 数据卷
如果每次更新项目都要把项目放入容器中,未免太过于麻烦。
所以就有:数据卷。
数据卷:将宿主主机的一个目录,映射到容器的一个目录中,可以在宿主主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。
创建数据卷
docker volume create 数据卷名称
## 创建数据卷之后,默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
查看数据卷的详细信息
docker volume inspect 数据卷名称
查看全部数据卷
docker volume ls
删除数据卷
docker volume rm 数据卷名称
应用数据卷
当你映射数据卷时,如果数据卷不存在。Docker会帮你自动创建,会将容器内部自带的文件,存储在默认的存放路径中。
docker run -v 数据卷名称:容器内部的路径 镜像id
## 直接指定一个路径作为数据卷的存放位置,这个路径下是空的
docker run -v 路径:容器内部的路径 镜像id
Docker file
Dockerfile
是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用的任何命令。Docker通过读取Dockerfile中的指令自动生成映像。
docker build
命令用于从Dockerfile构建映像。可以在docker build
命令中使用-f 标志指向文件系统中任何位置的Dockerfile
例如:
docker build -f /path/to/a/Dockerfile
Dockerfile基本结构
一般分为四部分:
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
Dockerfile文件说明
Docker以从上到下的顺序运行Dockerfile的指令,为了指定基本映像,第一条指令必须是FROM。一个声明以##字符开头则被视为注释。可以在Dockerfile中使用 RUN,CMD,FROM,EXPOSE,ENV等指令。
列出一些常用的指令:
FROM:指定基础镜像,必须为第一个命令
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
例: FROM mysql:5.6
MAINTAINER:维护者信息
格式: MAINTAINSE <name>
例: MAINTAINER Jasper Xu
MAINTAINSE sore@163.com
MAINTAINER Jasper Xu <sorex@16.com>
RUN:构建镜像时执行的命令
RUN 用于在镜像容器中执行命令,其有两种执行方式
RUN <command>
RUN ["executable","param1","param2"]
Docker自定义镜像
其后还有 docker-compose