修改Docker文档目录层级,更新Docker脚本,更新Docker文档
All checks were successful
continuous-integration/drone Build is passing
All checks were successful
continuous-integration/drone Build is passing
This commit is contained in:
188
Docker/Docs/Docker使用文档/DockerHub上传双架构镜像.md
Normal file
188
Docker/Docs/Docker使用文档/DockerHub上传双架构镜像.md
Normal 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
|
||||
```
|
||||
|
||||
63
Docker/Docs/Docker使用文档/Docker上下文配置.md
Normal file
63
Docker/Docs/Docker使用文档/Docker上下文配置.md
Normal 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"
|
||||
```
|
||||
|
||||
|
||||
117
Docker/Docs/Docker使用文档/Docker常用命令及参数.md
Normal file
117
Docker/Docs/Docker使用文档/Docker常用命令及参数.md
Normal 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` |
|
||||
74
Docker/Docs/Docker使用文档/Docker常用配置文件配置.md
Normal file
74
Docker/Docs/Docker使用文档/Docker常用配置文件配置.md
Normal 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
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
33
Docker/Docs/Docker使用文档/Docker更改IP池.md
Normal file
33
Docker/Docs/Docker使用文档/Docker更改IP池.md
Normal 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
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
99
Docker/Docs/Docker使用文档/Docker构建镜像.md
Normal file
99
Docker/Docs/Docker使用文档/Docker构建镜像.md
Normal 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 .
|
||||
```
|
||||
63
Docker/Docs/Docker使用文档/Docker配合Mysql-Secrets使用.md
Normal file
63
Docker/Docs/Docker使用文档/Docker配合Mysql-Secrets使用.md
Normal 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
|
||||
```
|
||||
|
||||
|
||||
|
||||
165
Docker/Docs/Docker使用文档/Docker配置2375端口.md
Normal file
165
Docker/Docs/Docker使用文档/Docker配置2375端口.md
Normal 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
|
||||
```
|
||||
|
||||
|
||||
|
||||
83
Docker/Docs/Docker使用文档/Docker配置代理.md
Normal file
83
Docker/Docs/Docker使用文档/Docker配置代理.md
Normal 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
|
||||
```
|
||||
|
||||
137
Docker/Docs/Docker使用文档/Docker配置守护进程.md
Normal file
137
Docker/Docs/Docker使用文档/Docker配置守护进程.md
Normal 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 | 用户命名空间重映射设置 | |
|
||||
27
Docker/Docs/Docker使用文档/Docker镜像批量打包.md
Normal file
27
Docker/Docs/Docker使用文档/Docker镜像批量打包.md
Normal 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)
|
||||
```
|
||||
|
||||
234
Docker/Docs/Docker使用文档/Docker集群.md
Normal file
234
Docker/Docs/Docker使用文档/Docker集群.md
Normal 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` | 指定服务的网络端点模式 |
|
||||
|
||||
|
||||
|
||||
41
Docker/Docs/Docker使用文档/Mysql容器纳入System管理.md
Normal file
41
Docker/Docs/Docker使用文档/Mysql容器纳入System管理.md
Normal 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
|
||||
```
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user