Docker技术
**目标:**操作一个tomcat镜像,实现容器化,宿主机挂载执行war包
内容:
- 1、基本docker技术简介
- 2、docker与传统的vm对比
- 启动速度
- vm 一般几十秒 或者几分钟
- docker 几秒 或者几十毫秒
- 大小
- vm 几个G 几十G
- docker mb级别,最大也就是一两个G
- 启动速度
-
3、docker组成
- 1、镜像仓库
- 2、镜像
- 3、容器
- 4、docker操作
1、docker进程相关操作
root sq
#1- 查看docker 版本
docker -v
#2- 查看docker 命令
docker --help
#3- 查看docker 服务端与客户端版本详情
docker version
#4- 启动docker进程
systemctl start docker
#5- 关闭docker
systemctl stop docker
#6- 重启docker
systemctl restart docker
#7- 查看docker运行状态
systemctl status docker
#8- 关闭防火墙
systemctl stop firewalld #disable
2、镜像操作
#镜像--容器的模板--打包好的---静态的概念--使用的时候请创建容器
#1- 查看镜像---本地的
docker images
#2- 搜索镜像--首先本地 --默认的地址
docker search tomcat
#3- 删除镜像
docker rmi 镜像名称 # rmi表示 rm images
#4- 找到所有的镜像--拉取 pull
docker pull tomcat #最新版本
docker pull tomcat:7#最新版本
#5- 本地有了镜像--可以创建容器
#根据tomcat镜像,创建一个myTomcat容器
docker create --name=myTomcat tomcat
#6- 查看容器
docker ps #查看在运行的容器
docker ps -a#查看所有的容器
#7- 运行容器
docker start myTomcat #start 后面可以跟 容器的id(前2-3位) 或者 name
#8- 停止容器
docker stop myTomcat #start 后面可以跟 容器的id(前2-3位) 或者 name
#9- 删除没有运行的容器
docker rm 容器id或者名字
#10- 删除在运行的容器
docker rm -f 容器id或者名字
#11- 删除所有的容器
#启动所有的容器
docker start $(docker ps -a -q) #(-a表示all,表示所有)
#先停止所有的容器
docker stop $(docker ps -a -q)
#删除
docker rm $(docker ps -a -q)
#全部强制删除
docker rm -f $(docker ps -a -q)
3、运行容器的一些操作
#1- 查看docker run 命令---创建并且启动容器
docker run --help
docker run 后面的参数
-i #运行容器 (创建并运行容器)
-t #容器启动后,进入命令行 (进入容器内部)
-v #目录映射--挂载
-d #守护进程--后台运行
-p #端口映射 如果容器里有tomcat ,你本机的windows想访问:
#docker tomcat 端口号是8080,需要在虚拟机映射一个端口 9099
#windows才可以访问 http://虚拟机的ip:9099
#2- 创建容器,并且进入命令行---进入容器
docker run -it --name=myTomcat tomcat /bin/bash #/bin/bash 固定写法,进入容器命令行模式
#3- 退出
exit #容器已经退出
#4- 有没有一起启动方法,不退出容器
#创建运行一个守护的容器
docker run -id --name=myTomcat2 tomcat
#进入
docker exec -it myTomcat2 /bin/bash
**4、**宿主机与docker容器的文件传递
#1- 在宿主机创建一个文件
touch xt.txt
#2- 把改文件复制到容器里去
docker cp xt.txt myTomcat2:/ #cp相当于copy,copy文件xt.txt到myTomcat2的根目录里去
#3- 进入根目标
cd /
#查看
ls
#1- 怎么从容器中的文件copy 到宿主机里
touch abc.txt
#2- 退出容器
exit
#3-
docker cp myTomcat2:/abc.txt /root
5、访问tomcat
#启动并且作为守护进程
#-p 宿主机的端口:容器里应用的端口 8080
#war挂载宿主机 -v 宿主机的路径:容器路径 路径会新建
docker run -di --name=myTomcat -p 8080:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat
http://虚拟机ip:9999
#2- 把war包放到宿主机的挂载目录里 ,直接刷新浏览器就出现项目的页面
#微服务 k8s 容器式的性能测试
#启动容器时关联其他容器 mysql独立的容器(给下账号密码。默认是root)
docker run -di --name=tomcat2 -p 8080:8080 --link mysql --link redis --link rabbitmq
docker logs命令
docker logs [options] 容器
获取容器的日志。
名字 | 默认值 | 描述 |
---|---|---|
–details | 显示提供给日志的额外细节 | |
–follow或-f | 按日志输出 | |
–since | 从某个时间开始显示,例如2013-01-02T13:23:37 | |
–tail | all | 从日志末尾多少行开始显示 |
–timestamps或-t | 显示时间戳 | |
–until | 打印某个时间以前的日志,例如 2013-01-02T13:23:37 |
例如打印容器mytest
应用后10行的内容
docker logs -f --tail 10 a4dac74d48f7
通过docker logs命令可以查看容器的日志。
docker logs -f -t --tail 100 datacenter
命令格式:
$ docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子:
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
Docker 加速
默认情况下,docker下载镜像是从官网下载,下载速度特别特别的慢。使用阿里云加速器可以提升获取Docker官方镜像的速度。
-
在指定目录创建文件(如已存在请忽略此步):
$ touch /etc/docker/daemon.json
-
修改文件内容为:
{ "registry-mirrors": ["https://v2c6fjn8.mirror.aliyuncs.com"] }{ "registry-mirrors": ["https://v2c6fjn8.mirror.aliyuncs.com"] }
注意:此网址是从阿里云控制台复制过来的,每个登录用户都不一样。当然用上面的这个地址也可以。
-
重启docker服务
$ systemctl restart docker
扩展
1、镜像备份
#把tomcat镜像打包成文件,
docker save -o tomcat.tar tomcat # save保存,-o后面放置宿主机的路径(可以从根目录开始),最后面为容器名称
#把tomcat.tar放到其他电脑,其他人变成镜像使用(加载恢复)
docker load -i tomcat.tar
2、时间同步问题
需要把宿主机的时间同步到容器内部,因为最后通过Jenkins生成的log和日志,都是使用的容器内部的时间节点
宿主机linux查看时间
[root@localhost etc]# date
2020年 12月 06日 星期日 04:38:43 CST
时区是对的,只是时间不对
安装ntp
yum install ntp #安装ntp服务
同步阿里时间
ntpdate ntp1.aliyun.com
注意事项:
- 可能网络会断开,请重新reboot下linux
- 虚拟机的ip可能会改变
3、轻量级图形页面管理之portainer
portainer docker ui 页面的
dockerUI
1.查看portainer镜像
[root@localhost ~]# docker search portainer
2.选择喜欢的portainer风格镜像,下载
[root@localhost ~]# docker pull portainer/portainer
3.启动dockerui容器
[root@localhost ~] docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
4、浏览器访问 http://你虚拟机的ip:9000, 设置一个密码即可,点击创建用户 密码要8位以上
5、我们搭建的是单机版,进入页面直接选择Local ,点击连接
4、docker logs命令
docker logs [options] 容器
获取容器的日志。
名字 | 默认值 | 描述 |
---|---|---|
–details | 显示提供给日志的额外细节 | |
–follow或-f | 按日志输出 | |
–since | 从某个时间开始显示,例如2013-01-02T13:23:37 | |
–tail | all | 从日志末尾多少行开始显示 |
–timestamps或-t | 显示时间戳 | |
–until | 打印某个时间以前的日志,例如 2013-01-02T13:23:37 |
例如打印容器mytest
应用后10行的内容
docker logs -f --tail 10 a4dac74d48f7
通过docker logs命令可以查看容器的日志。
docker logs -f -t --tail 100 datacenter
命令格式:
$ docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子:
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID