当前位置:   article > 正文

docker学习:docker容器管理_docker容器管理平台

docker容器管理平台

一、Docker是什么

  • Docker 是一种开源的容器化平台,可以帮助开发人员和系统管理员更轻松地创建、部署和运行应用程序。它利用 Linux容器技术,将应用程序及其依赖项打包成一个可移植的容器,以便在不同的环境中运行,从而实现应用程序的快速部署和可移植性。

二、Dockerfile

(一)、docker镜像的构建方式

1、直接拉取别人构建好的官方镜像
eg:

docker pull zookeeper:3.7.1
  • 1

2、利用安装包自己编写dockerfile构建
eg:
1)、下载zookeeper安装包

wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
  • 1

2)、编写Dockerfile

FROM test/java8
#我这边是自己构建的java8镜像

ENV ZOOKEEPER_VERSION 3.7.1
COPY apache-zookeeper-${ZOOKEEPER_VERSION}-bin /app
ENV ZOOKEEPER_HOME /app
ENV DOCKER true

RUN cp ${ZOOKEEPER_HOME}/conf/zoo_sample.cfg ${ZOOKEEPER_HOME}/conf/zoo.cfg

EXPOSE 2181 2888 3888

CMD ["/app/bin/zkServer.sh", "start-foreground"]
#CMD ["/bin/bash", "-c", "${ZOOKEEPER_HOME}/bin/zkServer.sh start-foreground"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3)、编写build.sh一键部署

#!/bin/sh
#Actively load user env
if [ -f "~/.bashrc" ];then
  echo "Warning! user bashrc file does not exist."
else
  source ~/.bashrc
fi

echo "build docker"
sudo docker build -t heracles/zookeeper:latest .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(二)、dockerfile

  • 和shell脚本类似(区别只是dockerfile中的命令是在镜像中执行的)

1、FROM:接基础镜像(可以是官方的也可以自己构建的),第一条必须是FROM,后续指令都会根据该镜像构建

FROM centos
  • 1

2、MAINTAINER:镜像维护者的姓名和邮件地址

MAINTAINER lishiming@163.com
  • 1

3、RUN:用于在镜像中执行命令,如下载一些安装包等

RUN yum -y install mysql
  • 1

4、COPY:用于将本地文件复制到镜像中

COPY app /app
  • 1

5、ADD:与COPY类似,也可以将本地文件或目录复制到镜像中,但是它还支持更多的功能,例如自动解压缩和自动文件下载,一般情况下都是用COPY

ADD app.tar.gz /app
  • 1

6、ENV:在镜像中设置环境变量

ENV APP_HOME = /app
  • 1

7、EXPOSE:声明容器运行时要暴露的端口号

EXPOSE 12345
  • 1

8、ENTRYPOING:容器启动时执行的命令,不会被docker run接的参数覆盖,用于设置容器执行时的主要命令

ENTRYPOINT ["sh", "/app/bin/start-all.sh"]
  • 1

9、CMD:也是容器启动时要执行的默认命令,会被docker run后接的参数覆盖

CMD ["/app/bin/zkServer.sh", "start-foreground"]
其中/app/bin/zkServer.sh是命令,start-foreground是参数
  • 1
  • 2

CMD也可以作为ENTRYPOINT的参数

ENTRYPOINT ["sh", "/app/bin/dolphinscheduler-daemon.sh"]
CMD ["start", "standalone-server"]
整个命令是这样的:sh /app/bin/dolphinscheduler-daemon.sh start standalone-server,CMD命令后接的是ENTRYPOINT的参数
  • 1
  • 2
  • 3

三、docker-compose.yml

  • Docker Compose 是 Docker 的一个工具,用于定义和运行多个 Docker 容器的应用程序。它基于 YAML文件格式,可以方便地定义和配置多个容器,以便在不同的环境中部署应用程序,作用主要是管理多个容器
version: '3'
services:
  dolphinscheduler:
    build: .
    depends_on:
      - mysql
      - zookeeper
    networks:
      - heracles-backend
      - heracles-db

  mysql:
    image: mysql:5.7
    restart: always
    privileged: true
    environment:
    volumes:
      - ./my.cnf:/etc/my.cnf
    networks:
      heracles-db:
        aliases:
          - db-mysql

  zookeeper:
    image: zookeeper:3.7.1
    networks:
      - heracles-backend

