Docker使用总结

Posted 流子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker使用总结相关的知识,希望对你有一定的参考价值。

Docker 简介
什么叫Docker?
Docker 是一个能够把开发的应用程序自动部署到容器的开源引擎。也就是说Docker跟Vmware等虚拟机软件相比,它是开源的。

Docker 名词解释
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
层(Layer):镜像是由多个文件系统(只读层)叠加而成, 每个层仅包含了前一层的差异部分。 当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,譬如新建文件、更改文件、删除文件,都将记录与可写层上。

Docker的技术组件
一个原生的Linux容器格式,Docker中称为libcontainer
Linux内核的命名空间(namespace),用于隔离文件系统、进程和网络
文件系统隔离:每个容器都有自己的root系统
进程隔离: 每个容器都运行在自己的进程环境中
网络隔离: 容器间的虚拟网络接口和IP地址都是分开的
资源隔离与分组: 使用cgroups(即 control group,Linux的特性之一)将CPU和内存之类的资源独立分配给每个Docker容器
写时复制: 文件系统都是通过写时复制创建的,这就意味着文件系统是分层的、快速的,而且占用的磁盘空间更小
日志:容器产生的STDOUT、STDERR和STDIN这些IO流都会被收集并计入日志,用来进行日志分析和故障排错。
交互式shell: 用户可以创建一个伪tty终端,将其连接到STDIN,为容器提供一个交互式的shell
其中:STDOUT为标准输出流,STDERR为错误输出流,STDIN为标准输入流

下面我们来介绍docker指令的使用

Dockerfile -t

ADD指令

是将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件 拷贝到镜像中。

其格式是: ADD 源路径 目标路径

ADD . /cnc/run
ADD /prometheus/prometheus-jmx-config.yaml /cnc/run/prometheus-jmx-config.yaml
ADD /prometheus/jmx_prometheus_javaagent-0.13.0.jar /cnc/run/jmx_prometheus_javaagent-0.13.0.jar

Dockerfile 编写规范

#引用基础镜像
FROM ccr.ccs.tencentyun.com/jiangguilong/kona-jdk8:1.0
#记录作者信息
MAINTAINER jiangguilong jiangguilong@gamioo.io
#将本地的nginx.tar.gz 包添加至/usr/local/目录,tar.gz 会自动解压,根据自身需求定制
ADD nginx.tar.gz /usr/local
#创建目录
RUN mkdir -p /data/server
# 对外暴露9527端口
EXPOSE 9527
#安装常用软件或者依赖软件
RUN yum install  lrzsz -y
RUN yum install vim -y
#创建环境变量
ENV NACHOS_IP=$NACHOS_IP \\
    ZONE_ID=$ZONE_ID \\
    DEPLOY_ENV=$DEPLOY_ENV

ENTRYPOINT ["/bin/bash", "start.sh"]

docker 指令

运行容器:

docker run --name=nginx -p 8099:80 -v /tmp:/tmp -d nginx:alpine
docker run -it --rm nginx:alpine sh

–name 容器名称
-p 端口映射
-v 磁盘映射
-d 以守护进程运行
-it 运行后获得一个交互终端
–rm 实例退出后,直接删除容器实例(无需执行 docker rm 清理)。请注意:如果程序运行失败导致进程退出,实例亦会被清除。
镜像后面的 “sh”:表示需要运行的容器内的命令,如果没有具体的命令,会运行 Dockerfile 里面指定的 cmd 或者 entrypoint 等命令。


​docker version
systemctl status docker
#获取docker 的一堆信息,比如镜像的磁盘位置  Docker Root Dir: /home/docker
docker info
#拉取镜像
docker pull 
docker pull 下来的命令都默认存在 /var/lib/docker/文件夹下

#查看本地镜像,主要是找到image ID,后面要用

docker images
REPOSITORY                                                                   TAG               IMAGE ID       CREATED         SIZE
ccr.ccs.tencentyun.com/ooxx/kona-jdk8                                        1.0               88e47d5b009a   2 months ago    569MB

登陆自己的docker 私人仓库

