网站外包的恶意刷流量,餐饮技术支持东莞网站建设,广州软件开发公司排行榜,网站建设切片效果是什么文章目录 1.Images2.Container3.DockerfileENTRYPOINT和CMDCOPY和ADDLABLE、EXPOSE和VOLUME卷中的数据是如何做数据备份的#xff1f; ARG和ENVHEALTHCHECK 跟着b站
胖虎遛二狗学习
Docker动手入门 #xff5c; 大模型工程师必备技能 #xff08;#x1f389;已完结… 文章目录 1.Images2.Container3.DockerfileENTRYPOINT和CMDCOPY和ADDLABLE、EXPOSE和VOLUME卷中的数据是如何做数据备份的 ARG和ENVHEALTHCHECK 跟着b站
胖虎遛二狗学习
Docker动手入门 大模型工程师必备技能 已完结 docker是通用的跨平台解决方案学习docker需要一些linux的基础 镜像是一个二进制的文件可以理解为一个模版在这个模版上可以创建容器。镜像是环境和代码是不能跑的东西 容器实际是一个可以运行的东西并且在镜像的基础上可以运行多个。 docker 命令 -h 或者 --help可以查看docker命令的用法
1.Images docker images # 列出镜像
docker image ls # 同样是列出镜像
docker search hello-world # 查找名为hello-world的镜像在docker hub中查找
docker pull hello-world #拉取一个名为hello-world的镜像
docker rmi hello-world # 删除一个名为hello-world的镜像
docker rmi -f hello-world # 强制删除一个名为hello-world的镜像
docker tag ee3 jiaoyidi/hello-world:1.0 把一个hello-world的镜像名改成自己喜欢的镜像名带上了账户id和相同镜像名hello-world用于将一个镜像提交到公共仓库的时候用到
jiaoyidi是docker的账号idjiaoyidi/hello-world表示这个账户下的一个仓库1,0就是版本号修改完镜像名称就可以把这个镜像推送到公共仓库中去
docker push jiaoyidi/hello-world:1.0 把刚才的镜像推送上去
别人搜索我推送的镜像docker search jiaoyidi/hello-world
推送一个离线的镜像docker save -o hw.tar jiaoyidi/hello-world # 是把镜像中的文件放到一个文件中变成一个包没有进行压缩。hw.tar是起的一个镜像文件名
tar只是打包
使用到tar.gz才是先打包再压缩
别人收到镜像文件该如何使用docker load -i hw.tar # 就是将镜像文件hw.tar输出出来
tag功能是给镜像打一个别名
docker history 镜像名 # 查看一个镜像以往被修改过的历史
docker inspect 镜像名 # 查看镜像中的内容2.Container docker ps # 看正在运行的容器 容器与宿主机隔离宿主机访问容器的服务服务是api的形式进行访问的 0.0.0.0::5005-5000/tcp这个代表宿主的机的50005端口可以访问到容器的5000端口 NAMES如果不指定别名的话会随机生成一个别名
docker ps -a # 把所有的服务全部列出来
docker stop e9c # 把e9c这个服务给停掉
docker start e9c # 把e9c这个服务给开启
docker restart e9c # 重启e9c这个服务重启的意思应该是将关闭与开启的动作合在一起
docker rm e9c # 删除e9c这个容器前提先要关闭这个容器如果强制删除则使用docker rm -f e9c不推荐使用
docker logs 容器名 # 查看容器的日志。docker logs -f 容器名 # 跟踪日志输出每次有访问都会记录在容器日志docker exec -it 291 bash # 进入291这个容器中执行bash这个命令。-i表示交互性的 -t 表示终端 两个命令合在一起意思就是进入一个可交互的终端中去解释参数中一个-和两个–的区别一个-后面带的是一个字符两个-后面跟的是一个命令如–rm而不是像上面一样两个命令拼在一起的-i和-t合在一起是-it 如果临时要让宿主机与容器进行文件上的交互使用下面指令
docker cp ./hw.tar 291:/app/hw.tar # 将宿主机上的一个文件hw.tar拷贝到容器内部app下的hw.tardocker cp 291:/app/hw.tar ./hw.tar # 将容器内部app下的hw.tar拷贝到宿主机上docker stats # 查看docker占用的资源
docker networ # 查看网络容器可以通过桥接访问宿主机的内容宿主机为了保证容器是绝对干净的所以不能访问容器的内容如果要使用宿主机去访问容器内的东西需要做端口映射即0.0.0.0::5005-5000/tcp这样一个东西
docker run ee3 # 运行起来一个容器
docker run -d ee3 # 运行起来一个容器的同时不会占用当前的终端界面d表示detach分离的意思可以理解为后台执行
docker run -it 4b1 bash # 启动一个容器4b1生成一个可以交互的终端界面进入之后给一个初始命令bash
docker run --rm -d 4b1 # 在后端执行一个容器之后如果这个容器被停止之后会自动销毁通过start会restart等都启动不了那个容器了
docker attach d1f # 进入到一个正在运行的终端
create这个命令不常用
kill 强制杀掉一个容器也不常用
docker top 看下进程的占用不常用
docker commit 09d 09d:1.0 # 把一个容器变成一个镜像不建议这么做原因是这么构建的镜像相当于是一个黑盒有很高的不确定性。构建镜像的最好方法是从dockerfile去构建一个镜像这样构建出的镜像别人可以复现出一个一模一样的镜像。3.Dockerfile
自己构建一个镜像给别人用
FROM python3.10-slim # 一个基础的镜像开始如果这个镜像本地不存在的话会从dockerhub上下载WORKDIR /app # 设置docker的工作路径约定把所有的代码放在这个里面这个路径是项目的根路径COPY . /app/ # 将宿主机上当前路径下所有的文件都拷贝到指定目录下RUN pip install flask # 执行命令这个命令可以是任何linux上一个命令CMD [python“app.py”] # 以上操作执行完会构建出一个镜像执行CMD会启动容器是项目的入口docker build -t d1 . # 根据当前目录下的一个Dockerfile文件去编译为一个镜像.表示当前目录-t是为镜像设置一个标签标签名为d1
ENTRYPOINT和CMD
① ENTRYPOINT [echo“1”]
② CMD [“echo”1]单独执行第1条命令则会输出1 命令是docker run d1 如果命令 docker run d1 2即2可以作为参数进行输入输出是覆盖掉默认的1 单独执行第2条命令则会输出1 命令是docker run d1 如果命令 docker run d1 2即2不可以作为参数进行输入不能覆盖掉默认的1此时将报错 常见的用法是合在一起
ENTRYPOINT [echo]
CMD [1]功能是以下 docker run d1 # 默认打印1 docker run d1 2 # 将2做为参数输入进去此时将打印2
COPY和ADD
COPY . /app/ # copy将dockerfile所在的文件夹下的内容复制到/app/下面 ADD docs.tar.gz /app/ # 可以实现和copy同样的功能具备额外的两个功能1、可以在网上下载文件生产环境上基本不用2、如果有tar包可以自动解压这种功能也不用因为它不显示解压过程可读性差 RUN tar -xvf # 如果想解压直接写解压命令可读性强
LABLE、EXPOSE和VOLUME
LABLE maintainer 胖虎遛二狗 # 写过阅读dockerfile的人看的
EXPOSE 5000 # 把容器中的端口暴露出来
VOLUME [./data] # 声明容器中./data是用来存放数据的可以与宿主机向连也可以docker中的卷相连上面的三个命令写不写都不对镜像构成影响只是为了声明别人镜像中有这些信息 maintainer的命令已经不用了 user指定执行默认角色是root shell改shell脚本 healthcheck
FROM python3.10-slim WORKDIR /app LABLE maintainerEXPOSE 5000VOLUME [./data]COPY . /app/RUN pip install flaskCMD [python“app.py”] 构建上面这个镜像docker build -t d4 . 运行上面的镜像docker run -d -p 5001:5000 -v ./docs:/app/docs q4 -p:容器内部app.py使用的是5000端口如果要让容器外也能访问容器内部的程序需要做端口转发转发在命令中体现5001:5000 -v 是要将宿主的文件与容器内的文件进行交互./docs:/app/docs表示将宿主机当前文件夹下docs与容器中/app/docs关联在起来也就是这两个文件夹里面的文件的操作都是互通的比如在宿主机上删除和创建、容器内部文件的删除与创建是同步的 q4 表示执行的是q4这个镜像 touch newfile.txt # 创建一个空文件 在实际开发中不建议把宿主机的文件与容器的文件绑定在一起 风险1如果容器中某个文件是与宿主机关联的宿主机上的文件被删除了那么容器崩溃了此时将会报错 风险2绑定后运行效率低不如利用容器自身的卷管理效率高
docker volume create vvv # 新创建一个卷卷是docker自己维护的
docker volume ls # 列出所有的卷
docker run -d -v vvv:/app/docs q4 # 将容器中卷vvv与容器q4中的/app/docs绑定在一起使用卷的方式可以实现容器之间的文件通信但不适合实时通信。 卷的作用 持久化存储 卷用于保存容器中的数据即使容器被删除卷中的数据仍然保留。 数据共享 卷可以在容器与主机之间共享数据也可以在同一主机的多个容器之间共享数据。 虽然卷的主要用途不是通信但可以通过共享卷实现容器之间的数据交换。 下面这两个命令可以实现上面图中表示的功能
docker cp # 把文件从容器拷贝到宿主机把宿主机的文件拷贝到容器内
docker volume # 将宿主机的文件与容器中的文件绑定在一起将卷与容器中的文件绑定在一起docker run --mount typevolumesourcemy-volume target/data image-xx # mount命令中type填卷的名字source的值写源是什么target的值写目标是什么image-xx就是写docker run的镜像名字 docker run -v my-volume:/data image-xx
docker volume create v2 # 创建一个名为v2的卷 docker volume rm v2 #删除卷为v2的卷删除是有条件的就是和卷相关的镜像和容器必须都清理掉才能删除卷
卷中的数据是如何做数据备份的
看下面的命令
docker run --rm -it -v v1:/app/data1 -v ./docs:/app/data2 4b1 bash这条命令将v1卷与容器中的data1进行绑定将宿主机的./docs与容器中的data2进行绑定将data1中的数据复制到data2中。–rm表示表示容器在退出后会自动删除。适合临时测试或调试场景避免留下无用的容器。 数据备份目标将v1的数据备份到docs将 data1 中的数据拷贝到 data2 中会实现以下效果 数据从卷 v1 复制到主机目录 ./docs。data1 对应的是 Docker 命名卷 v1 的内容。data2 对应的是主机上的目录 ./docs 的内容。将 data1 中的数据拷贝到 data2相当于将 Docker 卷 v1 中的数据复制到主机目录 ./docs 中。
利用卷做数据备份的示例场景 假设 主机上有一个目录 ./docs里面包含一些文件。 主机上有一个命名卷 v1里面也包含一些文件。
执行命令后 1、容器启动并挂载了 v1 和 ./docs。 2、进入容器的 Bash 终端后可以访问 /app/data1 和 /app/data2 目录 /app/data1 包含卷 v1 的内容。 /app/data2 包含主机目录 ./docs 的内容。 3、在容器中进行的任何修改如创建、删除、修改文件都会反映到主机上的卷或目录中。 4、退出容器后容器会自动删除但卷和目录中的数据会保留。
ARG和ENV
下面这两个命令有点云里雾里还得再研究一下
ARG APP_VER1.0 # 主要用于构建容器过程中
ENV APP_ENV1.0 # 主要用在容器运行过程中RUN echo “$APP_VER” # 打印APP_VER这个变量
RUN echo “$APP_ENV”运行docker build -t q5 . 显示下面内容 运行docker run -it q5 bash并执行env命令查看APP_ENV变量值 docker build --build-arg APP_VER2.0 --build-arg APP_ENV2.0 -t q6 . 可以通过变量APP_VER来将版本号传进去但是上面中的命令不会改变APP_ENV
HEALTHCHECK
HEALTHCHECK --interval10s --timeout3s --retries3 CMD curl--fail http://localhost:5000/ || exit 1HEALTHCHECK是一个定时命令会不断地测试这个容器会不断地运行执行的命令是CMD curl–fail http://localhost:5000/不断地调用5000端口如果不能调用成功就会报错–interval10s是每隔10s进行测试一次如果超时3s --timeout3s --retries3会重复请求3次 执行docker run -d -p 5005:5000 q7 可以查看容器的运行状态