dockerfile

Dockerfile Dockerfile是啥 Dockerfile 是一个文本文件,其中包含了构建docker 镜像的所有指令 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明 通过定义一系列命令和参数,Dockerfile 指导 Docker 构建一个自定义的镜像 docker build docker build 会根据Dockerfile中的指令,依次执行并构建镜像,指令如下: docker build (参数) [image_name]:[tag] [Path] 参数说明: -f 指定Dockerfile的位置(如果不在当前目录下) -t 设置镜像名称和可选的标签 --build-arg 设置构建时变量 --no-cache 不使用构建缓存 [Path]:Dockerfile 的位置,一般为 . ,表示在当前目录下寻找 注意:路径下有且仅能有一个Dockerfile文件 注意:以前是只能Dockerfile,现在dockerfile也可以了 dockerfile指令 Dockerfile 指令 说明 FROM 指定基础镜像,用于后续的指令构建。 MAINTAINER 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令) LABEL 添加镜像的元数据,使用键值对的形式。 RUN 在构建过程中在镜像中执行命令。 CMD 指定容器创建时的默认命令。(可以被覆盖) ENTRYPOINT 设置容器创建时的主要命令。(不可被覆盖) EXPOSE 声明容器运行时监听的特定网络端口。 ENV 在容器内部设置环境变量。 ADD 将文件、目录或远程URL复制到镜像中。 COPY 将文件或目录复制到镜像中。 VOLUME 为容器创建挂载点或声明卷。 WORKDIR 设置后续指令的工作目录。 USER 指定后续指令的用户上下文。 ARG 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。 ONBUILD 当该镜像被用作另一个构建过程的基础时,添加触发器。 STOPSIGNAL 设置发送给容器以退出的系统调用信号。 HEALTHCHECK 定义周期性检查容器健康状态的命令。 SHELL 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。 接下来,会稍微细致的讲一下常用的指令 ...

October 7, 2024 · 4 min · 838 words · Chenjx12

docker swarm

