性能分析-docker知识(安装、常用命令、监控)

本文介绍了Docker的基本概念,包括其作为系统虚拟化工具的工作原理,镜像和容器的区别,以及仓库的作用。还详细讲解了Docker的安装、常用命令和与Kubernetes的关系,指出掌握Docker对理解K8s至关重要。
摘要由CSDN通过智能技术生成

docker的相关概念

参考1 ,参考2

docker是一个做系统虚拟化的软件,跟vmware类似,虚拟出来的也是操作系统。我们现在在企业中, 使用docker虚拟出来的系统,大多都是linux系统。

docker镜像image:就是虚拟一个docker容器需要的操作系统、服务的依赖、服务包,打包成的一个文 件。

docker容器 container:就是用docker软件虚拟出来的一个linux操作系统。

docker仓库:就是管理镜像的地方。

  • 公有仓库:hub.docker.com,所有人都可以在这里免费下载镜像
  • 私有仓库: 管理私有镜像的仓库

docker的操作系统是一个不完整的操作系统。部署项目的操作系统,有很多操作系统的功能是不需要的。把一些不需要的功能,全部从操作系统中移出出去。那么这个操作系统就给变得非常小了。小到这 个操作系统,只有三个部分是必须的:cgroups、namespace、unionFS。所以容器就可以变得非常小。所以,它占用宿主机的资源就很小。所以一台机器就可以参数更多容器出来。

因为docker容器的操作系统,砍掉了很多功能,所以里面可以执行linux命令,但是不是所有的命 令都可以执行。

一个宿主机上,给运行多个docker容器,容器与容器之间默认是相互隔离的。

docker安装

yum install -y yum-utils device-mapper-persistent-data lvm2
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl restart docker # 重启
systemctl enable docker #开机自启动
sudo vim /etc/docker/daemon.json

添加国内阿里镜像源(阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台)注册

{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com",
        "https://your-mirror.mirror.aliyuncs.com"
    ]
}

重新载入文件

systemctl daemon-reload

重启docker服务

systemctl restart docker.service

docker命令使用,需要超管权限。

获取帮助: docker --help

查看到docker子命令的帮助: docker command --help

常用到命令

镜像相关命令

  • 下载镜像到本地

  • 命令用法: docker pull 镜像名称:tag
    • 默认是从docker官方网站上下载镜像:
      • 下载tomcat为8.0.53 jre为7的tomcat镜像
      • docker pull tomcat:8.0.53-jre7-alpine
  •   搜索容器mysql

    • docker search mysql

  • 列出所有本地镜像

    • docker images  
  • 删除本地镜像

    • docker rmi [OPTIONS] IMAGE [IMAGE...]
      
    • 常用选项
      • -f 或 --force: 强制删除镜像,即使它正在被使用。
      • --no-prune: 不删除未标记的父级镜像。
  • 删除单个镜像
    • docker rmi my_image
      
  •  删除多个镜像
    • docker rmi image1 image2 image3
      
  • 强制删除镜像
    • docker rmi -f my_image
  • 删除所有未使用的镜像
    • docker image prune -a

