目录
三、使用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