Docker Swarm 学习来源: 腾讯云 菜鸟教程 Swarm 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 docker swarm:管理集群 # 初始化一个swarm docker swarm init [OPTIONS] # 选项: --advertise-addr string # 发布的地址(格式:<ip|interface>[:port]) --force-new-cluster # 强制从当前状态创建一个新的集群(去除本地之外的所有管理器身份) --cert-expiry duration # 节点证书有效期(ns|us|ms|s|m|h)(默认为2160h0m0s) --data-path-addr string # 用于数据路径通信的地址或接口(格式: <ip|interface>) --data-path-port uint32 # 用于数据路径流量的端口号(1024 - 49151)。如果没有值,则默认端口号4789 --dispatcher-heartbeat duration # 调度程序的心跳周期(ns|us|ms|s|m|h)(默认为5s) --listen-addr node-addr # 监听地址(格式: <ip|interface>[:port]) (默认 0.0.0.0:2377) # 查看加入节点到集群的命令及令牌(token) docker swarm join-token [OPTIONS] (worker|manager) # 选项: -q, --quiet # 只显示令牌 --rotate # 使旧令牌无效并生成新令牌 # 查看加入工作节点到集群的命令及令牌 docker swarm join-token worker # 查看加入管理节点到集群的命令及令牌 docker swarm join-token manager # 将节点加入swarm集群,作为一个manager或worker docker swarm join [OPTIONS] HOST:PORT # 选项: --advertise-addr string # 发布的地址 (格式: <ip|interface>[:port]) --availability string # 节点的可用性 ("active"|"pause"|"drain") (default "active") --data-path-addr string # 用于数据路径通信的地址或接口 (格式: <ip|interface>) --listen-addr node-addr # 监听地址 (格式: <ip|interface>[:port]) (default 0.0.0.0:2377) --token string # 进入的swarm集群的令牌 # 主动退出集群,让节点处于down状态(在需要退出Swarm集群的节点主机上执行命令) docker swarm leave [OPTIONS] # 选项: -f, --force # 强制。Manager若要退出 Swarm 集群,需要加上强制选项 ## 移除一个work-node节点主机的完整步骤: # 1.在管理节点上操作,清空work-node节点的容器。id 可以使用命令 docker node ls 查看 docker node update --availability drain [id] # 2.在work-node节点主机上操作,退出集群 docker swarm leave # 3,在管理节点上操作,删除work-node节点 docker node rm [id] # 若想解散整个集群,则需先移除所有work-node节点主机,然后所有管理节点也退出集群 # 更新 swarm 集群的配置 docker swarm update [OPTIONS] # 选项: --autolock # 更改管理器自动锁定设置(true|false) --cert-expiry duration # 节点证书有效期(ns|us|ms|s|m|h)(默认为2160h0m0s) --dispatcher-heartbeat duration # 调度程序心跳周期(ns|us|ms|s|m|h)(默认为5s) docker node:管理swarm集群节点 # 查看集群中的节点 docker node ls #选项: -f, --filter filter # 根据所提供的条件过滤输出。(格式:key=value) # 目前支持的过滤器是:id, label, name, membership[=accepted|pending] # , role[manager|worker] -q, --quiet # 只显示id # 查看运行的一个或多个及节点任务数,默认当前节点 docker node ps [OPTIONS] [NODE...] #选项: -f, --filter filter # 根据所提供的条件过滤输出 -q, --quiet # 只显示id # 将worker角色升级为manager docker node promote NODE [NODE...] # 将manager角色降级为worker docker node demote NODE [NODE...] # 查看节点的详细信息,默认json格式 docker node inspect 主机名 # 查看节点信息平铺格式 docker node inspect --pretty 主机名 # 从swarm中删除一个节点 docker node rm 主机名 # 从swarm中强制删除一个节点 docker node rm -f 主机名 # 更新一个节点 docker node update [options] 主机名 # 选项 --label-add list # 添加节点标签(key=value) --label-rm list # 删除节点标签 --role string # 更改节点角色 ("worker"|"manager") --availability active/pause/drain # 设置节点的状态 # active 正常 # pause 暂停。调度程序不向节点分配新任务,但是现有任务仍然保持运行 # drain 排除自身work任务。调度程序不向节点分配新任务,且会关闭任何现有任务并在可用节点上安排它们 docker service:服务管理 # 列出服务列表 docker service ls # 列出服务任务信息 docker service ps [OPTIONS] SERVICE [SERVICE...] # 选项: --no-trunc # 显示完整的信息 -f, --filter filter # 根据所提供的条件过滤输出。过滤只运行的任务信息:"desired-state=running" -q, --quiet # 只显示任务id # 查看服务内输出 docker service logs [OPTIONS] SERVICE|TASK # 选项: --details # 显示提供给日志的额外细节 -f, --follow # 跟踪日志输出 --since string # 显示自时间戳 (2013-01-02T13:23:37Z) 或相对时间戳 (42m for 42 minutes) 以来的日志 -n, --tail string # 从日志末尾显示的行数(默认为“all”) -t, --timestamps # 显示时间戳 # 更新服务的相关配置 docker service update [options] 服务名 # 选项 --args "指令" # 容器加入指令 --image IMAGE # 更新服务容器镜像 --rollback # 回滚服务容器版本 --network-add 网络名 # 添加容器网络 --network-rm 网络名 # 删除容器网络 --reserve-cpu int # 更新分配的cpu --reserve-memory bytes # 更新分配的内存(示例:512m) --publish-add 暴露端口:容器端口 # 映射容器端口到主机 --publish-rm 暴露端口:容器端口 # 移除暴露端口 --endpoint-mode dnsrr # 修改负载均衡模式为dnsrr --force # 强制重启服务 --config-rm 配置文件名称 # 删除配置文件 --constraint-add list # 新增一个约束 --constraint-rm list # 移除一个约束 --placement-pref-add pref # 新增一个偏好 --placement-pref-rm pref # 移除一个偏好 --config-add 配置文件名,target=/../容器内配置文件名 # 添加新的配置文件到容器内 # 查看服务详细信息,默认json格式 docker service inspect [OPTIONS] 服务名 [SERVICE...] # 查看服务信息平铺形式 docker service inspect --pretty 服务名 # 删除服务 docker service rm [OPTIONS] 服务名 [SERVICE...] # 缩容扩容服务容器副本数量 docker service scale 服务名=副本数 [SERVICE=REPLICAS...] # 创建一个服务。一般搭建好 Swarm 集群后,使用 docker stack 部署应用,此处仅作了解 docker service create [OPTIONS] IMAGE [COMMAND] [ARG...] # 选项: --name string # 指定容器名称 --replicas int # 指定副本数 --network 网络名 # 添加网络组 --mode string # 服务模式(复制或全局)(replicated | global) --reserve-cpu int # 预留的cpu --reserve-memory bytes # 预留的内存(512m) --limit-cpu int # 限制CPU --limit-memory bytes # 限制内存(512m) -l, --label list # 服务的标签(key=value) --container-label list # 容器标签(key=value) -p, --publish 暴露端口:容器端口 # 映射容器端口到主机 -e, --env MYVAR=myvalue # 配置环境变量 -w, --workdir string # 指定工作目录(示例:/tmp) -restart-condition string # 满足条件时重新启动(no | always | on-failure | unless-stopped) --restart-delay duration # 重新启动尝试之间的延迟 (ns/us/ms/s/m/h) --restart-max-attempts int # 放弃前的最大重启次数 --restart-window duration # 用于评估重启策略的窗口 (ns/us/ms/s/m/h) --stop-grace-period duration # 强制杀死容器前的等待时间 (ns/us/ms/s/m/h) --update-delay duration # 更新之间的延迟(ns/us/ms/s/m/h)(默认 0s) --update-failure-action string # 更新失败的操作("pause"停止|"continue"继续)(默认pause) --update-max-failure-ratio float # 更新期间容忍的失败率 --update-monitor duration # 每次任务更新后监控失败的持续时间(ns/us/ms/s/m/h)(默认 0s) --update-parallelism int # 同时更新的最大任务数(0表示一次更新全部任务)(默认为1) --endpoint-mode string # 负载均衡模式(vip or dnsrr) (默认 "vip") --rollback-monitor 20s # 每次容器与容器之间的回滚时间间隔 --rollback-max-failure-ratio .数值 # 回滚故障率如果小于百分比允许运行(“.2”为%20) --mount type=volume,src=volume名称,dst=容器目录 # 创建volume类型数据卷 --mount type=bind,src=宿主目录,dst=容器目录 # 创建bind读写目录挂载 --mount type=bind,src=宿主目录,dst=容器目录,readonly # 创建bind只读目录挂载 --config source=docker配置文件,target=配置文件路径 # 创建docker配置文件到容器本地目录 docker secret:管理敏感数据存储 # 查看敏感数据卷列表 $ docker secret ls # 显示一个或多个敏感数据卷的详细信息 $ docker secret inspect [OPTIONS] SECRET [SECRET...] # 选项 --pretty # 易读的格式打印信息 # 从文件或标准输入创建一个敏感数据卷作为内容 $ docker secret create [OPTIONS] SECRET [file|-] # 选项 -d, --driver string # 指定驱动 -l, --label list # 指定标签 --template-driver string # 指定模板驱动程序 # 移除一个或多个敏感数据卷 $ docker secret rm SECRET [SECRET...] # 别名:rm, remove docker config:管理配置文件 # 查看已创建配置文件 docker config ls [OPTIONS] # 选项: -f, --filter filter # 根据所提供的条件过滤输出 -q, --quiet # 只显示id # 查看配置详细信息 docker config inspect 配置文件名 # 删除配置 docker config rm CONFIG [CONFIG...] # 创建配置文件 docker config create 配置文件名 本地配置文件 # 示例:新建配置文件并添加新配置文件到服务 # 1.创建配置文件 docker config create nginx2_config nginx2.conf # 2.删除旧配置文件 docker service update --config-rm ce_nginx_config 服务名 # 3.添加新配置文件到服务 docker service update --config-add src=nginx2_config,target=/etc/nginx/nginx.conf ce_nginx docker network: 网络信息 # 查看集群网络列表 docker network ls # 将容器连接到集群网络中 $ docker network connect [OPTIONS] NETWORK CONTAINER # 选项 --alias strings # 为容器添加网络范围的别名 --driver-opt string · # 指定网络驱动程序 --ip string # 指定IPv4地址(如172.30.100.104) --ip6 string # 指定IPv6地址(例如,2001:db8::33) --link list # 添加到另一个容器的链接 --link-local-ip string # 为容器添加一个链接本地地址 # 示例 docker network connect mynet nginx # 断开一个容器与集群网络的连接 $ docker network disconnect [OPTIONS] NETWORK CONTAINER # 选项 -f, --force # 强制容器从网络断开连接 # 显示一个或多个集群网络的详细信息 $ docker network inspect [OPTIONS] NETWORK [NETWORK...] # 选项 -f, --format string # 使用给定的Go模板格式化输出 -v, --verbose # 输出详细的诊断信息 # 创建一个集群网络 $ docker network create [OPTIONS] NETWORK # 选项 --attachable # 准许手动容器连接 --aux-address map # 网络驱动使用的辅助IPv4或IPv6地址(默认映射[]) --config-from string # 要从其中复制配置的网络 --config-only # 创建仅配置网络 -d, --driver string # 管理网络的驱动程序(默认为“"bridge”)。选项:bridge、overlay、macvlan --gateway strings # 指定IPv4或IPv6主子网网关。示例:172.20.0.1 --ingress # 创建群路由-网格网络 --internal # 限制外部访问网络 --ip-range strings # 从子范围分配容器ip --ipam-driver string # IP管理驱动(默认为“default”) --ipam-opt map # 设置IPAM驱动程序的特定选项(默认map[]) --ipv6 # 启用IPv6网络 --label list # 在网络中设置元数据 -o, --opt map # 设置驱动程序特定选项(默认map[]) --scope string # 控制网络的范围 --subnet strings # 指定一个CIDR格式的网段。示例:172.20.0.0/24 # 示例: docker network create -d overlay --attachable apps_net # 移除所有未使用的集群网络 $ docker network prune [OPTIONS] # 选项 --filter filter # 提供过滤值(e.g. 'until=<timestamp>') -f, --force # 强制,没有提示确认 # 删除一个或多个集群网络 $ docker network rm NETWORK [NETWORK...] # 别名:rm, remove 开始配置 环境准备 ...