sudo docker login --username=100014139498 ccr.ccs.tencentyun.com

制作镜像

docker build -f Dockerfile -t ccr.ccs.tencentyun.com/jiangguilong/gamioo:1.0 robot

或者可以导入镜像

docker build -t yourimage .
-t 是标签,通常,标签的组成是 镜像地址/命名空间/镜像名称:版本号 。

docker load -i tcaplusdb-local-3.51.1.tar.gz

如果制作出来的镜像有问题,可以把docker镜像保存到本地

docker image save -o robot.tar  ccr.ccs.tencentyun.com/jiangguilong/gamioo:1.0

删除过多的镜像,如果强制删除要加-f

docker rmi a3dd80a05a57

Untagged: ccr.ccs.tencentyun.com/jiangguilong/gamioo:5.0
Untagged: ccr.ccs.tencentyun.com/jiangguilong/gamioo@sha256:5c38c45520b5dd0a8d3451a23c7764473b4728edfb2ef8122e551c92e5d494a1
Deleted: sha256:a3dd80a05a57b9abdb0b1e21f3f84647f4e041f85a0f9aeec798794f71a0ec8b
Deleted: sha256:defd57fbbd2c35682a8aa61bf421e0628c4ccfcdd6ed22ad1938538826b871fd
Deleted: sha256:36062a72f42151cc22aefd75540fecbe37523f0a47feb03ce2e1b7a621efd154

如果要删除同样image ID下的镜像时

docker rmi  training.tencentcloudcr.com/xyzshop/product:1.0  

删除所有none镜像

docker rmi `docker images | grep  '<none>' | awk 'print $3'`

$3指打印第三列的数据,也就是镜像的id。

如果要定时删除过期镜像,可以提供个脚本

#!/bin/bash
#用于删除过期的镜像数据
for i in $(## 查看cnc-game镜像的,保留最近10条数据,提取出镜像id
  docker images | grep -v "IMAGE" | grep 'cnc-game' | tail -n +10 | awk 'print $3'
); do
  
    docker rmi -f $i &>/dev/null ##删除镜像
    echo "docekr delete $i complete"
   &
done
wait
echo -e "\\e[1;31mdelete complete \\e[0m"

打上远程仓库标签

#sudo docker tag [ImageId] ccr.ccs.tencentyun.com/jiangguilong/kona-jdk8:[tag]
sudo docker tag 88e47d5b009a ccr.ccs.tencentyun.com/jiangguilong/kona-jdk8:1.0

推送至镜像仓库

#sudo docker push ccr.ccs.tencentyun.com/jiangguilong/kona-jdk8:[tag]
sudo docker push ccr.ccs.tencentyun.com/jiangguilong/kona-jdk8:1.0

The push refers to repository [ccr.ccs.tencentyun.com/jiangguilong/kona-jdk8]
d76a4ac4667b: Pushed 
08fc1ae4f140: Pushed 
2683371c0f7f: Pushed 
174f56854903: Pushed 
1.0: digest: sha256:7f5352ffcce1e21e5056c747c258ef7a87287697964b4225de624546dbed1885 size: 1161

到后台确认:

查看镜像历史

docker history 8e7f2f9cafba --no-trunc=true

IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
fd7a89d6641f   34 minutes ago   /bin/sh -c #(nop)  ENTRYPOINT ["/bin/bash" "…   0B        
a94521afcf87   34 minutes ago   /bin/sh -c #(nop) ADD dir:9f2bc86807842d3d57…   22.2MB    
3d204876ff8e   11 hours ago     /bin/sh -c #(nop)  MAINTAINER jiangguilong j…   0B        
88e47d5b009a   2 months ago     /bin/sh -c #(nop)  ENV JAVA_HOME=/opt/java/T…   0B        
2ff8c2c35c44   2 months ago     /bin/sh -c #(nop) ADD file:0db09375a72868034…   230MB     
da52ac2f60d7   2 months ago     /bin/sh -c mkdir -p /opt/java/                  0B        
f22ea73f6d52   2 months ago     /bin/sh -c #(nop)  ENV JAVA_VERSION=jdk8u272…   0B        
cb133e52af7a   2 months ago     /bin/sh -c yum install -y tzdata openssl cur…   135MB     
af2b8e849654   2 months ago     /bin/sh -c #(nop)  ENV LANG=en_US.UTF-8 LANG…   0B        
8652b9f0cb4c   7 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      7 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      7 months ago     /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB  

