一、Docker是什么
- Docker 是一種開源的容器化平臺,可以幫助開發(fā)人員和系統(tǒng)管理員更輕松地創(chuàng)建、部署和運行應用程序。它利用 Linux容器技術,將應用程序及其依賴項打包成一個可移植的容器,以便在不同的環(huán)境中運行,從而實現(xiàn)應用程序的快速部署和可移植性。
二、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腳本類似(區(qū)別只是dockerfile中的命令是在鏡像中執(zhí)行的)
1、FROM:接基礎鏡像(可以是官方的也可以自己構建的),第一條必須是FROM,后續(xù)指令都會根據(jù)該鏡像構建
FROM centos
2、MAINTAINER:鏡像維護者的姓名和郵件地址
MAINTAINER lishiming@163.com
3、RUN:用于在鏡像中執(zhí)行命令,如下載一些安裝包等
RUN yum -y install mysql
4、COPY:用于將本地文件復制到鏡像中
COPY app /app
5、ADD:與COPY類似,也可以將本地文件或目錄復制到鏡像中,但是它還支持更多的功能,例如自動解壓縮和自動文件下載,一般情況下都是用COPY
ADD app.tar.gz /app
6、ENV:在鏡像中設置環(huán)境變量
ENV APP_HOME = /app
7、EXPOSE:聲明容器運行時要暴露的端口號
EXPOSE 12345
8、ENTRYPOING:容器啟動時執(zhí)行的命令,不會被docker run接的參數(shù)覆蓋,用于設置容器執(zhí)行時的主要命令
ENTRYPOINT ["sh", "/app/bin/start-all.sh"]
9、CMD:也是容器啟動時要執(zhí)行的默認命令,會被docker run后接的參數(shù)覆蓋
CMD ["/app/bin/zkServer.sh", "start-foreground"]
其中/app/bin/zkServer.sh是命令,start-foreground是參數(shù)
CMD也可以作為ENTRYPOINT的參數(shù)
ENTRYPOINT ["sh", "/app/bin/dolphinscheduler-daemon.sh"]
CMD ["start", "standalone-server"]
整個命令是這樣的:sh /app/bin/dolphinscheduler-daemon.sh start standalone-server,CMD命令后接的是ENTRYPOINT的參數(shù)
三、docker-compose.yml
- Docker Compose 是 Docker 的一個工具,用于定義和運行多個 Docker 容器的應用程序。它基于 YAML文件格式,可以方便地定義和配置多個容器,以便在不同的環(huán)境中部署應用程序,作用主要是管理多個容器
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網(wǎng)絡,以便在多個容器間進行通信,可以用docker network ls查看有哪些docker網(wǎng)絡,然后在docker-compose.yml中選用這些網(wǎng)絡;如果沒有這些網(wǎng)絡,則會自動以上級目錄為前綴自動構建docker網(wǎng)絡
- 比如上述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] 鏡像名 | 依據(jù)某鏡像啟動容器,host_port是宿主機的端口號,container_port是容器內(nèi)部端口號,表示將容器內(nèi)部的端口映射到宿主機的某個端口上,可以通過宿主機的端口訪問容器的端口 |
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網(wǎng)絡 |
docker network create network名 | 創(chuàng)建docker網(wǎng)絡(默認bridge) |
docker inspect 容器名 | 查看docker的詳細信息包括安裝位置等 |
五、Docker與Kubernetes(k8s)
1、docker與kubernetes
- 定位:Docker是一個容器化平臺,它提供了構建、打包和運行應用程序的工具。Kubernetes是一個容器編排和管理平臺,它用于管理和協(xié)調多個Docker容器的部署、伸縮和升級。
- 架構:Docker是一個單個容器引擎,它可以在一個宿主機上運行一個或多個容器。Kubernetes是一個分布式系統(tǒng),它由多個主機組成,其中每個主機可以運行多個Docker容器。
- 功能:Docker提供了構建、打包、運行和分享容器的功能,以及一些基本的容器編排功能。Kubernetes提供了更廣泛的容器編排和管理功能,包括自動伸縮、負載均衡、服務發(fā)現(xiàn)、滾動升級等。
- 級別:Docker處于基礎設施層,它主要關注如何將應用程序打包成可移植的容器。Kubernetes處于應用程序層,它主要關注如何管理和編排多個容器的部署和運行。
可以大概知道Docker是單一容器引擎,Kubernetes可以管理多個容器,Docker-compose也可以管理多個容器,兩者又有什么區(qū)別呢?
2、docker-compose與kubernetes文章來源:http://www.zghlxwxcb.cn/news/detail-500703.html
- 定位:Docker Compose是一個本地開發(fā)工具,用于定義和運行多個Docker容器的應用程序。Kubernetes是一個分布式系統(tǒng),用于編排和管理多個容器的部署、伸縮和升級。
- 架構:Docker Compose適用于單個主機上的容器應用程序,它依賴于Docker引擎。Kubernetes是一個分布式系統(tǒng),由多個主機組成,每個主機可以運行多個Docker容器。
- 功能:Docker Compose提供了一種簡單的方式來定義和運行多個容器的應用程序。Kubernetes提供了更廣泛的功能,包括自動伸縮、負載均衡、服務發(fā)現(xiàn)、滾動升級等。
- 編排方式:Docker Compose使用YAML文件來定義容器應用程序,它可以在單個主機上快速啟動和停止多個容器。Kubernetes使用YAML文件或命令行工具來定義和管理多個容器的部署、服務和資源。
- 可移植性:Kubernetes的可移植性更高,它可以在不同的云平臺和基礎設施上運行,包括AWS、Azure、Google Cloud等。Docker Compose則更適合本地開發(fā)和測試環(huán)境,它可以在開發(fā)者的電腦上運行。
總結:若是單個容器,可以使用多個容器;若是多個容器,可以使用docker-compose;若是生產(chǎn)環(huán)境使用很多個容器,可以使用K8s文章來源地址http://www.zghlxwxcb.cn/news/detail-500703.html
到了這里,關于docker學習:docker容器管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!