使用docker说明指南 docker


docker, 固定静态ip,save,load, 服务开机启动:  https://abc.htmltoo.com/thread-46536.htm

centos7安装rancher1,搭建统一开发环境:  https://abc.htmltoo.com/thread-34914.htm

centos7安装rancher2,搭建统一开发环境:  https://abc.htmltoo.com/thread-45073.htm

rancher2使用说明:  https://abc.htmltoo.com/thread-46088.htm

RancherD说明指南:https://abc.htmltoo.com/thread-46121.htm

Podman 部署 - 新一代容器工具:   https://abc.htmltoo.com/thread-46126.htm

Docker本机镜像仓库搭建,镜像界面管理:  https://abc.htmltoo.com/thread-45169.htm

rancher部署分类应用,以及导出配置文件:  https://abc.htmltoo.com/thread-44930.htm

rancher安装容器管理: portainer:  https://abc.htmltoo.com/thread-312.htm

rancher 1.6版本升级,以及禁用密码操作:  https://abc.htmltoo.com/thread-45045.htm

CentOS7,Ubuntu安装Docker-CE:  https://abc.htmltoo.com/thread-45069.htm

docker-compose安装:  https://abc.htmltoo.com/thread-45046.htm

Ansible-playbook安装docker: https://abc.htmltoo.com/thread-45925.htm

debian,ubuntu安装docker:  https://abc.htmltoo.com/thread-46064.htm

docker启用GPU加速计算(显卡,gpu):  https://abc.htmltoo.com/thread-46845.htm

# 使用官方安装脚本自动安装 (仅适用于公网环境)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
# 国内 daocloud 一键安装命令
curl -sSL https://get.daocloud.io/docker | sh
systemctl stop firewalld     # 停止firewalld服务   
systemctl mask firewalld     # 禁用firewalld服务

# 创建docker组
groupadd docker
# 把当前用户加入docker组
usermod -aG docker admin
# 添加用户(可选)
useradd -d /home/admin -m admin
# 为新用户设置密码
passwd  admin
# 为新用户添加sudo权限
echo 'admin ALL=(ALL)  NOPASSWD:ALL' >> /etc/sudoers

su admin

# 安装网络yum源
yum -y install epel-release
yum clean all
# 安装依赖环境
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --enable extras 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 国内docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# centos8 安装依赖:  https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/Packages/
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/Packages/containerd.io-1.4.13-3.1.el8.x86_64.rpm

# 查询可安装的版本
-按版本号(从高到低)对结果进行排序
yum list docker-ce --showduplicates | sort -r

#7
yum makecache fast
#8
yum makecache timer

#安装指定版本
yum install -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io

# 安装 Docker
yum -y install docker-ce  docker-ce-cli containerd.io  docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin

systemctl stop docker
rm -rf /var/lib/docker
systemctl daemon-reload
systemctl start docker

mkdir -p /etc/docker/

# 国外
cat >> /etc/docker/daemon.json<<EOF    
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "max-concurrent-downloads": 5,
  "max-concurrent-uploads": 3,
  "insecure-registries": ["hub.htmltoo.com:5000"],
  "storage-driver": "overlay2",
  "experimental" : true,
  "iptables": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "5m",
    "max-file": "3"
    }
}
EOF

# 国内
cat >> /etc/docker/daemon.json<<EOF    
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["http://hub-mirror.c.163.com"],
  "max-concurrent-downloads": 5,
  "max-concurrent-uploads": 3,
  "insecure-registries": ["hub.htmltoo.com:5000"],
  "storage-driver": "overlay2",
  "experimental" : true,
  "iptables": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "5m",
    "max-file": "3"
    }
}
EOF

"exec-opts": ["native.cgroupdriver=systemd"],             # K8S,推荐
"registry-mirrors": ["http://hub-mirror.c.163.com"],      # 国内服务器启用加速
"registry-mirrors": ["https://66tg5ksn.mirror.aliyuncs.com"],   使用阿里云加速器可以提升获取Docker官方镜像的速度
"max-concurrent-downloads": 5,
"max-concurrent-uploads": 3,
"insecure-registries": ["hub.htmltoo.com:5000"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],  # 如果是CentOS7或者RedHat7内核在3.10.0-693以下的
"log-driver": "json-file",
"log-opts": {
    "max-size": "5m",
    "max-file": "3"
    }
# 多个私有镜像仓库
"insecure-registries":["hub.htmltoo.com:5000","hub.htmltoo.com:5200"],
# 通配表示所有http协议仓库
"insecure-registries": ["0.0.0.0/0"]


