docker常用命令及dockerfile编写
- 1.docker常用命令
- 1.1镜像相关
- 1.2容器相关
- 1.3数据卷
- 1.4网络模式
- 2.Dockerfile
- 3.Dockerfile示例
1.docker常用命令
1.1镜像相关
镜像相当于是一个模板,可以实例化出很多个容器;
#查看docker版本
docker -v#查看docker默认存放目录
docker info |grep Dir#搜索查找指定镜像
docker search 名称关键字#拉取获取镜像到当前机器上
docker pull 镜像名:tag版本号#查看本地镜像
docker images#修改镜像名称和标记
docker tag 镜像id 新镜像名:新tag
docker tag 旧镜像名:旧tag 新镜像名:新tag#删除镜像
docker rmi 镜像id
docker rmi 镜像名:tag版本#列出所有镜像的id
docker images -q#查看镜像提交记录
docker history 镜像id
docker history 镜像名:tag版本#将镜像导出为tar文件
docker save 源镜像id > 保存后的文件名.tar
docker save 源镜像名:源tag版本 > 保存后的文件名.tar#导入镜像镜
docker load < 镜像文件.tar
1.2容器相关
容器是镜像创建的实例,它可以启动/删除/停止等,容器与容器之间是相互隔离的;
#用指定镜像来运行容器
docker run -d --name <运行后容器名> <容器id/容器名name:tag版本标签> /bin/bash -d 是指后台运行不会近入到容器,
--name 是指运行后容器的名字 ,
--privileged=true 获取宿主机的root权限,
--restart=always重启docker后自动重启容器,
-p 宿主机端口:容器端口 指定容器中的端口映射,
-P 容器端口随机映射到主机,
--net=host/none/dridge选择网络模式不写则默认第三种,
-v 宿主机目录:容器目录 和容器挂载共享目录#查看正在运行的容器
docker ps#查看所有容器
docker ps -a#列出所有容器的id,加上-q参数则只显示id
docker ps -qa#删除容器
docker rm <容器id>
docker rm <容器name>#启动/停止/重启运行指定容器
docker start <容器id/容器名name>
docker stop <容器id/容器名name>
docker restart <容器id/容器名name#进入指定容器内部
docker exec -it <容器id/容器名name> /bin/bash
-it 是指以终端的方式进行交互;#容器文件复制到主机中
docker cp <容器id/容器名name>:<容器中源文件路径> <主机中目标路径>
#如:docker cp testname:/root/test.txt /home#主机文件复制到容器中
docker cp <主机源文件路径> <容器名称/id>:<目标容器路径>
#如:docker cp /home/test.txt testname:/root/#导出本地容器为tar文件
#export导出的文件再import回去时无法保留镜像所有历史不能进行回滚操作
docker export id > 文件名.tar #导入容器
#导入容器会将容器变成一个新的镜像
docker import 源文件.tar 新名称:tag版本标签#提交容器为镜像 -m提交记录 ,-a提交作者
docker commit -m="xxx" -a="xxx" <容器id/容器name> <提交为镜像的名字>
#如:docker commit -m="test" -a "yu" mynginx testnginx#修改指定容器的参数配置
#不停止容器的情况下更新参数主要用于更新资源配置相关参数,无法更新挂载点、端口映射;
docker container update <更新参数>=数值 <容器名称/id>
#可更新的配置项:
#设置容器cpu调度周期时长
--cpu-period
#设置容器cpu调度周期可占用时间的最大时长
--cpu-quota
#设置容器可使用的cpu数量
--cpus
#设置容器可使用的最大内存
--memory
#设置容器可使用的内核内存最大数
--kernel-memory
#设置容器可运行的最大进程数
--pids-limit
#设置容器重启策略,值可以是:
--restart
#no,默认策略
#on-failure,容器错误退出时重启
#always,任何方式退出都会重启
#unless-stopped,总数重启容器,
--restart
1.3数据卷
对容器内的数据进行持久化操作,容器之间实现数据共享,即使容器被删除挂载的数据也保留下来
#运行指定容器并挂载目录,-p进行端口映射,-v进行目录挂载,需要注意的是挂载时主机目录,会覆盖掉容器中的目录
docker run -d --name <设置容器名> -p <主机端口>:<容器端口> -v <主机目录>:<容器目录> <指定镜像名>:<tag版本标签>
# 如:docker run -d --name mynginx -p 1080:80 -v /root/ngconf:/etc/nginx/conf.d/ -v /root/ngdata:/temp nginx:1.22.1
1.4网络模式
用--net=
指定;
--net=host
#容器不会虚拟自己的网卡和ip而是和宿主机共用一个IP和端口--net=bridge
#docker默认的网络配置,容器独立使用一个网卡,并连接到docker0虚拟网卡上面,通过docker0与宿主机进行通信--net=none
#关闭了容器的网络功能无法访问网络,与外部网络隔离--net=container:<容器name/容器id>
#指定一个已存在的容器共享ip、端口范围
2.Dockerfile
dockerfile分为四部分:
基础镜像信息
维护者信息
镜像操作指令
容器启动时默认要执行的指令
如下:
FROM
指令:
功能:
用于指定基础镜像,并且必须是第一条指令,后续的操作都是基于这个镜像的;
语法格式:
FROM <image镜像名>:<tag版本标签>
LABEL
指令:
功能:用指定dockerfile的作者维护者信息、镜像版本等;
语法格式:
LABEL <键key1>=<值value1> <键key1>=<值value1> ...
WORKDIR
指令:
功能:设置后续指令的工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD
生效,可以理解为设置这些命令执行的家目录;
语法格式:
WORKDIR <目录路径>
USER
指令:
功能:指定后续指令的用户上下文;
语法格式:
USER <用户名>
RUN
指令:
功能:用于指定在镜像构建过程中执行的命令;
语法格式:
RUN <命令comm>
CMD
指令:
功能:用于指定启动容器时默认要执行的命令,每个Dockerfile只能有一条CMD命令,多条时,最后一条命令会覆盖前面的;
语法格式:
CMD <命令comm>
ENTRYPOINT
指令:
功能:用于指定容器创建时的主要命令;
语法格式:
ENTYPOINT <命令comm>
EXPOSE
指令:
功能:用于指定容器监听的端口,告诉Docker服务器容器暴露的端口号;
语法格式:
EXPOSE <端口号1> <端口号2> ...
ENV
指令:
功能:在容器内部设置环境变量;
语法格式:
ENV <键key1>=<值value1> <键key1>=<值value1> ...
ADD
指令:
功能:将文件、目录或远程URL复制到镜像中;
语法格式:
ADD <源文件、目录路径> <目标路径>
COPY
指令:
功能:将文件或目录复制到镜像中;
语法格式:
COPY <源文件、目录路径> <目标路径>
VOLUME
指令:
功能:为容器创建挂载点;
语法格式:
VOLUME <目录路径>
执行Dockerfile
命令:docker build -t <设置镜像名>:<设置镜像标签> 指定dockerfile的目录
如:docker build -t mytest_image:latest ./
3.Dockerfile示例
例子1:我这里编写了一个常用的部署项目前端的静态资源的dockerfile;
步骤描述:
1.拉取nginx基础镜像,nginx:latest;
2.设置了维护信息,tagTest="test.test";
3.指定了nginx默认的资源检索目录作为工作目录,/usr/share/nginx/html;
4.将本地压缩文件./test-admin.zip,复制到镜像目录./,这里的./指实际上已经指向了前面设置的WORKDIR,即:/usr/share/nginx/html;
5.解压压缩包后将文件删除,以缩减镜像大小;
6.设置了容器监听的端口,80
7.执行nginx启动命令,nginx -g 'daemon off;'以前台方式启动;
- vim创建文件并填写以下内容;
vim Dockerfile
- 文件内容
FROM nginx:latest
LABEL tagTest="test.test"
WORKDIR /usr/share/nginx/html
COPY ./test-admin.zip ./
RUN unzip ./test-admin.zip && rm -rf ./test-admin.zip
EXPOSE 80
CMD nginx -g 'daemon off;'
- 执行构建
docker build -t mytest_admin_ng:latest ./
- 以镜像运行容器实例
docker run -d -p 8111:80 --name adminfront mytest_admin_ng:latest
如图构建镜像:
如图运行容器实例:
如图检查容器状态: