修改Docker文档目录层级,更新Docker脚本,更新Docker文档
All checks were successful
continuous-integration/drone Build is passing

This commit is contained in:
2025-11-06 23:06:28 +08:00
parent 05791351c3
commit 103ee74cab
36 changed files with 1731 additions and 133 deletions

View File

@@ -0,0 +1,188 @@
> 本文作者:丁辉
# DockerHub上传双架构镜像
## Docker manifest 推送双架构镜像
[官网文档](https://docs.docker.com/engine/reference/commandline/manifest/)
1. 构建并推送镜像
- X85执行
```bash
docker build -t offends/demo-x86:v1 .
docker push offends/demo-x86:v1
```
- arm执行
```bash
docker build -t offends/demo-arm:v1 .
docker push offends/demo-arm:v1
```
2. 创建 manifest
```bash
docker manifest create offends/demo:v1 \
offends/demo-x86:v1 \
offends/demo-arm:v1
```
3. 为镜像指定架构
```bash
docker manifest annotate offends/demo-x86:v1 \
offends/demo-x86:v1 \
--os linux --arch x86_64
docker manifest annotate offends/demo-arm:v1 \
offends/demo-arm:v1 \
--os linux --arch arm64 --variant v8
```
4. 查看
```bash
docker manifest inspect offends/demo:v1
```
5. 推送
```bash
docker manifest push offends/demo:v1
```
## Docker Buildx 推送双架构镜像
[Buildx二进制文件下载](https://github.com/docker/buildx/releases)
[模拟仓库文档](https://github.com/tonistiigi/binfmt)
[官网文档](https://docs.docker.com/build/building/multi-platform/)
1. 安装 Buildx
```bash
mkdir -p ~/.docker/cli-plugins
mv buildx-v*.linux-amd64 ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx
docker buildx version
```
2. 添加模拟仓库
```bash
docker run --privileged --rm tonistiigi/binfmt --install all
```
> 内核版本需要升级,如果过低无法添加成功
3. 查看
```bash
docker buildx ls
#一下是输出
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running v0.8+unknown linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6
```
4. 创建 builder 示例
```bash
docker buildx create --name dmeo --use
```
5. 构建混合建构镜像
```bash
docker buildx build --platform linux/amd64,linux/arm64/v8 -t demo:v1 --push .
```
## Docker Buildx使用私有仓库 推送双架构镜像
### 部署私有镜像仓库
[Docker hub文档](https://docs.docker.com/registry/)
[GitHub文档](https://github.com/distribution/distribution)
1. 启动镜像仓库
```bash
docker run -d \
--name docker-registry \
--restart=always \
-p 5000:5000 \
-v /root/private-registry:/var/lib/registry \
registry
```
2. 将本机Docker添加非安全仓库
> Buildx 只允许 https 协议的镜像仓库使用,这里的方法之建议测试使用
```bash
cat > /etc/docker/daemon.json <<EOF
{
"experimental": true,
"insecure-registries": ["192.168.1.10:5000"]
}
EOF
```
3. 重启 docker 进程启用
```bash
systemctl restart docker
```
4. 将 buildkit 镜像推送到私仓
```bash
docker tag moby/buildkit:buildx-stable-1 192.168.1.10:5000/buildkit:buildx-stable-1
docker push 192.168.1.10:5000/buildkit:buildx-stable-1
```
5. 新增 buildkit 私仓配置
```bash
cat > /etc/buildkit/buildkitd.toml << EOF
debug = true
[registry."192.168.1.10:5000"]
http = true
insecure = true
EOF
```
6. 创建 builder
```bash
docker buildx create --use \
--name builder \
--driver-opt image=192.168.1.10:5000/buildkit:buildx-stable-1 \
--config /etc/buildkit/buildkitd.toml
```
7. 构建混合建构镜像
```bash
docker buildx build --platform linux/amd64,linux/arm64/v8 -t 192.168.1.10:5000/demo:v1 --push .
```
8. 查看
```bash
curl http://192.168.1.10:5000/v2/_catalog
```
### 清理
删除构建器实例
```bash
docker buildx rm builder
```

View File

@@ -0,0 +1,63 @@
> 本文作者:丁辉
# Docker 上下文
## 基础命令
> 示例新上下文名为: docker-node2
- 查看当前上下文
```bahs
docker context ls
```
- 详细查看上下文信息
```bash
docker context inspect default
```
- 创建新的上下文
```bash
docker context create docker-node2 --docker host=tcp://docker:2375
```
- 切换上下文
```bash
docker context use docker-node2
```
> 通过变量切换
>
> ```bash
> export DOCKER_CONTEXT=docker-node2
> ```
>
> 全局`--context`标志覆盖上下文
>
> ```bash
> docker --context production container ls
> ```
- 导出上下文
```bash
docker context export docker-node2
```
- 导入上下文
```bash
docker context import docker-node2 docker-node2.dockercontext
```
- 更新上下文
```bash
docker context update docker-node2 --description "Test context"
```

View File

@@ -0,0 +1,117 @@
> 本文作者:丁辉
# Docker基础命令
> 当然太简单的咱们就不记了,闭眼都会
## 基础命令
- 查看指定 Docker 镜像的历史记录,这个命令可以帮助你了解镜像是如何构建的
```bash
docker image history app:v1
```
## Docker镜像批量打包
第一种
```bash
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o images.tar
```
第二种
> 将需要统一打包的镜像写在文件内
```bash
cat > images.txt <<EOF
nginx:alpine
nginx:latest
EOF
```
打包
```bash
docker save -o images.tar.gz $(cat images.txt)
```
## 清理资源命令
- 批量删除 Exited 容器
```bash
docker rm $(docker ps -q -f status=exited)
```
- 移除所有没有使用的镜像
```bash
docker image prune -a
```
> 跳过警告提示:`--force`或`-f`
>
> ```bash
> docker image prune -f
> ```
>
> 清理所有无用的镜像
>
> ```bash
> docker image prune --all --force
> ```
>
> 超过24小时创建的镜像
>
> ```bash
> docker image prune -a --filter "until=24h"
> ```
- 清理不再使用的移除容器
```bash
docker container prune
```
- 移除卷
```bash
docker volume prune
```
- 移除网络
```bash
docker network prune
```
- 清理卷
```bash
docker system prune --volumes
```
- 用于清理 Docker 系统中不再使用的资源,包括容器、镜像、网络和数据卷
```bash
docker system prune -a
```
## 基本构建参数
| 参数 | 描述 | 用法示例 |
| ------------------------- | ------------------------------------------------------------ | --------------------------------------------------- |
| `--target` | 选择构建过程中的目标阶段Stage。 | `docker build --target my-stage .` |
| `--no-cache` | 强制忽略缓存,每个指令都将重新执行。 | `docker build --no-cache .` |
| `--build-arg` | 设置构建过程中的参数变量。 | `docker build --build-arg MY_VAR=value .` |
| `--squash` | 合并镜像的历史记录以减小镜像层级数和总体积。 | `docker build --squash -t myimage:latest .` |
| `--disable-content-trust` | 在执行 `docker push` 和 `docker pull` 等命令时禁用内容信任。 | `docker build --disable-content-trust -t myimage .` |
## 启动参数
| 参数 | 描述 | 用法示例 |
| ----------------- | -------------------------------------- | ------------------------------------ |
| `--cpus=2` | 限制容器使用的 CPU 核心数量为 2 个。 | `docker run --cpus=2 myimage` |
| `--memory="200m"` | 限制容器可用的内存为 200 兆字节 (MB)。 | `docker run --memory="200m" myimage` |

View File

@@ -0,0 +1,74 @@
> 本文作者:丁辉
# Docker常用配置文件配置
## 更改IP池
- 添加如下参数
```bash
vi /etc/docker/daemon.json
```
```json
{
"default-address-pools" : [
{
"base" : "192.168.0.0/16",
"size" : 24
}
]
}
```
## 指定的 Cgroups 驱动程序
- 添加如下参数
```bash
vi /etc/docker/daemon.json
```
```bash
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
```
- 验证
```bash
docker info|grep "Cgroup Driver"
```
## Docker启用实验性CLI功能
**第一种**
- 客户端开启
```bash
vi ~/.docker/config.json
```
```bash
{
"experimental": "enabled"
}
```
**第二种**
- 服务端开启
```bash
vi /etc/docker/daemon.json
```
```bash
{
"experimental": true
}
```

View File

@@ -0,0 +1,33 @@
> 本文作者:丁辉
# Docker更改IP池
1. 更改配置文件
```bash
vi /etc/docker/daemon.json
```
内容如下
```bash
{
"default-address-pools" : [
{
"base" : "192.168.0.0/16",
"size" : 24
}
]
}
```
2. 重启 Docker
```bash
systemctl restart docker
```

View File

@@ -0,0 +1,99 @@
> 本文作者:丁辉
# Docker 构建镜像
> Docker 构建镜像有很多门道,今天咱就来说道说道,直接实际演示
>
> 为了方便简单演示,咱们就随便打包一份文件当作示例好了
## 多阶段构建
- 编写 Dockerfile
> 使用 AS 参数,后面定义名称
>
> 第二个容器直接 COPY 第一个容器所构建好的文件包使用
```bash
vi Dockerfile
```
```dockerfile
FROM alpine AS builder
RUN apk add git \
&& git clone https://gitee.com/offends/Docs.git \
&& tar -cvf Docker-Template.tar ./Docker-Template
FROM alpine
COPY --from=builder /Docker-Template.tar /
```
开始构建
```bash
docker build -t app:v1 .
```
## 多阶段构建,选定构建容器
- 编写 Dockerfile
> 当我们在一个 Dockerfile 中定义了多个容器构建,这里我门可以使用 `--target` 参数指定特定的容器构建
>
```bash
vi Dockerfile
```
```dockerfile
FROM alpine AS builder
RUN apk add git \
&& git clone https://gitee.com/offends/Docs.git \
&& tar -cvf Docker-Template.tar ./Docker-Template
FROM alpine AS builder-2
COPY --from=builder /Docker-Template.tar /
RUN rm -rf /Docker-Template.tar
FROM alpine AS builder-3
COPY --from=builder /Docker-Template.tar /
RUN tar -xvf /Docker-Template.tar
```
开始构建
```bash
docker build --target builder-3 -t app:v1 .
```
## 替换构建镜像或参数
- 编写 Dockerfile
> Dockerfile 可定义变量在外部指定
>
```bash
vi Dockerfile
```
```dockerfile
# 默认镜像使用 alpine ,通过外部定义修改镜像为 ubuntu
ARG IMAGE=alpine
FROM ${IMAGE}
# 定义一个ENV默认值为: default_env,外部传入 NAME_ARG 让 NAME 变量值改变为 demo_env
ARG NAME_ARG
ENV NAME=${NAME_ARG:-default_env}
```
开始构建
```bash
docker build --build-arg NAME_ARG=demo_env --build-arg IMAGE=ubuntu -t app:v1 .
```

View File

@@ -0,0 +1,63 @@
> 本文作者:丁辉
# Docker配合Mysql-Secrets使用
1. 配置密码
```bash
echo "root" > root-pass.txt
echo "root" > offends-pass.txt
```
2. 创建 Secrets
```bash
docker secret create mysql-root-pass ./root-pass.txt
docker secret create mysql-offends-pass ./offends-pass.txt
```
3. 构建容器
```bash
docker build -t mysql:v1 --file=./Dockerfile-secrets .
```
4. 创建持久化目录
```bash
mkdir /data/mysqld
```
5. 启动容器
```bash
docker service create \
--name mysql \
--replicas 1 \
--publish published=3306,target=3306 \
--mount type=bind,source=/data/mysqld,destination=/var/lib/mysql \
--secret source=mysql-root-pass,target=/run/secrets/mysql-root-pass \
--secret source=mysql-offends-pass,target=/run/secrets/mysql-offends-pass \
mysql:v1
```
6. 查看
```bash
docker service ps mysql
```
> 查看完整事件
>
> ```bash
> docker service ps mysql --no-trunc
> ```
7. 停止容器
```bash
docker service rm mysql
```

View File

@@ -0,0 +1,165 @@
> 本文作者:丁辉
# Docker配置2375端口
## 方法一
1. 配置 `/etc/docker/daemon.json` 文件
```bash
vi /etc/docker/daemon.json
```
内容如下
```json
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
```
2. 重载并重启 Docker
```bash
systemctl daemon-reload
systemctl restart docker
```
## 方法二
1. 修改 `/usr/lib/systemd/system/docker.service` 文件
```bash
vi /usr/lib/systemd/system/docker.service
```
- 旧版 Docker
```bash
ExecStart=/usr/local/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
```
- 新版 Docker
```bash
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
```
2. 重载并重启 Docker
```bash
systemctl daemon-reload
systemctl restart docker
```
## 验证
- 查看端口是否启动
```bash
netstat -anput | grep 2375
```
- 测试
```bash
docker -H tcp://192.168.1.10:2375 ps
```
# 配置证书访问
1. 可以使用本脚本生成证书
```bash
curl -Os https://gitee.com/offends/Linux/raw/main/File/Shell/openssl-cert.sh && chmod 777 ./openssl-cert.sh
```
> 修改
>
> ```bash
> IP="127.0.0.1" # 本地 IP 地址
> PASSWORD="123456" # 证书密码
> VALIDITY_PERIOD=3650 # 证书有效时间
> ```
2. 执行脚本
```bash
./openssl-cert.sh
```
3. 修改 `/usr/lib/systemd/system/docker.service` 文件
```bash
vi /usr/lib/systemd/system/docker.service
```
- 旧版 Docker
```bash
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/cert/2375/ca.pem --tlscert=/etc/docker/cert/2375/server-cert.pem --tlskey=/etc/docker/cert/2375/server-key.pem -H unix:///var/run/docker.sock
```
- 新版 Docker
```bash
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/cert/2375/ca.pem --tlscert=/etc/docker/cert/2375/server-cert.pem --tlskey=/etc/docker/cert/2375/server-key.pem -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
```
4. 重载并重启 Docker
```bash
systemctl daemon-reload
systemctl restart docker
```
5. 验证
```bash
docker --tlsverify --tlscacert=/etc/docker/cert/2375/ca.pem --tlscert=/etc/docker/cert/2375/server-cert.pem --tlskey=/etc/docker/cert/2375/server-key.pem -H tcp://192.168.1.10:2375 ps
```
# 问题记录
> [方法一] 由于 Docker 在最近新版更换了容器引擎为 Containerd, daemon.json 文件如果配置原来的通信套接字文件路径是不行的,现在也没有更好的解决方案,本次我就记录一下从老外那里学来的方法。
>
> 嗯......为什么说这个方案也不是很对呢,因为他会替换你的 Docker 启动命令,那为什么不直接改 `docker.service` 呢?反正咱只是记录一下,通过修改 docker.service 方法我也放在 [方法二] 里了你们自己看吧
1. 配置 `/etc/docker/daemon.json` 文件
```bash
vi /etc/docker/daemon.json
```
内容如下
```json
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
```
2. 创建 `override.conf` 文件
```bash
mkdir -p /etc/systemd/system/docker.service.d/
vi /etc/systemd/system/docker.service.d/override.conf
```
文件内容为
```bash
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --config-file /etc/docker/daemon.json
```
3. 重载并重启 Docker
```bash
systemctl daemon-reload
systemctl restart docker
```

View File

@@ -0,0 +1,83 @@
> 本文作者:丁辉
# Docker配置代理
## Docker服务代理配置
> 此方法适用于 `docker pull` 镜像配置代理
创建 Systemd 代理文件
```bash
mkdir -p /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/proxy.conf
```
内容如下
```bash
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:15777"
Environment="HTTPS_PROXY=http://127.0.0.1:15777"
Environment="NO_PROXY=localhost,127.0.0.1,example.com"
```
- `HTTP_PROXY=`设置HTTP代理服务器
- `HTTPS_PROXY=`设置HTTPS代理服务器
- `NO_PROXY=""`设置不使用代理服务器的域名或IP地址列表
> 将 `http://127.0.0.1:15777` 换成可用的代理即可
重启生效
```bash
systemctl daemon-reload
systemctl restart docker
```
## 容器内部代理
> 在容器运行阶段,如果需要代理上网,则需要配置 `~/.docker/config.json`。
创建 Config.json 代理文件
```bash
mkdir ~/.docker/
vi ~/.docker/config.json
```
内容如下
```json
{
"proxies":
{
"default":
{
"httpProxy": "http://192.168.1.100:15777",
"httpsProxy": "http://192.168.1.100:15777",
"noProxy": "localhost,127.0.0.1,example.com"
}
}
}
```
> 此外, 也可以直接在容器运行时通过注入 `http_proxy` 等环境变量进行代理
重启生效
```bash
systemctl daemon-reload
systemctl restart docker
```
## DockerBuild代理
```bash
docker build . \
--build-arg "HTTP_PROXY=http://192.168.1.100:15777" \
--build-arg "HTTPS_PROXY=http://192.168.1.100:15777" \
--build-arg "NO_PROXY=localhost,127.0.0.1,example.com" \
-t your/image:tag
```

View File

@@ -0,0 +1,137 @@
> 本文作者:丁辉
# Docker配置守护进程
> 通过修改 `/etc/docker/daemon.json` 配置守护进程
>
> [官方文档](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon) [示例文件位置](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)
- 编写基础配置
```json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries": [],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
```
- 建立垃圾收集
```json
{
"builder": {
"gc": {
"enabled": true,
"defaultKeepStorage": "10GB",
"policy": [
{ "keepStorage": "10GB", "filter": ["unused-for=2200h"] },
{ "keepStorage": "50GB", "filter": ["unused-for=3300h"] },
{ "keepStorage": "100GB", "all": true }
]
}
}
}
```
- 验证守护进程配置文件
```bash
dockerd --validate --config-file=/etc/docker/daemon.json
```
- 重载 Docker
```bash
systemctl reload docker
```
# 参数
| 参数 | 用法和说明 | 默认值/示例 |
| -------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| allow-nondistributable-artifacts | 允许的非分发性文件列表(为空) | true/false |
| api-cors-header | API的跨源资源共享CORS头部允许对API进行跨域请求 | "" (空字符串)或 * 或指定IP地址或域名 |
| authorization-plugins | 授权插件列表(为空) | |
| bip | 容器网络的默认桥接接口的IP范围 | "" (空字符串) |
| bridge | 指定容器网络的默认桥接接口 | "" (空字符串) |
| cgroup-parent | 指定容器的cgroup父目录 | |
| containerd | 容器运行时 containerd 的socket路径 | "/run/containerd/containerd.sock" |
| containerd-namespace | 容器运行时 containerd 的命名空间 | "docker" |
| containerd-plugin-namespace | 容器运行时 containerd 插件的命名空间 | "docker-plugins" |
| data-root | Docker 数据的根目录路径 | |
| debug | 是否启用调试模式 | true/false根据具体实现或配置文件而定 |
| default-address-pools | 默认的地址池设置列表,包括基础地址和子网大小 | 示例:[](空列表) |
| default-cgroupns-mode | 默认的cgroup命名空间模式通常是私有 | "private"(私有模式) |
| default-gateway | 默认网关设置 | |
| default-gateway-v6 | 默认IPv6网关设置 | |
| default-network-opts | 默认网络选项 | |
| default-runtime | 默认容器运行时 | "runc"(具体容器运行时的名称) |
| default-shm-size | 默认的共享内存大小 | "64M"64兆字节 |
| default-ulimits | 默认的ulimit设置指定文件描述符的硬限制和软限制 | 示例:{"nofile": {"Hard": 64000, "Name": "nofile", "Soft": 64000}} (文件描述符限制示例) |
| dns | DNS服务器列表 | 示例:[](空列表) |
| dns-opts | DNS选项列表 | 示例:[](空列表) |
| dns-search | DNS搜索域列表 | 示例:[](空列表) |
| exec-opts | 容器执行参数列表 | 示例:[](空列表) |
| exec-root | 容器执行的根目录路径 | "" (空字符串) |
| experimental | 是否启用实验性功能 | true/false根据具体实现或配置文件而定 |
| features | Docker功能列表 | |
| fixed-cidr | 固定CIDR地址设置通常用于设置 Docker 容器的 IP 地址) | "" (空字符串) |
| fixed-cidr-v6 | 固定IPv6 CIDR地址设置通常用于设置 Docker 容器的 IPv6 地址) | "" (空字符串) |
| group | Docker进程的用户组 | |
| hosts | 主机名设置列表 | 示例:[](空列表) |
| proxies | 代理设置包括HTTP代理、HTTPS代理和不使用代理的地址列表 | |
| icc | 是否启用容器间通信 | false 默认值为false |
| init | 是否启用自定义初始化进程 | false 默认值为false |
| init-path | 自定义初始化进程的路径 | "/usr/libexec/docker-init" |
| insecure-registries | 不安全的镜像仓库列表 | 示例:[](空列表) |
| ip | Docker守护进程监听的IP地址 | 0.0.0.0 |
| ip-forward | 是否启用IP转发 | false 默认值为false |
| ip-masq | 是否启用IP伪装 | false 默认值为false |
| iptables | 是否启用iptables | false 默认值为false |
| ip6tables | 是否启用ip6tables | false 默认值为false |
| ipv6 | 是否启用IPv6 | true/false根据具体实现或配置文件而定 |
| labels | 标签设置列表 | 示例:[](空列表) |
| live-restore | 是否启用容器守护进程在宕机时自动恢复容器 | true/false根据具体实现或配置文件而定 |
| log-driver | 日志驱动设置默认为json-file | "json-file"JSON文件 |
| log-level | 日志级别设置 | "" (空字符串) |
| log-opts | 日志选项设置,包括缓存禁用、缓存大小、缓存最大文件数等 | 示例:{"max-size": "10m", "max-file": "5"}最大大小为10兆字节最大文件数为5 |
| max-concurrent-downloads | 最大并发下载任务数 | 3示例值 |
| max-concurrent-uploads | 最大并发上传任务数 | 5示例值 |
| max-download-attempts | 最大下载尝试次数 | 5示例值 |
| mtu | 最大传输单元设置 | 0示例值 |
| no-new-privileges | 是否禁用新特权 | false 默认值为false |
| node-generic-resources | 节点通用资源列表通常用于指定GPU等硬件资源 | 示例:["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"]GPU资源示例 |
| oom-score-adjust | OOM分数调整设置 | 0示例值 |
| pidfile | PID文件路径设置 | |
| raw-logs | 是否启用原始日志记录 | true/false根据具体实现或配置文件而定 |
| registry-mirrors | 镜像仓库镜像设置列表 | 示例:[](空列表) |
| runtimes | 容器运行时设置,可以包括自定义运行时的路径和参数 | |
| seccomp-profile | 安全策略配置文件路径 | "" (空字符串) |
| selinux-enabled | 是否启用SELinux | true/false根据具体实现或配置文件而定 |
| shutdown-timeout | 容器守护进程关闭超时设置 | 15示例值 |
| storage-driver | 存储驱动设置 | |
| storage-opts | 存储选项设置列表 | 示例:[](空列表) |
| swarm-default-advertise-addr | Swarm模式下的默认广告地址设置 | |
| tls | 是否启用TLS | true/false根据具体实现或配置文件而定 |
| tlscacert | TLS CA证书路径 | |
| tlscert | TLS证书路径 | |
| tlskey | TLS密钥路径 | |
| tlsverify | 是否验证TLS | true/false根据具体实现或配置文件而定 |
| userland-proxy | 是否使用用户空间代理 | true/false根据具体实现或配置文件而定 |
| userland-proxy-path | 用户空间代理的路径 | "/usr/libexec/docker-proxy" |
| userns-remap | 用户命名空间重映射设置 | |

View File

@@ -0,0 +1,27 @@
> 本文作者:丁辉
# Docker镜像批量打包
- 第一种
```bash
docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o k8s-master.tar
```
- 第二种
> 将需要统一打包的镜像写在文件内
```bash
cat > images.txt <<EOF
nginx:alpine
nginx:latest
EOF
```
打包
```bash
docker save -o images.tar.gz $(cat images.txt)
```

View File

@@ -0,0 +1,234 @@
> 本文作者:丁辉
# Docker Swarm集群
[官方文档](https://docs.docker.com/engine/swarm/swarm-tutorial/deploy-service/)
| 节点IP | 角色 |
| :----------: | :----: |
| 192.168.1.10 | MASTER |
| 192.168.1.20 | WORKER |
## 开始组建集群
1. 初始化 MASTER 节点
```bash
docker swarm init
```
> 指定 IP
>
> ```bash
> docker swarm init --advertise-addr 192.168.1.10
> ```
>
> 指定网段
>
> ```bash
> --default-addr-pool 192.168.1.0/24
> ```
2. WORKER 节点加入集群
```bash
docker swarm join --token <token> 192.168.1.10:2377
```
3. 检查所有节点
```bash
docker node ls
```
> 删除节点命令为
>
> ```bash
> docker swarm leave
> ```
>
> 强制使用 ` --force` 参数
## 常用基础命令
- 查看加入 MASTER TOKEN
```bash
docker swarm join-token manager
```
- 查看加入 WORKER TOKEN
```bash
docker swarm join-token worker
```
- 查看所有节点
```bash
docker node ls
```
- 查看节点详情
```bash
docker node inspect <节点名称> --pretty
```
## Secrets 基础操作
- 创建 Secrets
```
docker secret create <Secrets名称> ./<文件位置>
```
> echo 创建 Secrets
>
> ```bash
> echo "内容" | docker secret create <Secrets名称> -
> ```
>
> openssl 创建 Secrets,生成一个随机的20个字符的密码,并将其作为密钥存储到Docker中
>
> ```bash
> openssl rand -base64 20 | docker secret create mysql_password -
> ```
- 查看 Secrets
```bash
docker secret ls
```
- 检查 Secrets
```bash
docker secret inspect <Secrets名称>
```
- 删除 Secrets
```bash
docker secret rm <Secrets名称>
```
## Network 基础操作
- 创建 Network
```
docker network create -d overlay <网络名称>
```
- 查看 Network
```bash
docker network ls
```
- 检查 Network
```bash
docker network inspect <网络名称>
```
- 删除 Network
```bash
docker network rm <网络名称>
```
## Volume 基础操作
- 创建 Volume
```
docker volume create -d overlay <存储名称>
```
- 查看 Volume
```bash
docker volume ls
```
- 检查 Volume
```bash
docker volume inspect <存储名称>
```
- 删除 Volume
```bash
docker volume rm <存储名称>
```
## 启动容器测试
```bash
docker service create \
--name mysql \
--replicas 1 \
--mount type=bind,source=/data/mysqld,destination=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="root" \
mysql
```
**其他参数**
- 指定 Docker 节点
```bash
--constraint 'node.hostname==节点名称'
```
- 指定对外端口
```bash
--publish published=<容器对外端口>,target=<容器内部端口>
```
- 挂载 volume 存储
```bash
--mount type=volume,source=<指定存储名称>,destination=<容器内部路径>
```
- 指定网络
```bash
--network <网络名称>
```
- 挂载 secret
```bash
--secret source=<secret名称>,target=<容器内路径>
```
**常见参数说明**
| 参数 | 说明 |
| :--------------------------: | :-----------------------------------: |
| `--name` | 指定服务的名称 |
| `--replicas` | 指定服务的副本数 |
| `--constraint` | 指定服务运行的节点约束条件 |
| `--publish` | 将容器的端口映射到主机的端口 |
| `--mount` | 将主机上的目录或文件挂载到容器内 |
| `--network` | 将服务连接到指定的Docker网络 |
| `--secret` | 将指定的Docker secret文件挂载到容器内 |
| `-e` | 指定容器内的环境变量 |
| `--env-file` | 指定容器内的环境变量文件 |
| `--restart-condition` | 指定容器的重启策略 |
| `--update-delay` | 指定服务更新之间的延迟时间 |
| `--update-parallelism` | 指定服务更新时的并行数量 |
| `--update-failure-action` | 指定服务更新失败后的操作 |
| `--update-max-failure-ratio` | 指定服务更新失败的最大比率 |
| `--endpoint-mode` | 指定服务的网络端点模式 |

View File

@@ -0,0 +1,41 @@
> 本文作者:丁辉
# Mysql容器纳入System管理
1. 创建 Systemd Service 文件
```bash
vi /usr/lib/systemd/system/mysql.service
```
内容如下
```bash
[Unit]
Description=Mysql container
Requires=docker.service
After=docker.service
[Service]
RemainAfterExit=yes
ExecStop=/usr/bin/docker stop mysql # 容器名
ExecStart=/usr/bin/docker start mysql
ExecReload=/usr/bin/docker restart mysql
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
```
2. 重载配置文件
```bash
systemctl daemon-reload
```
3. 启动 Mysql
```bash
systemctl start mysql
```