容器相关命令

  • 创建容器并运行

    docker run -itd --cpus 1 --memory 2G --name tomcat-kyj-1 -p 6666:8080 tomcat:8.0.53-jre7-alpine
    • docker create 只是创建一个新容器,创建之后,并没有运行。
    • 使用docker run 命令,常用选项参数:
      • 基本用法

        docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

        常用选项

        - `-d` 或 `--detach`: 在后台运行容器,并打印容器 ID。
        - `-i` 或 `--interactive`: 保持 STDIN 打开,即使没有附加。
        - `-t` 或 `--tty`: 分配一个伪终端。
        - `-p` 或 `--publish`: 将容器的端口发布到主机。
        - `-v` 或 `--volume`: 绑定挂载一个卷。
        - `-e` 或 `--env`: 设置环境变量。
        - `--name`: 为容器指定一个名称。
        - `--rm`: 容器退出时自动删除容器。
        - `-w` 或 `--workdir`: 设置容器内的工作目录。

        1. **在后台运行一个容器**:

        docker run -d tomcat:8.0.53-jre7-alpine

          

        2. **交互式运行一个容器**:

        docker run -it tomcat:8.0.53-jre7-alpine /bin/bash

           这个命令会启动一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并打开一个交互式的 bash shell。

        3. **发布端口**:

        docker run -d -p 8080:80 tomcat:8.0.53-jre7-alpine

           这个命令会在后台运行一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并将容器的 80 端口映射到主机的 8080 端口。

        4. **绑定挂载卷**:

      • docker run -v <主机目录>:<容器目录> <镜像名称>
        docker run -d -v /opt/andy:/andy  tomcat:8.0.53-jre7-alpine

           这个命令会在后台运行一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并将主机上的 `/opt/andy` 目录挂载到容器的 `/andy` 目录。(注意:此方法会重新创建一个新的容器)

      • 挂载当前目录到对应的容器目录

    • 启动现有的容器

  • docker start lemon-erp-1
    

    提交现有容器为新镜像(原镜像上挂载)

    • docker commit ea42d427123e my-tomcat-image
      
      使用新镜像创建并挂载卷

      docker run -d --name tomcat-kyj-1 -v $(pwd):/app my-tomcat-image
      
    • 查看挂载卷是否成功

      • docker inspect 命令可以显示容器的详细信息,包括挂载卷的信息。在输出中,查找 Mounts 部分,它会显示所有挂载的卷信息,包括源路径和目标路径。

    • docker inspect tomcat-kyj-1
      

    • 5. **设置环境变量**:

      docker run -d -e MY_ENV_VAR=my_value tomcat:8.0.53-jre7-alpine

         这个命令会在后台运行一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并设置一个名为 `MY_ENV_VAR` 的环境变量,其值为 `my_value`。

      6. **指定容器名称**:

      docker run -d --name my_nginx tomcat:8.0.53-jre7-alpine

         这个命令会在后台运行一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并将其命名为 `my_nginx`。

      7. **自动删除容器**:

      docker run --rm -it ubuntu /bin/bash

         这个命令会启动一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并在退出时自动删除容器。

      8. **设置工作目录**:

        docker run -d -w /app tomcat:8.0.53-jre7-alpine

         这个命令会在后台运行一个基于 `tomcat:8.0.53-jre7-alpine` 镜像的容器,并将其工作目录设置为 `/app`。

  • 重命名容器

    • docker rename old_container new_container
      

  • 停止docker运行中中的容器

    • docker stop 容器名称或容器id 

      • docker stop exciting_kilby
        

  •  删除容器 

    • docker rm c57c75c82189
      

  • 查看容器日志

    • docker logs 容器名称或容器id   

      • docker logs centos7_mysql57

  • 查看容器状态

  • docker ps 查看容器状态(默认时只显示正在运行的容器,跟上-a参数,显示所有的容器‘容器id’和‘容器的名称’)
    • docker ps
      docker ps -a
  • 查看容器的运行状态

  • docker stats 容器名称或容器id,

    •  docker stats centos7_mysql57
      

  • 查看容器的相关信息

  • docker inspect 容器名称或容器id

    • docker inspect centos7_mysql57

    • 在一个运行中的容器中执行命令

    • docker exec

      • docker exec -it 容器名称或容器id /bin/bash   进入容器内部,使用bash命令一般情况 使用bash,也可以使用sh
        • docker exec -it my_container /bin/bash
          

          在这个命令中:

          • -it 表示以交互模式运行命令,并分配一个伪终端。
          • my_container 是容器的名称或 ID。
          • /bin/bash 是在容器中启动的 shell。
          • docker exec -it 0562d8625a2e /bin/bash
            

      • exit 退出容器
        • exit

