一、Docker是什么
- Docker 是一种开源的容器化平台,可以帮助开发人员和系统管理员更轻松地创建、部署和运行应用程序。它利用 Linux容器技术,将应用程序及其依赖项打包成一个可移植的容器,以便在不同的环境中运行,从而实现应用程序的快速部署和可移植性。
二、Dockerfile
(一)、docker镜像的构建方式
1、直接拉取别人构建好的官方镜像
eg:
docker pull zookeeper:3.7.1
2、利用安装包自己编写dockerfile构建
eg:
1)、下载zookeeper安装包
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
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"]
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 .
(二)、dockerfile
- 和shell脚本类似(区别只是dockerfile中的命令是在镜像中执行的)
1、FROM:接基础镜像(可以是官方的也可以自己构建的),第一条必须是FROM,后续指令都会根据该镜像构建
FROM centos
2、MAINTAINER:镜像维护者的姓名和邮件地址
MAINTAINER lishiming@163.com
3、RUN:用于在镜像中执行命令,如下载一些安装包等
RUN yum -y install mysql
4、COPY:用于将本地文件复制到镜像中
COPY app /app
5、ADD:与COPY类似,也可以将本地文件或目录复制到镜像中,但是它还支持更多的功能,例如自动解压缩和自动文件下载,一般情况下都是用COPY
ADD app.tar.gz /app
6、ENV:在镜像中设置环境变量
ENV APP_HOME = /app
7、EXPOSE:声明容器运行时要暴露的端口号
EXPOSE 12345
8、ENTRYPOING:容器启动时执行的命令,不会被docker run接的参数覆盖,用于设置容器执行时的主要命令
ENTRYPOINT ["sh", "/app/bin/start-all.sh"]
9、CMD:也是容器启动时要执行的默认命令,会被docker run后接的参数覆盖
CMD ["/app/bin/zkServer.sh", "start-foreground"]
其中/app/bin/zkServer.sh是命令,start-foreground是参数
CMD也可以作为ENTRYPOINT的参数
ENTRYPOINT ["sh", "/app/bin/dolphinscheduler-daemon.sh"]
CMD ["start", "standalone-server"]
整个命令是这样的:sh /app/bin/dolphinscheduler-daemon.sh start standalone-server,CMD命令后接的是ENTRYPOINT的参数
三、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:
- 运行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文章来源:https://www.toymoban.com/news/detail-500703.html
- 定位: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文章来源地址https://www.toymoban.com/news/detail-500703.html
到了这里,关于docker学习:docker容器管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!