K8S学习之前站二:docker应用

68 阅读3分钟

1. docker语法详解

Dockerfile是用来定义Docker镜像构建过程的文本文件。它包含了一系列的指令和参数,告诉Docker如何组成一个镜像

Dockerfile文件的基本结构

一个基本的Dockerfile通常包含一下几个部分:

1.基础镜像指令(FROM)

指定基于哪个已有的镜像构建新镜像,每个Dockerfile必须以FROM 指令开始

示例:FROM centos:7.9

2.工作目录设置(WORKDIR,可选)

设置容器内部的工作目录

示例:WORKDIR /app

3.复制文件(COPY或ADD,可选)

将文件或目录从构建上下文复制到镜像中的制定路径

COPY只是拷贝,ADD先解压再拷贝

4.运行命令(RUN,可选)

在镜像构建过程中执行的命令,可以安装软件包、更新系统等

示例:RUN apt-get update && apt-get install nginx -y

5.容器启动时执行命令(CMD或ENTRYPOINT,可选)

容器启动后执行的默认命令,可被Dockerfile中的CMD或ENTRYPOINT指令制定

示例:CMD ["nginx","-g","daemon off;"]

6.暴露端口(EXPOSE,可选)

声明容器运行时的服务监听的端口

示例:EXPOSE 80

2.dockerfile实战演练-nginx

基于Dockerfile构建镜像可以使用docker build命令。docker build命令中使用 -f 可已指定具体的dockerfile文件

  1)创建一个dockerfile文件(文件中不能出现 #注释之类)              
vi Dockerfile              
FROM /rockylinux:8.9  # 指定基础镜像      
LABEL maintain="ak"                    # 维护信息      
RUN yum install nginx -y               # 使用RUN指令安装nginx        COPY index.html /usr/share/nginx/html/ # copy首页文件到容器中,可以先创建      
EXPOSE 80                              # 声明nginx的80端口      ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]  #启动nginx

图片

2)构建镜像    
docker build -t mynginx:v1 .    
docker images 

图片

图片

3)启动容器并测试    
docker run --name mynginx -d -p 80 mynginx:v1    docker ps -a    curl localhost:32770    http://172.16.80.140:32770

图片

图片

3.dockerfile实战演练-tomcat

1) 创建一个dockerfile文件(文件中不能出现 #注释之类)    
vi Dockerfile    
FROM centos    MAINTAINER ak    
RUN rm -rf /etc/yum.repos.d/*    
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/    
RUN yum install wget -y    
COPY jdk-8u45-linux-x64.rpm /usr/local/    
ADD apache-tomcat-8.0.26.tar /usr/local/    
RUN cd /usr/local && yum install -y  jdk-8u45-linux-x64.rpm    RUN mv /usr/local/apache-tomcat-8.0.26 /usr/local/tomcat8
ENTRYPOINT 
/usr/local/tomcat8/bin/startup.sh && tail -F /usr/local/tomcat8/logs/catalina.out    
EXPOSE 8080

图片

2) 构建镜像    docker build -t mynginx:v1 .

图片

图片

3) 启动容器并测试    
docker run --name mytomcat -d -p 8080 tomcat8    docker ps -a    curl localhost:32771    http://172.16.80.140:32771

图片

图片

4.dockerfile实战演练-go代码

1)安装go环境    配置go的安装源    
rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO    
curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee                /etc/yum.repos.d/go-repo.repo    
yum install golang    go version
2)写一个go代码,main.go    
    package main
    import (
            "net/http"
            "github.com/gin-gonic/gin"
    )
    func statusOKHandler(c *gin.Context) {
            c.JSON(http.StatusOK, gin.H{"status""success~welcome to study"})
    }
    func versionHandler(c *gin.Context) {
            c.JSON(http.StatusOK, gin.H{"version""v1.1版本"})
    }
    func main() {
            router := gin.New()
            router.Use(gin.Recovery())
            router.GET("/", statusOKHandler)
            router.GET("/version", versionHandler)
            router.Run(":8080")
    }
3)Go mod初始化项目    
go mod init test    
# 设置代理    
go env -w GOPROXY=https://goproxy.cn,direct    
go mod tidy    
#构建源码    
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go    
# 生成k8s-demo二进制文件
4)创建一个dockerfile文件(文件中不能出现 #注释之类)    
vi Dockerfile    
FROM alpine    
WORKDIR /data/app    
ADD k8s-demo /data/app/    
CMD ["/bin/sh","-c","./k8s-demo"]

图片

5)构建镜像    
docker build -t k8s-demo:v1 .      
docker images

图片

图片

6)启动容器并测试    
docker run -d --name go -p 30180:8080 k8sdemo:v1    
docker ps -a    
curl localhost:30180    
http://172.16.80.140:30180

图片

图片

图片

5.dockerfile实战演练-python

1)创建一个dockerfile文件(文件中不能出现 #注释之类)    
vi Dockerfile    
FROM python:3.7    
RUN mkdir /app     
WORKDIR /app     
ADD . /app/     
RUN /usr/local/bin/python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple    
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple    
EXPOSE 5000    
CMD ["python","/app/main.py"]   

图片

2)构建镜像    
docker build -t hello-python:v1 .

图片

图片

3)启动容器并测试    
docker run -d --name python -p 30050:5000  hello-python:v1    
docker ps -a | grep python    
curl localhost:30050    http://172.16.80.140:30050

图片

图片

图片