#打包镜像 (两种写法)
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"




