dockerfile 构建生产环境镜像
dockerfile构建nginx镜像
mkdir dockerfile
cd dockerfile/
#把Centos-vault-8.5.2111.repo传到这个目录下 可通过阿里云镜像站下载这个yum源,centos默认镜像源不更新已经无法使用了
Centos-vault-8.5.2111.repo 链接:https://pan.baidu.com/s/1d5MNg_8C6pEV3FVMvGThXg?pwd=zjv8
提取码:zjv8
编写dockerfile
cat >dockerfile<<EOF
FROM centos
MAINTAINER nginx
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
RUN yum install wget -y
RUN yum install nginx -y
RUN yum install net-tools -y
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EOF
编写index文件
echo "hello nginx" >index.html
构建镜像
docker build -t="centos/nginx:v1" .
查看镜像是否构建成功:
docker images | grep nginx
基于刚才的镜像启动容器:
docker run -d -p 80 --name html2 centos/nginx:v1
查看容器具体信息可按如下命令:
docker ps | grep html
查看容器里部署的nginx网站的内容:
curl http://192.168.40.10:49154
注意:ENTRYPOINT [“/usr/sbin/nginx”,“-g”,“daemon off;”]
表示容器运行时,自动启动容器里的nginx服务
dockerfile构建tomcat镜像
把apache-tomcat-8.0.26.tar.gz 和jdk-8u45-linux-x64.rpm和Centos-vault-8.5.2111.repo传到dockerfile目录下
链接:https://pan.baidu.com/s/1soMWPTqCbB7Xv4P64C34ag?pwd=72hm
提取码:72hm
mkdir tomcat8
cd tomcat8
cat >dockerfile<<EOF
FROM centos
MAINTAINER tomcat
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
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
EXPOSE 8080
EOF
开始构建镜像
docker build -t="tomcat8:v1" .
运行一个容器
docker run --name tomcat8 -itd -p 8080 tomcat8:v1
进入到容器
docker exec -it tomcat8 /bin/bash
启动tomcat
/usr/local/tomcat8/bin/startup.sh
查看进程,看看是否启动成功
ps -ef | grep tomcat
打开新的终端窗口,查看刚才创建的tomcat8这个容器的详细信息:
docker ps | grep tomcat
访问服务器加容器映射出来的端口
tomcat 的自动启动
刚才我们在构建tomcat镜像时候,基于镜像运行容器,但是需要进入到容器,手动启动tomcat服务,那如果想要启动容器,tomcat也自动起来,需要按照如下方法构建镜像:
cat >dockerfile1 <<EOF
FROM centos
MAINTAINER test
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
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
EOF
tomcat 的自动启动命令可以用 ENTRYPOINT [“/usr/local/tomcat8/bin/catalina.sh”, “run”]
docker build -f dockerfile1 -t="tomcat8:v2" .
docker run --name tomcat9 -itd -p 8080 tomcat8:v2 /bin/bash
把Go代码基于dockerfile做成镜像
linux机器安装go(我用的是centos7.9操作系统)
yum install go -y
创建源码文件:生产环境代码是开发人员写的,运维不用写
mkdir test
cd test/
cat >main.go <<EOF
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")
}
EOF
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 #构建源码
编写dockerfile文件
cat >Dockerfile<<EOF
FROM alpine
WORKDIR /data/app
ADD k8s-demo /data/app/
CMD ["/bin/sh","-c","./k8s-demo"]
EOF
构建镜像
docker build -t go/k8sdemo:v1 .
运行镜像
docker run -d --name go -p 30180:8080 go/k8sdemo:v1
访问go容器
可以在根物理机同网段的其他机器或者浏览器访问机器的ip:30180,就可以把请求代理到go容器了
把python代码基于dockerfile做成镜像
把hello-python.tar.gz压缩包上传到服务器的root下,手动解压
链接:https://pan.baidu.com/s/1c6iEdGN2oQrXu9sfGLhfWw?pwd=3lmj
提取码:3lmj
tar zxvf hello-python.tar.gz
cd /root/hello-python/app
备注:requirements.txt文件包含main.py所需的包列表,pip将使用它来安装Flask库。
cat >dockerfile <<EOF
FROM python:3.7
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN /usr/local/bin/python -m pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python","/app/main.py"]
备注:
这个文件是Docker用来构建镜像的一组指令。对于这个简单的应用程序,Docker将:
(1)从Docker Hub获取3.7版本的官方Python基本镜像。
(2)在镜像中,创建一个名为app的目录。
(3)将工作目录设置为新的app目录。
(4)将本地目录的内容复制到该新文件夹,并将其复制到镜像中。
(5)运行pip安装程序(就像我们前面做的那样),将需求拉入镜像中。
(6)通知Docker容器监听端口5000。
(7)配置启动命令,使其在容器启动时使用。
构建镜像
docker build -t hello-python:v1 .
基于镜像运行python代码
docker run -d --name python -p 30050:5000 hello-python:v1
访问python容器
可以在根物理机同网段的其他机器或者浏览器访问机器的ip:30050,就可以把请求代理到python容器了