docker 工作

#打包镜像 (两种写法)

docker save -o nginx.tar nginx:1.21.5

docker save nginx1.21.5 > nginx.tar

#上传镜像

docker load -i nginx.tar

docker load < nginx.tar

#简单启动run一下测试打包是否正常,docker是否可用

docker run -d -p 82:80 nginx:1.21.5

#常见启动run时使用的参数

--name=

-v 挂载 没有/就是卷挂载可以docker volume ls查到,有就是普通文件挂载

-d 后台启动

-p 指定端口映射

--restart=always

#进入容器内部

docker exec -it id /bin/bash

#想要修改里面容器里面的文件就提前挂载出来在外面修改

#部署私有镜像仓库

docker run -d -v /registry:/var/lib/registry -p 5000:5000 --restart=always --name=registry registry:latest

#删除容器

#写错名了删个容器

docker rm regietry

#删镜像

docker rmi registry:latest

#查看容器进程

docker top name

#上传镜像到仓库

#先打标签

docker tag nginx:1.21.5 127.0.0.1:5000/nginx:latest

#再上传

docker push 127.0.0.1:5000/nginx:latest

#查看是否上传成功

curl 127.0.0.1:5000/v2/_catalog

#docker常见命令

docker logs -f

docker images -q #获取镜像id

docker ps -q

docker ps -a

docker inspect

docker exec

dockers history 可以看到镜像构建的过程

docker stats 查看容器状态

docker volume ls 查看数据卷

#不像进容器内部只是执行一些查看命令(比如查看容器top)

docker exec -it name top

#查看容器镜像的占用信息

docker system df

#查看启动命令runlike

#先安装python环境

yum install python3 python3-pip -y

pip3 install runlike

echo 'export PATH=$PATH:/usr/local/bin' >> /etc/profile

source /etc/profile

#查看nginx容器启动时的容器参数

runlike nginx

#dockerfile------(解决镜像的一些构建问题)

执行命令

docker build 路径或url

# -f 参数可以指定哪个文件是dockerfile文件不用文件名是Dockerfile,后面都要跟上dockerfile所在目录路径

docker build -f /dockerfile-dir/test /dockerfile-dir

docker build -f /dockerfile-dir/test .

# -t 参数是构建镜像时给标签命名和版本,

docker build . -t centos:v1

#dockerfile内容

FROM 基于某个基础镜像开始构建

RUN 构建镜像时可以执行的命令

#RUN 两种写法,一种直接shell命令 一种用json格式"yum","install","-y","nginx",用shell就是用子进程可以基础前面设置的环境变量 ,而json会新开一个主进程之前的环境变量就失效了,推荐用shell

# 内有乾坤这个run,如果重复执行时会判断这个步骤也没有变如果变了就会执行,没变就会利用缓存(use cache),不仅是命令变,步骤变也一样相同命令原本是step2,变成3了也会重新执行**,是一旦哪一步开始变化后面的内容都会重新执行即使步骤和命令没变(所以要新增run内容最好在最后加)**

CMD ENTRYPOINT

#这是生产镜像最标准的写法:ENTRYPOINT 定程序,CMD 给默认参数。

#cmd会被参数覆盖,entrypoint不会

RUN = 做蛋糕的时候加面粉、奶油、水果,烤好就固定了

ENTRYPOINT = 蛋糕的主胚子,一直是它

CMD = 默认配的叉子,你想换勺子也可

LABEL 对镜像的一些描述

EXPOSE 对外暴露端口,只暴露不映射

ENV 环境变量

ARG 也是环境变量可以在构建时动态传参但也只有在构建时起作用build,

例: docker build . --build-arg=BUILD_VERSION=3.0

ADD #add,copy都可以传文件,但add可以自动解压,但有时会解压失败

COPY #所以更通常用copy然后用run解压

VOLUME /data

#就是把容器里的/data直接创建卷并挂载过去(默认在/var/lib/docker/volume/)

不能实现目录挂载,docker-compose.yml才可以

USER #指定某个用户执行run cmd ,entrypoint

WORKDIR #指定工作目录

onbuild 再执行基础镜像前需要执行的操作

healthcheck 健康检查

#docker-compose.yml------(镜像的使用)

#docker-compose应用

docker compose config 检查语法

docker compose up -d

#有时第一次构建错了,只改了文件就再次构建会有缓存任然拿旧镜像搞的一直错

可以加--build

#容器停止,down不要轻易用不然有一些数据卷会重启启动数据丢失

docker compose pause

#flask-web简单部署

version: "3.6" #必须

services: #必须

flask: #服务名自己取

build: . #dockerfile路径

ports:

  • 5000:5000

container_name: flask #镜像名

networks: #网络

  • web

redis:

image: redis #不用dockerfile就用image

container_name: redis2

networks:

  • web

volumes:

  • redis_data:/data #卷挂载

networks:

web:

driver: "bridge"

volumes: #创建卷

redis_data:

driver: "local"

相关推荐
2601_9538246110 小时前
【计算机毕业设计】基于Spring Boot的画师接稿平台设计与实现
java·spring boot·后端
小宋102110 小时前
不用学算法也能玩转 AI?普通 Java 程序员转 AI 应用开发路线
java·人工智能·重构
我是唐青枫11 小时前
Java Jetty 实战详解:从嵌入式 HTTP 服务到 Spring Boot 容器替换
java
带刺的坐椅11 小时前
当所有人都在用 TS/Python 写 Agent,我们为什么坚持 Java
java·ai·solon·codex·opencode·soloncode
小王师傅6611 小时前
英语学习记
java·学习
早点睡啊Y12 小时前
深入学LangChain官方文档:Observability 与 Studio——先看清 Agent 到底做了什么
java·数据库·langchain
雨落在了我的手上12 小时前
Java数据结构(六):链表的介绍
java·开发语言·数据结构
独隅12 小时前
DevEco Code Plan+Build 双 Agent 协同开发效率实测
java·开发语言
吃饱了得干活13 小时前
@Transactional 又失效了?把这 8 个坑全填了!
java·后端·spring
今天AI了吗13 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring·机器学习