October 6, 2024 · 12 min · 2400 words · Chenjx12

docker 入门2

docker 入门2 from: chenj_x12@foxmali.com Docker Compose 腾讯云 Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务 YAML 菜鸟教程-YAML入门 基本语法 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab,只允许空格 缩进的空格数不重要,只要相同层级的元素左对齐即可 ‘#‘表示注释 数据类型 YAML 支持以下几种数据类型: 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary) 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list) 纯量(scalars):单个的、不可再分的值 YAML 对象 对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。 也可以使用 key:{key1: value1, key2: value2, …}。 还可以使用缩进表示层级关系; key: child-key: value child-key2: value2 较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value: ? - complexkey1 - complexkey2 : - complexvalue1 - complexvalue2 意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2] YAML 数组 以 - 开头的行表示构成一个数组: ...

October 5, 2024 · 14 min · 2882 words · Chenjx12

docker 容器连接

docker 容器连接 容器–网络 先前在**容器使用–启动容器** 中就讲了,docker run 后跟 -p和-P参数可以做到端口映射 和 端口随机映射 首先说明为什么要做端口映射: 容器构建了一个隔离于宿主机的环境,而外部网络只能访问到宿主机 要在宿主机外的网络仍能够访问到容器,就必须把容器内运行服务的端口映射到宿主机上 即,访问宿主机的这些端口等同于访问相应容器的端口 也就是为了容器能够被宿主机外的网络访问到,所以做了端口映射 比如运行nginx,mysql之类的服务的容器 接下来看看具体的指令该怎么用,就拿一个nginx容器做例子吧 # 端口映射 docker run -d -p 8080:80 --name test_p1 nginx 这个指令就是将容器的 80 端口映射给了宿主机的 8080 端口 这样访问宿主机的 8080 端口就可以访问到nginx服务 # 端口随机映射 docker run -d -P --name test_p2 nginx Docker会自动选择宿主机的一个空闲端口(默认是32768到61000)来进行映射 该指令不需要指定端口,它会根据容器中暴露的端口对宿主机进行随机映射 那么问题来了,我怎么知道哪些端口可用哪些不能呢 # 可以查看存活的容器 docker ps 使用该指令查看存活容器的 PORT项,那些是它正在占用的端口 当然,你也可以给它加上个 -a 和 --format参数,列出所有容器 # 查看单个容器的端口映射 docker port [container_id/name] 回显与该容器相关的所有端口映射 # 查看容器详细信息 docker inspect [container_id/name] 在输出的JSON结果中,可以找到 NetworkSettings 部分,它包含了端口映射的详细信息 容器–容器 docker除了容器和镜像,还在本地提供了容器连接的桥梁 ...