容器网络相关

  • docker network  容器网络  docker network ps显示所有的容器网络
    • 创建一个网络

      • docker network create andy_work
         
    • 查看所有的容器网络

      • docker network ls

    • 连接容器到网络

      • docker network connect andy_work ea42d427123e
        

    • 查看网络信息

      • docker network inspect andy_work
        

    • 删除网络

      • docker network rm my_bridge_network

拷贝文件到容器

  • docker cp  拷贝
    • docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-   从容器中拷贝到本地路径
    • docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH  从本地拷贝到容器中某个路径

创建mysql数据库容器

下载mysql镜像mysql:5.7

docker pull daocloud.io/mysql:5.7

根据下载的镜像创建容器,设置端口映射和密码

docker run -itd --name my-mysql-lenmon -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 daocloud.io/mysql:5.7


创建好了数据库容器之后,创建lemon_erp库,对库进行初始化操作

下面就可以用数据库软件连接到这个容器了,宿主机的ip和刚设置的端口及密码

docker pull openjdk:8
docker run -itd --name erp-1 -p 8882:8082 openjdk:8
docker cp lemon_erp.jar erp-1:/opt/lemon_erp.jar
docker cp config/ erp-1:/opt/config/
# 修改 config文件夹中 application-dev.yml文件中数据库的配置,可以修改了再传上去
docker cp application-dev.yml erp-1:/opt/config/application-dev.yml
docker exec -it erp-1 /bin/bash
cd /opt
# 启动项目
nohup java -jar lemon_erp.jar &
exit

实战

下载数据库并创建数据库

下载mysql镜像并创建数据库容器(见上方)

创建对应的数据库并运行对应的sql语句

下载tomcat镜像并创建容器

docker pull tomat:jre8

创建容器

docker run -itd --name lemon-erp-1 -p 8882:8082 livingobjects/jre8

进入容器

 docker exec -it lemon-erp-1 /bin/bash

解压并进入

修改application.yml文件

修改application-dev.yml,(修改mysql的端口和地址)

查看mysql容器的端口和ip地址(获取mysql的信息)

修改application-dev.yml端口,ip也可以修改为宿主机的网络地址

将对应的内容拷贝进容器

docker cp lemon_erp.jar  lemon-erp-1:/opt
docker cp config/  lemon-erp-1:/opt

进入容器内部启动项目

 docker exec -it lemon-erp-1 /bin/bash
java -jar lemon_erp.jar 

查看拷贝的内容

ls

最后访问项目地址就可以了http://ip:8882/doc.html#/home

修改容器网络连接

注意数据库的地址要和创建时的密码一致

一、直接连接docker中mysql的ip地址(比第二种方法好)

先查看mysql在docker中的ip地址

docker inspect my-mysql-lenmon

从上图可以看出我的mysql在docker中的网络地址为172.17.0.2

修改对应的网络地址

 vi application-dev.yml

二、修改为主机的ip地址和端口

三、新增一个局域网络,将两个容器加入到这个局域网

查看刚创建的网络

docker network ls

查看网络信息

 docker network inspact andy_work

从上图可以看见该局域网的网段信息

将对应的容器加入到该局域网

docker network connect andy_work my-mysql-lenmon
docker network connect andy_work lemon-erp-1

查看网络详情可以看见对应的容器已经加入到该局域网中

docker network inspect andy_work

监控docker  

详见这里

grafana + Prometheus + docker监控

cadvisor

docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --
volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --
volume=/dev/disk/:/dev/disk:ro --publish=8880:8080 --detach=true --name=cadvisor
--privileged --device=/dev/kmsg google/cadvisor

修复prometheus.yml

启动Prometheus和grafana

引入模板 193

如果公司用k8s,它的配置文件yml文件,与dockerfile类似。

docker 与 k8s

docker是一个用于管理和创建容器的软件

k8s,是容器的集成管理工具,这个工具集成了docker的能力。

以前,k8s创建容器,就是用docker

所以掌握了 docker知识k8s的使用就变得简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值