二:Dockerfile 語法基礎
1:基礎指令
(1)FROM
指定基礎鏡像,所有的 Dockerfile 都必須以 FROM 指令開頭,它定義了新鏡像基于哪個基礎鏡像構建。
FRoM ubuntu:20.04
(2)MAINTAINER(已奔用,推薦使用LABEL)
用于指定鏡像的維護者信息。不過在較新的Docker版本中,推薦使用 LABEL 指今來替代
MAINTAINER John Doe <johndoe@example.com>
(3)LABEL
為鏡像添加元數據,這些元數據可以是任何信息,如作者、版本、描述等,方便對鏡像進行管理和識別。
LABEL version="1.0" description="This is a sample image"
maintainer="John'
2:環境設置指令
(1)ENV
設置環境變量,這些環境變量會在容器運行時持續存在,并且可以被容器內的應用程序使用。
ENV MYSOL_ROOT_PASSWORD=password
(2)ARG
定義在構建鏡像時可以傳遞的參數,這些參數只在鏡像構建過程中有效。
ARG VERSION=1.0
3:文件操作指令
(1)CPOY
將本地文件或目錄復制到鏡像中。
COPY app.py /app/
(2)ADD
與 COPY 類似,也是將文件或目錄復制到鏡像中,但 ADD 還支持從遠程 URL 下載文件和自動解壓玉縮文件。
ADD http://example.com/file.tar.gz /app/
3)WORKDIR
設置工作目錄,后續的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 等指令都會在這個工作目錄下執行。
WORKDIR /app
4:執行命令指令
(1)RUN
在構建鏡像的過程中執行命令,常用于安裝軟件包、配置環境等操作。
RUN apt-get update && apt-get install -y python3
(2)CMD
為容器提供默認的執行命令。一個 Dockerfile 中只能有一個 CMD 指令,如果有多個,只有最后個會生效。當使用 docker run 啟動容器時,如果沒有指定其他命令,就會執行 CMD 指定的命令。
CMD ["python3","app.py"]
3)ENTRYPOINT
配置容器啟動時執行的命令,與 CMD 類似,但 ENTRYPOINT 的命令不會被 docker run 后面的命令覆蓋,而是將 docker run 后面的命令作為參數傳遞給 ENTRYPOINT 命令。
ENTRYPOINT ["python3"]
CMD ["app.py"]
5:網絡和暴露端口指令
(1)EXPOSE
聲明容器在運行時會監聽的端口,但這只是一個聲明,并不會實際進行端口映射。在使用 dockerrun 啟動容器時,需要使用-p或-P選項進行端口映射。
EXPOSE 8080
6:容器掛載指令
(1)VOLUME
創建一個可以從本地主機或其他容器掛載的掛載點,用于持久化數據或共享數據
VOLUME ["/app/data"]
三:Dockerfile 系例實施
1:案例 1--構建 nginx 容器
(1)拉取 centos 鏡像
docker pull centos:7
(2)創建 dockerfile 工作目錄
(3)創建 dockerfile
(4)編寫nginx 啟動腳本
(5)用dockerfile 創建鏡像
(6)啟動容器
(7)訪問nginx 網站
http://192.168.10.101:8083
2:案例 2--構建 Tomcat 容器
(1)創建工作目錄
(2)創建 dockerfile 文件
(3)創建啟動腳本
(4)用dockerfile 生成鏡像
(5)運行容器
docker run -d -i -p 8080:8080 --name tomcat01 mytomcat
(6)訪問 tomcat 網站
3:案例 3--構建 mysq1 容器
(1)創建工作目錄
(2)創建 dockerfile 文件
(3)編寫mysq1 初始化腳本
(4)生成鏡像
docker bulid -t mysql .
(5)創建容器
docker run -id -p 3306:3306 mysql
yum -y install mysql
mysql -uroot -p123456 -h 192.168.10.101 -p 3306
4:案例 4--構建 php
(1)創建工作目錄
mkdir /opt/php
cd /opt/php
(2)創建dockerfile(yum 安裝安裝)
vim dockerfile
(3)生成鏡像
docker build -t myphp .
(4)啟動容器
docker run -d -i -p 9000:9000 myphp /bin/bash