获取容器/镜像的metadata元数据,这里能看到所有信息

 docker inspect ccr.ccs.tencentyun.com/jiangguilong/gamioo:19.0

查看docker的一些硬件指标

docker stats

CONTAINER ID        NAME                                                                                                        CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
773495d3e25a        k8s_fluentbit-logging_gamesvr-1-658c94cf6d-wm2dp_gamioo-demo_82230c18-3b3f-4226-a990-91ac3b4847e5_0      0.00%               1.006GiB / 7.638GiB   13.17%              0B / 0B             2.74MB / 384MB      3
59f519df0877        k8s_-gamesvr-1_gamesvr-1-658c94cf6d-wm2dp_gamioo-demo_82230c18-3b3f-4226-a990-91ac3b4847e5_0             1.82%               1.089GiB / 7.638GiB   14.26%              0B / 0B             0B / 0B             67
c74a33316b17        k8s_POD_gamesvr-1-658c94cf6d-wm2dp_gamioo-demo_82230c18-3b3f-4226-a990-91ac3b4847e5_0                    0.00%               40KiB / 7.638GiB      0.00%               0B / 0B             0B / 0B             1

查看正在运行的容器

docker ps --no-trunc

查看所有的容器

docker ps -a --no-trunc

docker ps -a // -a 表示包含没有启动成功的容器,看到的第一列就是dockerid
通过上述命令,可以查看容器镜像或实例的名字和 ID,名字和 ID 都可以作为标识符用于操作相应资源。

查看容器详情:

docker inspect nginx

nginx 是容器名称,也可以使用 容器ID。

查看日志

docker logs nginx
docker logs nginx -n 200
docker logs nginx -f

-n 从尾部开始数,需要显示的行数。
-f 持续追踪日志。

docker logs --tail 10 -f dockerid //一直看最后十行

如果要一次性输入则,替换一下jaegertracing,各种应用就是你要的了

docker logs --tail 10 -f $(docker ps | grep jaegertracing | awk -F ' ' 'print $1')

停止运行一个容器

docker stop 1712268da898
docker stop nginx

启动一个未运行的容器实例

docker start nginx

停止了还要删除。,删除镜像实例:

docker rm 1712268da898
docker rm nginx

删除镜像:

docker rmi nginx:alpine

Docker修改默认数据目录Docker Root Dir
docker 默认数据目录 Docker Root Dir 是 /var/lib/docker,可通过 #docker info命令查看Docker Root Dir值核实

1、确保停止docker服务
# systemstl stop docker.service
2、修改/etc/docker/daemon.json文件值,文件不存在需手动创建
# vim /etc/docker/daemon.json
新增以下信息:

"data-root": "/opt/docker/data"


3、启动docker服务# systemstl start docker.service
或者热更新,systemctl daemon-reload

4#docker info 验证Docker Root Dir的值 是否已修改为/opt/docker/data

对于一个已经启动的容器,可以使用下面的命令进入容器终端 或者 执行某个指令。,进入容器 661d2fb17616 为容器ID

 docker exec -it 661d2fb17616 /bin/sh
docker exec -it nginx sh -c "(bash || ash || sh)"
docker exec nginx sh -c "ls /tmp"

重启 容器

docker restart 661d2fb17616 
docker-compose help
docker-compose  restart //重启
docker-compose  down //
docker-compose  up -d

参考:
Docker 从入门到实践

以上是关于Docker使用总结的主要内容,如果未能解决你的问题,请参考以下文章

Docker使用总结

docker harbor 安装 使用总结

Docker使用总结

Docker学习总结(68)—— Docker 数据卷相关知识总结

docker 使用总结

docker 使用总结