三、dockerfile编写

因为官网提供的一些镜像不一定能满足需求,所以可以自己创建镜像,一个dockerfile相当于一个文本文件

创建dockerfile文件
#
# 导入基类镜像,如果本地有python镜像,那么就用本地仓库的,如果没有,他会去dockerhub中下载
# 往往一个dockerfile文件中,只有一个FROM
# 一般FROM要出现在首行
# 尽量使用alpine操作系统的,比较轻,功能强大
FROM python:3.7

#
# LABEL是对镜像的描述信息
# mainteiner指定维护者是谁
# description指定功能具体描述信息
LABEL mainteiner="guodh"
LABEL description="this is simple example"

#
# 相当于cd命令,指定容器当前工作目录,如果目录不存在,会自动创建
# 如果前面有/,那么是从跟路径开始,如果没有/,是从当前路径开始
# 如果下面又要切换目录,可以再增加一个WORKDIR
WORKDIR /app

#
# 将宿主机中的文件或者目录复制到容器中
# 第一个参数是宿主机的文件或目录,使用相对路径(相对于dockerfile)
# 第二个参数是容器的目录或者文件,如果是目录,最后必须有/
#

 #正确:
 #COPY ./package.json /app/
 #COPY package.json /usr/src/app/
 #错误:
 #COPY ../package.json /app
 #或者 COPY /opt/xxxx /app

 #所以Dockerfile一般都是放在根目录下,COPY的文件使用相对路径。建议本地先调试好Dockerfile打包没问题后再迁移到CodePipeline上使用

COPY requirements.txt ./

#
# 类似COPY,如果跟的是文件或目录,和COPY一样
# 如果是压缩包,会自动解压复制粘贴过去
# 如果是远程下载地址,会下载(github)
# ADD https://code.jquery.com/jquery-3.4.1min.js ./

#
# 创建环境变量(全局变量)
ENV username="guodh" \
    passwd="123456"

#
# 使用RUN在容器中执行linux命令,--no-cache-dir安装模块时不会缓存,为了更加轻量级
# 一个RUN会创建一层
# 如果需要执行多条命令,往往只写在一个RUN里面,后面加&& \
RUN pip install -i https://pypi.douban.com/simple --no-cache-dir -r requirements.txt && \
    ls /

# 将fun.py文件复制到容器中
COPY fun.py .

#
# 加了VOLUME之后可以使用-v参数来做目录映射
# VOLUME指令只是起到了声明了容器中的目录作为匿名卷,但是并没有将匿名卷绑定到宿主机指定目录的功能
# 当Dockerfile中声明了匿名卷,但是run的时候没有使用-v绑定匿名卷的话,那么docker就会在/var/lib/docker/volumes这个目录下创建一个目录来绑定匿名卷。
VOLUME /app/ # # 指定容器中监听80端口,这样就可以使用-p\-P参数来做端口映射 EXPOSE 80 # # 类似CMD,区别在于 # 如果容器运行时,又想指定其他的命令,那么ENTRYPOINT会追加,但CMD是会替换掉dockerfile里面的命令 # 如果有多个ENTRYPOINT,都会执行 ENTRYPOINT ["python", "fun.py"] # 十一 # 在容器运行时,自动执行的命令 # 如果在容器运行时,指定了命令,那么就不用自动执行 # 如果有多个CMD,那么只会执行最后一个CMD,前面的都会忽略 # 命令格式,不能直接写"ls /app/keyou",正确格式:["ls","/app/keyou"] # CMD和ENTRYPOINT往往会一起用,CMD可以作为ENTRYPOINT的参数(当启动时参数不固定时可以放在CMD中) # CMD ["/etc/passwd"]
构建镜像
  -t 取名字,最好取docker hub的用户名作为名称
  -f dockerfile路径 指定需要构建的dockerfile路径
  docker build -t image_01 dockerfile的路径(.点代表当前路径)
查看镜像构建历史
  docker history 镜像id号
 
将镜像同享
方法一:
  推送到dockerhub,首先登陆,如果已经登陆过,直接docker login即可
  docker login -u 用户名 -p 密码
  然后上传
  docker push 镜像名:版本
 
方法二:
  打包成一个压缩文件
  docker save -o image01.tar 镜像名:版本
  然后解压
  docker load -i image01.tar

posted @ 2020-10-22 20:59  SoleMemory  阅读(110)  评论(0)    收藏  举报