Docker技术(CI流程:持续集成)

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官方镜像的速度。

  1. 在指定目录创建文件(如已存在请忽略此步):

    $ touch /etc/docker/daemon.json
    
  2. 修改文件内容为:

    {
      "registry-mirrors": ["https://v2c6fjn8.mirror.aliyuncs.com"]
    }{
      "registry-mirrors": ["https://v2c6fjn8.mirror.aliyuncs.com"]
    }		
    

    注意:此网址是从阿里云控制台复制过来的,每个登录用户都不一样。当然用上面的这个地址也可以。

  3. 重启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

上一篇:Docker培训计划


下一篇:解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid