docker -DockerFile

1.dockerfile安装,编写

我们的镜像来源:
1.远程仓库拉取
2.用仓库做成的镜像
3.把备份的恢复
4.使用dockerfile构建
Dockerfile是由一系列命令和参数构成的脚本文件,这些命令应用于基础镜像并最终创建一个新的镜像。使用dockerfile不需要先创建容器在里面加东西,而是直接可以在镜像中构件相关的内容
对于开发人员:可以为开发团队提供一个完全一致的开发环境;
对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了
对于运维人员:在部署时,可以实现应用的无缝移植

dockerfile的命令:
1.基于哪个基础镜像构件出来的

FROM 基础镜像

2.声明镜像的创建者

MAINTAINER 创建者

3.设置环境变量 (可以写多条)

ENV key value

4.是Dockerfile的核心部分(可以写多条)

RUN command

5.将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

ADD source_dir/file dest_dir/file

6.和ADD相似,但是如果有压缩文件并不能解压

COPY source_dir/file dest_dir/file

7.和ADD相似,但是如果有压缩文件并不能解压

COPY source_dir/file dest_dir/file

8.设置工作目录,运行起这个容器,来到的路径就是这个路径
设置工作目录的作用:
1.此后执行命令默认都是在工作目录中执行
2.此后运行起来容器,默认就是进入到该目录下

WORKDIR lqz

创建一个带vim的centos镜像:
1.在当前路径下执行:

vim Dockerfile  # 必须叫这个名字
#  写入以下内容(可以拓展):
FROM centos:7  # 基于centos:7构建出来
MAINTAINER max  # 镜像创建者是max
ENV name max  # 设置环境变量
RUN yum install vim -y  # 输入命令
RUN mkdir /aaa
RUN /aaa/b.py
RUN echo 'print(1)'>/aaa/b.py  # 往b.py中写入内容
WORKDIR /aaa   # 以后进去就在aaa目录下

image
2.基于DockerFile构建镜像,引号内是镜像名字:

docker build -t='centos_max_vim' .

等待,执行完毕:
image
3.查看镜像,发现我们的镜像也在其中:

docker images

image
将该镜像运行成容器:

docker run -id --name max_container centos_max_vim

image

2.常用和不常用命令

FROM 指定基础镜像
RUN 构件镜像过程中需要执行的命令,可以有多条
CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改。

ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
EXPOSE:设置对外暴露的端口。
ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中。
VOLUME:添加数据卷
USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:设置工作目录
ONBUILD:如果制作的镜像被另一个Dockerfile使用,将在那里被执行Docekrfile命令
STOPSIGNAL:设置容器退出时发出的关闭信号。
HEALTHCHECK:设置容器状态检查。
SHELL:更改执行shell命令的程序。Linux的默认shell是[“/bin/sh”, “-c”],Windows的是[“cmd”, “/S”, “/C”]。

3.dockerfile构建一个django项目

使用docker的开发流程:
1.有一个项目正在写,写好了之后推导git上
2.从git上拉取项目
3.在项目根路径下创建一个Dockerfile文件,编辑
4.将项目推导git上(以下事情运维干)
5.运维构建镜像:docker build -t='镜像名' .
6.运行容器
7.访问宿主机的端口,就可以成功访问
实操:
1.首先容器中没有git命令,首先下载:

yum install -y git

2.下载项目:

git clone https://gitee.com/liuqingzheng/books.git

3.然后我们需要在项目路径下编写一个dockerfile

FROM python:3.8
MAINTAINER lqz
WORKDIR /soft  # 目录不存在会自动创建,并且切换到该路径下
COPY ./requirements.txt /soft/requirements.txt  # 将项目路径下的requirements.txt复制到/soft/requirements.txt
RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple
CMD ["python","manage.py","runserver","0.0.0.0:8080"]

4.构建镜像(如果项目依赖变了,需要重新构建镜像,再运行容器):

docker build -t='起个镜像名' .

image
image
5.运行成容器:

docker run -id --name=books -v /root/books/books:/soft -p 8080:8080 django_books:latest

image
做好安全组配置:
image
然后即可成功访问到项目:
image

4.docker私有仓库

docker有个远程仓库,我们可以把我们的项目传上去
公司做的镜像,一般不在远程仓库,公司会自己搭建私有仓库

4.1 镜像传到公共仓库

我们选择上传该镜像到公共仓库:
image
1.现在docker.hub上创建一个库:
image
2.给镜像打标签

docker tag 36a723d29d54 maxzkz/centos_max:v1
# 36a723d29d54是镜像id,centos_max是docker库名称

image
3.登陆docker远端

docker login
# 然后输入用户名和密码

image
image
4.提交到仓库。提交之后别人就可以下载了:

docker push maxzkz/centos_max:v1

image

4.2 镜像分层

Dockerfile的本质:每一个Dockerfile的命令(RUN后面的都是命令)都会构建一层容器,执行完毕后提交成镜像。比如我们执行了两个命令:

RUN yum install vim -y
RUN yum install git -y

那么这两部命令分别执行了两个镜像,然后提交变成两层镜像。这样做的好处是我们只传这个Dockerfile中没有的镜像,仓库中存在的镜像不会上传,提高了分发(分发就是上传下载)速度。我们下拉的时候也会下拉我们本地没有的镜像。
查看镜像分层的命令:

docker history maxzkz/centos_max:v1

image
我们在Dockerfile中写命令时可以将多个命令合为一条:

RUN python -m pip install --upgrade pip &&\
    python -m pip install --upgrade setuptools &&\
    pip install -r requirements.txt

4.3 私有仓库搭建

私有仓库类似于gitee的私有仓库,因为公司的文件需要保证私密性。和公共仓库的区别是私有仓库没有自己的通讯化界面。
自己搭建私有仓库时有以下几个选择:
1.habor:企业级私有仓库(运维来做)
2.用docker搭建私有仓库
搭建:
1.拉取registry镜像:

docker pull registry

image

2.运行容器:

docker run -di --name=registry -p 5000:5000 registry

image
3.打开浏览器 输入地址http://139.196.216.27:5000/v2/_catalog
看到
{"repositories":[]}
表示私有仓库搭建成功并且内容为空
image
4.第四步:修改daemon.json,将字典的该键值对添加到字典中:

vi /etc/docker/daemon.json
{
"insecure-registries":["47.103.74.128:5000"]
}

image
5.第五步:重启docker和registry镜像,让配置生效

systemctl restart docker
docker start registry

6.把某个镜像tag成私有仓库的镜像
docker tag 镜像名字/id 47.103.74.128:5000/django_books:v1

docker tag 568932a6ca3f 139.196.216.27/django_books:v1

image
7.提交到私有仓库

docker push 139.196.216.27/django_books
posted @   ERROR404Notfound  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
Title
点击右上角即可分享
微信分享提示