October 4, 2024 · 1 min · 208 words · Chenjx12

docker 容器使用

docker 容器使用 启动容器 docker run 使用 docker run (参数)images [COMMAND] 启动一个容器 eg:docker run -it ubuntu /bin/bash root@chenjx12:~/dc# docker run -it ubuntu /bin/bash root@e88f80e041c2:/# 发现了什么,root后面的东西变了对不对 这说明我们顺利的启动了容器,并且进入到了容器里面 现在就可以在容器里进行操作了 e88f80e041c2就是这个容器的ID,唯一的那种 如果我们选择后台运行 -d 参数,容器id会回显在终端 参数说明: -i 使用交互式操作 -t 开启终端 -d/--detach 后台运行 --name <new_name> 容器命名 -rm 退出容器时自动删除 --restart=always 挂了就自动重启 -v/--volume 挂载卷 -e/--env 设置环境变量 # 容器连接相关(后面会讲) -p 端口映射 -P 端口随机映射 /bin/bash 指明启动这个容器进入之后要执行什么命令 那docker run里的images是什么呢,它就是另一个重点,镜像 docker run -it ubuntu /bin/bash docker会先在本地查找是否有ubuntu(:latest)的镜像 如果有,就基于它创建一个容器 如果没有,它就自动执行 docker pull ubuntu:latest 拉取一个镜像下来再创建容器 停止/运行的容器 首先需要查看容器的状态,使用命令如下 docker ps (参数) = 无参数运行该命令会列出所有 “正在” 运行的容器,包括它们的容器 ID、镜像、命令、创建时间、状态、端口和名称 参数说明: -a/--all 列出所有的容器(包括已经挂掉的) -q/--quiet 只显示容器id --format 自定义输出格式 docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}" 这将按照指定的格式列出容器的 ID、名称和使用的镜像 -l/--latest 列出最近创建的容器 -n numb 后接数字列出最后创建的 numb 个容器 -f/--filter 过滤输出 一般直接使用 docker ps -a 停止容器:docker stop <容器id> 启动/重新启动容器:docker start/restart <容器id> ...

