【小试牛刀】dockerfile编写

Dockerfile构建编译安装nginx

 docker build -t own_nginx:v8.0 . -f ./own_nginx.dockerfile
FROM centos:7

LABEL maintainer="zane" version="V1"

ENV PATH /usr/local/nginx/sbin:$PATH

ADD nginx-1.24.0.tar.gz /usr/local/
  
ADD epel.repo /etc/yum.repos.d
  
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all


RUN useradd -s /sbin/nologin -M www

WORKDIR /usr/local/nginx-1.24.0
  
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

RUN chown -R www:www /usr/local/nginx/

RUN sed -i '/80/s/80/8000/' /usr/local/nginx/conf/nginx.conf

USER www:www

EXPOSE 8000
  
VOLUME [ "/usr/local/nginx/conf/" ]
  
CMD [ "nginx" ]

Dockerfile实例:容器化python的flask应用

目标: 用 Docker 部署一个用 Python 编写的 Web 应用。

首先部署整个流程:

基础镜像(python)-->flask-->部署python应用
web框架 flask django

代码功能:

​ 如果当前环境中有"NAME"这个环境变量,就把它打印在"Hello"后,否则就打印"Hello world",最后再打印出当前环境的 hostname。

[root@yixuan ~]# mkdir python_app
[root@yixuan ~]# cd python_app/
[root@yixuan python_app]# vim app.py
from flask import Flask
import socket
import os

app = Flask(__name__)

@app.route('/')
def hello():
    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname())

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

应用依赖:

定义在同目录下的 requirements.txt 文件里,内容如下:

[root@yixuan python_app]# vim requirements.txt
Flask 

Dockerfile制作容器镜像:

# vim Dockerfile
FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
CMD ["python", "app.py"]

现在目录结构:

[root@yixuan python_app]# ls
Dockerfile  app.py   requirements.txt 

构建镜像:

[root@yixuan python_app]# docker build -t testpython .
-t  给这个镜像加一个 Tag

Dockerfile 中的每个原语执行后,都会生成一个对应的镜像层。即使原语本身并没有明显地修改文件的操作(比如,ENV 原语),它对应的层也会存在。只不过在外界看来,这个层是空的。

查看结果:

[root@yixuan python_app]# docker images
REPOSITORY                              TAG                 IMAGE ID           ...
testpython                              latest              16bc21f3eea3

启动容器:

[root@yixuan python_app]# docker run -it -p 4000:80 testpython /bin/bash

查看容器:

[root@yixuan python_app]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED                  
ce02568e64ce        testpython          "/bin/bash"         About a minute ago

进入容器:

[root@yixuan python_app]# docker exec -it ce02568 /bin/bash 
root@ce02568e64ce:/app# python app.py &        #将python运行起来

访问容器内应用:

[root@yixuan ~]# curl http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> f201f6855136<br/>

JAVA Springboot dockerfile示例

FROM 192.168.233.44:31904/cmcdcp/adoptopenjdk:8-jdk-ubuntu-cn

LABEL "author"="zane"

WORKDIR /home/app

COPY --chown=app:app onlinestore-order.jar ./

USER app

ENV JVM_ARGS="-Xms256m -Xmx2048m" CMD_LINE_ARGS=""

ENTRYPOINT java -server -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom $JVM_ARGS -jar *.jar $CMD_LINE_ARGS

tomcat的dockerfile

FROM centos
RUN yum install wget -y
ADD jdk-8u45-linux-x64.rpm /usr/local/
ADD apache-tomcat-8.0.26.tar.gz /usr/local/
RUN cd /usr/local && rpm -ivh 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

go的dockerfile

go代码

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", hello)
	http.ListenAndServe(":8080", nil)
}

func hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Web01 is running...")
}

编译二进制文件

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build web01.go

dockerfile

FROM alpine:latest

LABEL maintainer="zane" version="V1"

RUN adduser -s /sbin/nologin web -D

WORKDIR /home/web

ADD web01 /home/web

RUN chown web:web web01

USER web:web

EXPOSE 8080

CMD [ "./web01" ]

构建镜像:docker build -t goweb:v1.0 . -f ./web01.dockerfile

查看镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
goweb        v1.0      a77e24bc2584   11 minutes ago   21.8MB
goweb        v2.0      345319e371cf   11 minutes ago   21.8MB
alpine       latest    91ef0af61f39   7 weeks ago      7.8MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值