docker镜像制作

目录

一、Dockerfile常用命令

二、制作一个简单的flask+redis镜像

三、使用centos基础镜像,编译安装一个nginx,做成自己的镜

一、Dockerfile常用命令

FROM		#基础镜像,一切从这里开始构建
MAINTAINER	#镜像是谁写的,姓名+邮箱
RUN			#镜像构建的时候需要运行的命令
ADD			#步骤,tomcat镜像,这个tomcat的压缩包!添加内容
WORKDIR		#镜像的工作目录	
VOLUME		#挂载的目录
EXPOSE		#暴露端口配置
CMD			#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD		#当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令
COPY 		#类似ADD,将我们宿主机文件拷贝到镜像中
ENV			#构建的时候设置环境遍量
HEALTHCHECK #对容器进行健康检测,检查是否正常运行
STOPSIGNAL #指定容器停止的信号
ARG #定义参数,制作镜像的时候使用build
VOLUME #将容器的路径挂载到宿主机的卷上(随机)


需要注意的点:
1、docker run启动容器的时候,可以传递参数给entrypoint里面的命令,cmd不行
2、当两者都存在的时候,cmd里的内容就会成为entrypoint里面的参数
3、run指令在制作镜像的时候运行,和他们运行的时间点不一样
4、add可以通过url从远程服务器读取资源复制到镜像中,copy只能去主机文件复制

二、制作一个简单的flask+redis镜像

===
第1步:编辑Dockerfile
[root@sc-docker-server ~]# mkdir /mydocker/
[root@sc-docker-server ~]# cd /mydocker/
[root@sc-docker-server mydocker]#

[root@sc-docker-server mydocker]# 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
ENV AUTHOR cali
CMD ["python","app.py"]

第2步:编辑requirements.txt文件
[root@sc-docker-server mydocker]# vim requirements.txt
Flask
Redis
第3步:编辑app.py文件,我们的程序文件
[root@sc-docker-server mydocker]# vim app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

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

第4步:生成镜像文件
[root@sc-docker-server mydocker]#docker build -t sc_friendlyhello_1 .
docker build -t sc_friendlyhello_1 .
Sending build context to Docker daemon  4.608kB
Step 1/9 : FROM python:2.7-slim
 ---> eeb27ee6b893
Step 2/9 : WORKDIR /app
 ---> Using cache
 ---> 81aa71984f63
Step 3/9 : ADD . /app
 ---> Using cache
 ---> a5c7c6ed471c
Step 4/9 : VOLUME ["/data_flask"]
 ---> Using cache
 ---> d4db66a741db
Step 5/9 : RUN pip install --trusted-host  pypi.python.org -r requirements.txt
 ---> Using cache
 ---> bcdee009e5f7
Step 6/9 : EXPOSE 80
 ---> Using cache
 ---> 475474ce55ff
Step 7/9 : ENV NAME World
 ---> Using cache
 ---> 0f03ead6c99b
Step 8/9 : ENV AUTHOR cali
 ---> Using cache
 ---> f844eb0f1a78
Step 9/9 : CMD ["python","app.py"]
 ---> Using cache
 ---> ab30484b56b8
Successfully built ab30484b56b8
Successfully tagged sc_friendlyhello_1:latest
[root@sc-docker-server mydocker]#
完成的镜像,查看下
[root@sc-docker-server mydocker]# docker images
REPOSITORY                 TAG        IMAGE ID       CREATED          SIZE
sc_friendlyhello_1         latest     ab30484b56b8   32 minutes ago   159MB

第5步使用镜像,启动容器
docker run -d -p 5080:80  --name sc-hello-1 sc_friendlyhello_1

第6步:访问容器的web服务
	curl或者chrome浏览器访问
	宿主机ip:5080

Hello World!
Hostname: f4aeb5d5305a
Visits: cannot connect to Redis, counter disabled


因为redis数据库容器没有启动,flask web服务不能连接到redis数据库

第7步: 启动redis容器
docker run -d -p 6379:6379 --name sc-redis-1 redis

第8步: 再次启动一个自己制作镜像的容器,链接到redis容器
docker run -d --name sc-hello-2 -p 5081:80 --link sc-redis-1:redis sc_friendlyhello_1

第9步:访问容器的web服务
	curl或者chrome浏览器访问
	宿主机ip:5081

Hello World!
Hostname: aad7da1892b5
Visits: 15

三、使用centos基础镜像,编译安装一个nginx,做成自己的镜像

1、制作dockerfile
[root@sc-docker-1 sc-centos-nginx]# cat Dockerfile 
FROM centos:latest
ENV  NGINX_VERSION   1.19.6
ENV  OS_VERSION  1.0
LABEL maintainer="sanchuang <695811769@qq.com>"

WORKDIR /nginx
COPY . .
RUN bash onekey_install_nginx_ludingji.sh  ; \
    yum  install  net-tools  iproute iputils  vim -y
EXPOSE 80

STOPSIGNAL SIGQUIT
ENV PATH /usr/local/nginx1/sbin:$PATH
CMD ["nginx", "-g", "daemon off;"]
[root@sc-docker-1 sc-centos-nginx]# 

2、一键安装ngixn脚本
[root@sc-docker-1 sc-centos-nginx]# cat onekey_install_nginx_ludingji.sh 
#!/bin/bash

#解决软件的依赖关系,需要安装的软件包
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make 
#download nginx
mkdir -p /nginx
cd /nginx
#解压 下载的nginx的源码包
tar xf nginx-1.19.6.tar.gz
cd  nginx-1.19.6
#生成编译前配置工作-->Makefile
./configure --prefix=/usr/local/nginx1  --with-threads --with-http_ssl_module  --with-http_realip_module  --with-http_v2_module --with-file-aio  --with-http_stub_status_module --with-stream
#编译
make
#编译安装--》将编译好的二进制程序安装指定目录/usr/local/nginx1
make   install
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值