# 登陆凭证密码
cat /root/.docker/config.json
{
	"auths": {
		"hub.htmltoo.com:5200": {
			"auth": "YWRtaW46V2RxNTQzMjE="
		},
		"registry.cn-zhangjiakou.aliyuncs.com": {
			"auth": "YWRvbmdxdWFubkBhbGl5dW4uY29tOldkcTU0MzIx"
		}
	}
}

# 阿里云容器管理
https://cr.console.aliyun.com/

例:
cat >> /etc/docker/daemon.json<<EOF
{    
"max-concurrent-downloads": 1,
"max-concurrent-uploads": 1,
"insecure-registries": ["hub.htmltoo.com:5000"],
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
   "max-size": "5m",
   "max-file": "3"
   }
}
EOF

cat >> /etc/docker/daemon.json<<EOF
{    
"registry-mirrors": ["https://66tg5ksn.mirror.aliyuncs.com"],
"log-driver": "json-file",
"log-opts": {
   "max-size": "5m",
   "max-file": "3"
   }
}
EOF

-com
cat >> /etc/docker/daemon.json<<EOF
{
  "registry-mirrors": ["https://66tg5ksn.mirror.aliyuncs.com"],
  "experimental" : true,
  "iptables": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "5m",
    "max-file": "3"
    }
}
EOF

systemctl daemon-reload
systemctl start docker
systemctl enable docker # 开机自动启动docker
systemctl restart docker # 重启dokce   #docker run hello-world #测试运行 hello-world
ps -ef | grep docker   # 验证进程

# 验证加速器是否生效
docker info | grep Mirrors -A1
docker  # 查看到 Docker 客户端的所有命令选项
docker command --help   # 更深入的了解指定的 Docker 命令使用方法 如查看docker stats 指令: docker stats --help
docker version # 查看版本

数据库:
mysql -A -uroot -pwdqdmm;
grant all on *.* to 'ihunter'@'%' identified by 'wdqdmm';
flush privileges;

备份:
mysqldump -uroot -p* new_ecshop > /data/file/backup/...;
mysqldump -uroot -p* --all-databases > /data/file/backup/...;
还原:
mysql -A -uroot -p*;
use database_name;  #database_name 替换成需要还原的数据库
source /data/file/backup/...; #选择备份数据对应路径即可完成

#docker磁盘垃圾清理, docker完全卸载

https://abc.htmltoo.com/thread-46610.htm

#docker与firewalld冲突解决:

https://abc.htmltoo.com/thread-46600.htm

#docker - 根据overlay2文件名查找容器

https://abc.htmltoo.com/thread-46599.htm

#docker的存储文件迁移

https://abc.htmltoo.com/thread-46667.htm

#docker 拉取超时, 配置代理

https://abc.htmltoo.com/thread-46854.htm

#docker: 容器互连时访问宿主机出现"No route to host"

https://abc.htmltoo.com/thread-46855.htm


Docker容器使用

docker pull training/webapp  # 载入镜像
docker run -d -P training/webapp python app.py
参数说明:  -d:让容器在后台运行。-P:将容器内部使用的网络端口映射到我们使用的主机上
docker ps  # 查看我们正在运行的容器
PORTS 
0.0.0.0:32769->5000/tcp
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。通过主机ip:32769访问.
我们也可以指定 -p 标识来绑定指定端口。docker run -d -p 5000:5000 training/webapp python app.py
docker top determined_swanson  # 查看WEB应用程序容器的进程
docker stop determined_swanson # 停止WEB应用容器
docker start  determined_swanson # 重启WEB应用容器
docker ps     # 查看我们正在运行的容器
docker ps -l  # 查询最后一次创建的容器
docker restart determined_swanson  # 正在运行的容器,我们可以使用重启
docker logs [ID或者名字]  # 查看WEB应用程序日志 -f:让 dokcer logs 像使用 tail -f 一样来输出容器内部的标准输出。
docker ps -as # 查看全部container,包括exited的容器,并列出容器的大小
docker rm determined_swanson       # 删除不需要的容器,容器必须是停止状态,否则会报如下错误
docker rmi  images # 删除镜像
docker rm -f -v $(docker ps -aq) # 删除所有容器,并删除容器挂载的数据卷
docker volume rm $(docker volume ls)   # 删除所有数据卷
/var/lib/docker/containers/{container_id}/{container_id}.log    # docker logs 日志存储,占空间大记得清理: 
docker inspect determined_swanson # 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
docker inspect 容器ID或容器名 |grep '"IPAddress"'  # 查看容器IP的查方法
docker run -d nginx  # d => daemon  后台运行
docker run -d -p 8080:80 -v $PWD/html:/usr/share/nginx/html nginx # -v 就是挂载参数 # $PWD shell命令,输出当前目录的绝对地
docker exec -it 0b234366c3d2 /bin/bash  # service nginx reload # 进入容器,用:ctrl + p + q来退出容器
docker cp host_path containerID:container_path  # 从主机拷贝复制到容器
docker cp containerID:container_path host_path # 从容器拷贝复制到主机
docker container update --restart=always  containerName  # 设置容器自动启动