October 3, 2024 · 2 min · 235 words · Chenjx12

docker 镜像使用

docker 镜像使用 获取镜像: docker pull 使用 docker pull <image_name:tag> 从 “仓库” 中获取镜像 # tag为空的话默认为 latest 比如 docker pull ubuntu,默认拉取的镜像版本为 ubuntu:latest root@chenjx12:~/dc# docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu eda6120e237e: Pull complete Digest: sha256:b359f1067efa76f37863778f7b6d0e8d911e3ee8efa807ad01fbf5dc1ef9006b Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest 这里就是从仓库中拉取到了官方的镜像 ubuntu:latest # 批量拉取 docker pull -a/--all-tags ubuntu 批量拉取会拉取所有标签的ubuntu # 怎么拉取别人的镜像 docker pull user/repo:tag 拉取用户名为user标签为tag的repo镜像 那么要怎么知道我们拉取的镜像仓库里有没有我们要的那个版本的镜像呢 docker search 使用 docker search images 可以在仓库中搜索名为images的镜像 常用的一些选项: -f/--filter 添加条件搜索 --limit 限制搜索出的结果数量,默认为25条 --no-trunc 不截断输出,显示完整的镜像描述 eg: docker search --limit 5 ubuntu 只显示前5个搜索结果 docker search -f "is-offical=true" ubuntu 只显示官方镜像 docker search --filter "is-automated=true" ubuntu 只显示自动化构建的镜像 docker search -f "stars=100" ubuntu 只显示拥有超过100星标的镜像 使用docker search得到搜寻结果之后就能够知道哪些镜像有,哪些没有 ...

October 2, 2024 · 2 min · 271 words · Chenjx12

docker 入门1

docker 入门1 Author:chenj_x12@foxmail.com 安装 docker的安装教程可以看菜鸟的:Docker 教程 | 菜鸟教程 (runoob.com) 测试是否安装成功 # 运行:docker run hello-world,出现如下文字说明安装成功 Hello from Docker ! This message shous that your installation appears to be uorking correctly.To generate this message,Docker took the follouing steps:1. The Docker client contacted the Docker daemon., 2. The Docker daemon pulled the "hello-uorld" image from the Docker Hub.( amd64) 3. The Docker daemon created a new container from that image uhich runs theexecutable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client,uhich sent it to your terminal. 配置镜像加速 安装好docker后,需要给它配置镜像加速,毕竟直接访问太慢了 ...

October 1, 2024 · 8 min · 1673 words · Chenjx12