1、初识docker
1.1 docker基础
1.1.1 物理机、虚机、docker对比
上图为物理机、虚机、docker的大致对比。
特性 | 容器 | 虚机 |
---|
启动速度 | 秒级 | 分钟级 | 性能 | 接近原生 | 较弱 | 内存代价 | 很小 | 较多 | 硬盘使用 | 一般为MB | 一般为GB | 运行密度 | 单机支持上千个容器 | 一般为十几个 | 隔离性 | 安全隔离 | 完全隔离 | 迁移性 | 优秀 | 一般 |
1.1.2 使用docker
加载镜像
docker load -i myubuntu.tar
docker load < myubuntu.tar
从仓库拉取docker镜像
docker search ubunut
docker pull ubuntu
docker pull ubuntu:18.04
docker images | grep ubuntu
docker inspect ubuntu:18.04
docker rmi ${image_id}
docker rmi ubuntu:18.04
docker rmi -f ${image_id}
docker rmi -f ubuntu:18.04
运行拉取的镜像
docker run --name image_test --net=host -itd ${image_id} /bin/bash
docker run --name image_test --net=host -v /tmp:/tmp -p 8080:8080 -itd ${image_id} /bin/bash
查看容器信息
docker inspect ${container_id}
进入容器
docker exec -it ${container_id} /bin/bash
杀死容器
docker kill ${container_id} && docker rm ${container_id}
创建镜像
docker commit -m="image message" ${container_id} myubuntu:18.04
docker build -t myubuntu:18.04 .
保存镜像
docker save ${container_id} > myubuntu.tar
docker save myubuntu.tar ${container_id}
docker push ${registry}/${image_name}:${iamge_tag}
拷贝文件
docker cp file_path ${container_id}:file_path
docker cp /tmp/test.txt af8sdsddefg:/tmp/
docker cp ${container_id}:file_path file_path
docker cp af8sdsddefg:/tmp/test.txt /tmp/
1.1.3 Dockerfile
指令 | 作用 |
---|
ARG | 定义创建镜像过程中使用的变量 | FROM | 指定创建镜像使用的基础镜像 | LABEL | 为生成的镜像添加元数据标签信息 | EXPOSE | 声明镜像内服务监听的端口 | ENV | 指定环境变量 | ENTRYPOINT | 指定镜像的入口命令,可以理解为启动脚本 | VOLUME | 创建一个数据卷挂载点 | USER | 指定运行容器的用户名或者UID | WORKDIR | 配置工作目录 | ONBUILD | 创建子镜像时指定自动执行的操作命令 | STOPSIGNAL | 指定退出的信号值 | HEALTHCHECK | 配置所启动容器如何进行健康检查 | SHELL | 指定默认shell类型 | RUN | 运行指定命令 | CMD | 启动容器是指定默认执行的命令,不同于启动脚本 | ADD | 添加内容到镜像 | COPY | 复制内容到镜像 |
ARG
格式:ARG < name > [ = < default value >] 当镜像编译成功后,ARG指定的变量将不再存在(ENV指定的在)
FROM
格式:FROM < image >:< tag > 任何一个Dockerfile的第一条指令必须为FROM命令
EXPORE
格式:EXPORE < port > 该指令只是起到了声明的作用,并不会自动完成端口的映射
ENV
格式: ENV < key >=< value > 指定的环境变量可以被后续RUN命令使用,镜像启动的容器中也会存在
ENTRYPOINT
格式:ENTRYPOINT [“exectable”,“param1”,“param2”],exec调用执行 格式:ENTRYPOINT command param1 param2,shell中执行 此时,CMD指定值讲作为根命令的参数,每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起作用,在运行时,可以被–entrypoint参数覆盖掉,如docker run --entrypoint
RUN
每条RUN指令将在当前镜像基础上执行指定的命令,并提交为新的镜像层,当命令较长时,可以使用\来换行,避免出现太多的层。
CMD
格式:CMD [“exectable”,“param1”,“param2”],相当于执行exectable param1 param2,推荐方式 格式:CMD command param1 param2,在默认的shell中执行,提供给需要交互的应用 格式:CMD [“param1”,“param2”],提供给ENTRYPOINT的默认参数 每个Dockerfile只能有一条CMD指令,如果指定了多条命令,只有最后一条会被执行,如果用户启动容器时候手动指定了运行的命令(作为run命令的参数),则会覆盖掉CMD指定的命令
ps:好久没写博客了,是时候该把博客捡起来了(感谢某人的督促,不然我也懒得写😑),今天主要是写了一些docker的基本知识,写的很杂很乱,后面有时间在接着整理吧【2022/1/23日深夜于北京】
|