# 以特权模式运行容器,解决Failed to get D-Bus connection:
docker run --name centos7 --privileged=true -v /date:/date -d centos:latest /usr/sbin/init
# 提交本地新镜像:
docker commit -m="centos7 update" -a="cndo.org" bfcd8bc28015 docker.io/centos:20180406
# 使用我们的新镜像 docker.io/centos:20180406 来启动一个容器
docker run -t -i docker.io/centos:20180406 /bin/bash
# 定时执行滚动操作:
* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh

# docker之间导出,导入镜像:  
-导出 export - 导入 import
-使用 docker images 查看本机已有的镜像 
docker export CONTAINER(容器) > /home/myubuntu-export-1204.tar 
docker import  /home/myubuntu-export-1204.tar                  # 使用 import 导入
docker import  /home/myubuntu-export-1204.tar  duo:app-0.0.2   # 指定镜像的REPOSITORY、TAG

# 保存save - 加载 load
格式:docker save IMAGE(镜像)   # 使用 docker images 查看本机已有的镜像
---   
docker tag hub.htmltoo.com:5000/tools:ssh  app:ssh
docker save -o /data/site/htmltoo.f/htmltoo.up/soft/docker.tar/ssh.tar app:ssh
docker save -o /data/site/htmltoo.f/htmltoo.up/soft/docker.tar/ssh.tar hub.htmltoo.com:5000/tools:ssh
---
docker save 9610cfc68e8d > /home/myubuntu-save-1204.tar  
docker load < /opt/ssh.tar 

# 镜像save 导出 和load上载
docker save -o 要保存文件名 镜像名
-docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
docker save mysql:5.7.19 -o mysql:5.7.19.tar  
docker rmi mysql:5.7.19
docker load -i mysql:5.7.19.tar

# privileged, pid, user
docker run -d --restart=always --privileged=true --pid=host  --user 0 
docker run -d --restart=always --privileged=true --pid=host  --user 0 -p 8080:8080 -p 50000:50000 -v /home/dqx/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime:ro -v /var/run/docker.sock:/var/run/docker.sock  -v /usr/bin/docker:/bin/docker -v /home/dqx/jars:/home/dqx/jars jenkins/jenkins:lts
 -d       --restart=always   --privileged=true   --pid=host     --user 0 or --user root
后台运行,  自动重启,          主机完全访问,        PID模式-主机,   用户root

# 查看网络信息
docker network ls
--link指定容器名称进行不同容器间的通信
--link=php:php 
#创建一个网络名为net且driver为bridge的网络:(默认创建的就是bridge)
docker network create net
#利用--network启动容器提供服务, --network-alias将取名的net起了一个别名
--name=php --network net --network-alias php

-导入异常,No command specified.  加上/bin/bash
docker run -d --net=host --name tcp --restart=always -v /usr/local/etc/tcp.txt:/etc/nuster/nuster.cfg:ro tcp /bin/bash
touch -d "2000-01-01 00:00" /usr/local/etc/tcp.txt

# docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
查看所有容器ip
# docker stats 实时监控资源数据统计
docker stats  # 查看docker状态, 每个容器实时数据流
docker stats --no-stream   # 只输出当前的状态
docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"  # 格式化输出
docker stats [container] 