networks:
  heracles-db:
  heracles-backend:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 运行docker-compose up -d会去运行上述文件,如何有对应的image,则会直接启动容器;如果没有,则会构建镜像并启动容器
  • networks关键字用于定义docker网络,以便在多个容器间进行通信,可以用docker network ls查看有哪些docker网络,然后在docker-compose.yml中选用这些网络;如果没有这些网络,则会自动以上级目录为前缀自动构建docker网络
  • 比如上述dolphinscheduler容器,要想连接到mysql容器,可以直接连接别名db-mysql或service名:mysql,用命令ping db-mysql或ping mysql测试

四、Docker常用命令

命令含义
docker images | grep 镜像名查找指定的镜像
docker ps | grep 容器名在运行中的容器中查找指定容器
docker ps -a | grep 容器名在所有容器中查找指定容器
docker run -d --name 自定义容器名 -p [host_port]:[container_port] 镜像名依据某镜像启动容器,host_port是宿主机的端口号,container_port是容器内部端口号,表示将容器内部的端口映射到宿主机的某个端口上,可以通过宿主机的端口访问容器的端口
docker exec -it 容器名 bash进入容器
docker rm 容器名删除容器
docker rmi 镜像名删除镜像
docker-compose up -d启动所有docker-compose.yml定义的服务
docker-compose down停止并删除所有docker-compose.yml定义的服务
docker-compose logs service名查看docker-compose.yml定义的service日志
docker-compose start启动所有服务
docker-compose stop停止所有服务
docker-compose restart重启所有服务
docker network ls查看所有docker网络
docker network create network名创建docker网络(默认bridge)
docker inspect 容器名查看docker的详细信息包括安装位置等

五、Docker与Kubernetes(k8s)

1、docker与kubernetes

  • 定位:Docker是一个容器化平台,它提供了构建、打包和运行应用程序的工具。Kubernetes是一个容器编排和管理平台,它用于管理和协调多个Docker容器的部署、伸缩和升级。
  • 架构:Docker是一个单个容器引擎,它可以在一个宿主机上运行一个或多个容器。Kubernetes是一个分布式系统,它由多个主机组成,其中每个主机可以运行多个Docker容器。
  • 功能:Docker提供了构建、打包、运行和分享容器的功能,以及一些基本的容器编排功能。Kubernetes提供了更广泛的容器编排和管理功能,包括自动伸缩、负载均衡、服务发现、滚动升级等。
  • 级别:Docker处于基础设施层,它主要关注如何将应用程序打包成可移植的容器。Kubernetes处于应用程序层,它主要关注如何管理和编排多个容器的部署和运行。

可以大概知道Docker是单一容器引擎,Kubernetes可以管理多个容器,Docker-compose也可以管理多个容器,两者又有什么区别呢?
2、docker-compose与kubernetes

  • 定位:Docker Compose是一个本地开发工具,用于定义和运行多个Docker容器的应用程序。Kubernetes是一个分布式系统,用于编排和管理多个容器的部署、伸缩和升级。
  • 架构:Docker Compose适用于单个主机上的容器应用程序,它依赖于Docker引擎。Kubernetes是一个分布式系统,由多个主机组成,每个主机可以运行多个Docker容器。
  • 功能:Docker Compose提供了一种简单的方式来定义和运行多个容器的应用程序。Kubernetes提供了更广泛的功能,包括自动伸缩、负载均衡、服务发现、滚动升级等。
  • 编排方式:Docker Compose使用YAML文件来定义容器应用程序,它可以在单个主机上快速启动和停止多个容器。Kubernetes使用YAML文件或命令行工具来定义和管理多个容器的部署、服务和资源。
  • 可移植性:Kubernetes的可移植性更高,它可以在不同的云平台和基础设施上运行,包括AWS、Azure、Google Cloud等。Docker Compose则更适合本地开发和测试环境,它可以在开发者的电脑上运行。

总结:若是单个容器,可以使用多个容器;若是多个容器,可以使用docker-compose;若是生产环境使用很多个容器,可以使用K8s

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/119976
推荐阅读
相关标签
  

闽ICP备14008679号