默认情况下,stats 使用参数-a或者--all,命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:
[CONTAINER]:以短格式显示容器的 ID。
[CPU %]:CPU 的使用情况。
[MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。
[MEM %]:以百分比的形式显示内存使用情况。
[NET I/O]:网络 I/O 数据。
[BLOCK I/O]:磁盘 I/O 数据。 
[PIDS]:PID 号。

# 获取容器的日志
docker logs [OPTIONS] cname
  -f : 跟踪日志输出
  --since :显示某个开始时间的所有日志
  -t : 显示时间戳
  --tail :仅列出最新N条容器日志
---跟踪查看容器mynginx的日志输出。
docker logs -f nginx
---查看容器mynginx从2023年1月1日后的最新10条日志。
docker logs --since="2023-01-01" --tail=10 nginx
---指定结束时间点,使用选项 --until,显示二者之间的日志
docker logs --since 2018-09-25T12:01:48.551341Z --until 2018-09-25T12:01:48.561714Z nginx
---最新nginx的30条日志
docker logs -f --tail="30" nginx
---查找包含 “error” 的log:
docker logs -f --tail="30" nginx | grep error
---error日志都写到指定文件
docker logs -t nginx | grep error >> logs_error.txt

#挂载主机时区
-v /etc/localtime:/etc/localtime

#查看所有容器名称,ip
docker inspect --format='{{.Name}} => {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

---注意,一定要先停止docker服务,否则修改不会生效
#忘记映射端口号
---查看容器ID号
docker ps
---关闭容器
docker stop redis
---进入该容器的挂载位置
cd /var/lib/docker/containers/f43e2f0edd2d5e92714feaf4419172e9d0e2e4db5dcd324b5251bf3eff138783/
---修改配置文件
vi hostconfig.json
原始是这个样子:"PortBindings":{},
修改成"PortBindings":{"6379/tcp":[{"HostIp":"","HostPort":"6379"}]},
前面的6379是容器内部的端口号,后面的是要映射出去的端口号,如果是修改端口号,那就更简单,直接修改数字即可
"NetworkMode":"host","PortBindings":{}
"NetworkMode":"default","PortBindings":{"7777/tcp":[{"HostIp":"","HostPort":"7778"}]}
---重启docker
systemctl restart docker
docker start redis
#在运行的容器中执行命令
-交互模式执行容器内 /root/runoob.sh 脚本:
docker exec -it php  /bin/sh /root/runoob.sh
-通过 exec 命令对指定的容器执行 bash:
docker exec -it php  /bin/bash
docker exec -it rname /bin/sh
-d:分离模式: 在后台运行
docker exec -d php supervisorctl restart app

#--link实现两个容器互连
--link 数据库容器名:数据库容器别名
--link mariadb:mysql
-别名命名为mysql,这样在这两个容器里就可以使用“mysql”来作为提供mysql数据库服务的机器名

#指定hostname
--hostname db01
#指定ip
--ip 172.17.0.10 
#指定网络类型
--network
#network所有的子命令
docker network ls   #列出网络
docker network prune  #删除所有未使用的网络
docker network create mynet  #创建一个网络 
docker network connect net1 ctn1 #将运行中的容器ctn1 连接/断连 到网络net1中
docker network rm  mynet         #删除一个或多个网络
docker network disconnect net1 ctn1  #将运行中的容器ctn1 连接/断连 到网络net1中
docker network inspect mynet     #显示一个或多个网络的详细信息
docker network connect --ip 192.168.10.10 net1 ctn1  # 给容器分配指定ip(192.168.10.10)
#使用--link实现两个容器互连,在启动my-ctn2容器时,建立my-ctn1和my-ctn2容器间的连接
docker network connect --link my-ctn1 my-ctn2
#只有使用--subnet创建的网络才能指定静态IP
docker network create --driver bridge --subnet 172.19.0.0/24 --gateway 172.19.0.1 mynet

#配置容器中的host
---命令行配置
--add-host 使用该参数可以配置多个host.--add-host参数最好在--name后面,避免启动报错
docker run -it --add-host host1:192.168.1.1 --add-host host2:192.168.1.2 
---docker-compose配置
extra_hosts:
  - host1:192.168.1.1
  - host2:192.168.1.2
  
#sysctl
--sysctl="net.ipv4.conf.all.src_valid_mark=1"   --sysctl="net.ipv4.ip_forward=1"
--sysctl="net.ipv6.conf.all.disable_ipv6=1"  --sysctl="net.ipv6.conf.default.disable_ipv6=1"
#自建docker网络冲突配置
-由于docker本身是默认使用B类地址(172.xx.0.0/16),大部分情况下会和公司网络产生冲突。
-为了解决这个问题,需要在/etc/docker/daemon.json中增加 "bip":"172.17.0.1/24" 指定容器使用的网络。
{
    "bip": "172.17.0.1/24",
}
#设置 镜像、容器、卷 存放目录和驱动
"graph": "/mnt/docker-data",
"storage-driver": "overlay",
#查看容器的挂载目录
docker inspect rid |grep Mounts -A 20
#docker启动命令查看, runlike工具可以用来打印docker容器的启动命
yum -y install python3
yum -y install python3-pip
apt-get install -y python3 python3-pip python3-simplejson
-升级
pip3 install -U pip -i https://mirrors.aliyun.com/pypi/simple/   --break-system-packages
pip3 install -U pip
pip3 install -U pip --break-system-packages
pip3 -V
pip3 install runlike
pip3 install runlike --break-system-packages
-查看创建命令
runlike -p 容器名
---运行内存
-m 8g
---内存+交换内存
--memory-swap="11g"
---共享内存
--shm-size="10g"
---容器的核心数
--cpus=2
---使用 0~7 固定的cpu核,共8c
--cpuset-cpus="0-7" 
---通过cfs公平调度来限制资源的使用
--cpu-period=50000 --cpu-quota=400000
---容器最多可以使用主机上两个 CPU
--cpus=2


Docker镜像使用

1.镜像构建

cd /data/file/dockerfile/app

docker build -t app .

Sending build context to Docker daemon   73.4MB
Step 1/3 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/3 : VOLUME /tmp
 ---> Using cache
 ---> 59123410176f
Step 3/3 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","> /app.log"]
 ---> Running in 8d6137e1a3b2
Removing intermediate container 8d6137e1a3b2
 ---> 15609fad2374
Successfully built 15609fad2374
Successfully tagged app:latest

docker tag 15609fad2374  34.domsn.com:5000/duo:app-0.0.1

or 

docker tag app:latest 34.domsn.com:5000/duo:app-0.0.1

docker push 34.domsn.com:5000/duo:app-0.0.1      # 推送到远程镜像中心

docker ps    3 查看所有镜像


2.Dockerfile基本结构:  https://abc.htmltoo.com/thread-45701.htm

docker pull  34.domsn.com:5000/duo:app-0.0.1       # 远程镜像中心拉取

# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER tianfeiyu 
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  
#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]

FROM:指定基础镜像,必须为第一个命令

RUN:构建镜像时执行的命令

ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget,

COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

CMD:构建容器后调用,也就是在容器启动时才进行调用。

CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

ENV:设置环境变量

LABEL:用于为镜像添加元数据

EXPOSE:指定于外界交互的端口

WORKDIR:工作目录,类似于cd命令

通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。

USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可通过该命令指定运行用户。且可以在之前创建所需要的用户。

使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

ARG:用于指定传递给构建运行时的变量


Docker日志使用

# 每个容器的日志默认都会以json-file的格式存储于/var/lib/docker/containers/<容器id>/<容器id>-json.log

docker logs  <CONTAINER>  >> /data/site/duo/error.log
docker logs -f  <CONTAINER>             # 显示实时log, 可以把最新内容刷新显示到屏幕上。
docker logs --tail 20  <CONTAINER>      # 显示最后20行的内容。
docker logs  <CONTAINER> | grep info # 使用 grep 过滤 log, 查找所有包含 “info” 的log。
docker logs --tail 20  <CONTAINER> | grep info
docker logs -t <CONTAINER> | grep error >> error.log    # 把 error 日志都写到指定文件。

# Linux查找日志

cat 日志文件名.log | grep -30 ‘关键字’   # 查询关键字前后30行
cat error.log | grep -30 ‘2019-04-08 13:30:04,271’

cat 日志文件名.log | grep ‘关键字1’ | grep ‘关键字2’   # 查询两个关键字同时出现
cat error.log | grep ‘ServiceV5Impl’ | grep ‘客户姓名不能为空’

gzip -dc 文件名 | grep -30 “关键字”       # 压缩以后的文件查询
gzip -dc error.log_2019-04-04.gz | grep -30 ‘2019-04-04 17:38:26,036’

cat 文件名 | grep ‘关键字’ | tail -n     # 查询中所匹配模式的最后一项
cat error.log_2019-04-09 | grep ‘客户姓名不能为空’ | tail -1
cat error.log_2019-04-09 | grep ‘客户姓名不能为空’ | tail -100

# 查看日志文件大小
du -ha /var/lib/docker/containers/ | grep "json.log" | sort -rh
-清理容器日志
cat /dev/null > *-json.log


Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。


Docker 的优点

  • 1、简化程序:
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

  • 2、避免选择恐惧症:
    如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

  • 3、节省开支:
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。


相关链接

Docker 官网:http://www.docker.com

Github Docker 源码:https://github.com/docker/docker


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回