vault backup: 2025-12-04 09:12:56
This commit is contained in:
809
技术探究/docker容器/1、离线安装docker.md
Normal file
809
技术探究/docker容器/1、离线安装docker.md
Normal file
@@ -0,0 +1,809 @@
|
||||
# 1、离线安装docker
|
||||
|
||||
因为有部分服务器在全内网环境,不能联网安装 `Docker`。这时要在服务器上安装 `Docker` 就只能下载对应安装包,离线安装 `Docker` 需要 `docker-engine`、`docker-engine-selinux`、`libtool-ltdl`这三个软件包。
|
||||
|
||||
下面以安装 `Docker 1.12.6` 为例讲讲如何在离线环境中安装 `Docker`,首先我们要下载对应的 `Docker` 软件包,下面的地址是官方提供的软件仓库地址,里面有各个版本的 `Docker` 软件包。
|
||||
|
||||
```
|
||||
# CentOS
|
||||
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
|
||||
http://mirror.centos.org/centos/7/extras/x86_64/Packages/
|
||||
```
|
||||
|
||||
`Docker` 安装需要依赖 `libtool-ltdl` 软件包,`libtool-ltdl`可在`pkgs.org`这个网站搜索下载。
|
||||
|
||||
- 在 CentOS 7 下安装
|
||||
|
||||
```
|
||||
$ mkdir docker_install
|
||||
$ cd docker_install
|
||||
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-20.10.6-3.el7.x86_64.rpm
|
||||
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.4-3.1.el7.x86_64.rpm
|
||||
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-20.10.6-3.el7.x86_64.rpm
|
||||
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-rootless-extras-20.10.6-3.el7.x86_64.rpm
|
||||
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
|
||||
$ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-scan-plugin-0.7.0-3.el7.x86_64.rpm
|
||||
$ wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.119.1-1.c57a6f9.el7.noarch.rpm
|
||||
$ rpm -ivh container-selinux-2.21-1.el7.noarch.rpm
|
||||
$ rpm -ivh docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm
|
||||
|
||||
$ rpm -ivh *.rpm
|
||||
```
|
||||
|
||||
## 1.1.CentOS7修改Docker镜像默认存储位置
|
||||
|
||||
##### 1.1.1停止docker服务
|
||||
|
||||
```bash
|
||||
# systemctl stop docker
|
||||
```
|
||||
|
||||
##### 1.1.2修改docker服务启动文件
|
||||
|
||||
```bash
|
||||
# vim /etc/sysconfig/docker
|
||||
|
||||
OPTIONS='--selinux-enabled --log-driver=journald --graph=/docker --signature-verification=false --insecure-registry 192.168.1.1'
|
||||
#--insecure-registry 192.168.1.1这是仓库地址可以忽略
|
||||
# /docker这个目录就是我用于替代默认/var/lib/docker的目录,目录创建好之后记得“mv /var/lib/docker/* /docker/”,把所有原先目录下所有的文件和目录拷贝到新目录下。
|
||||
```
|
||||
|
||||
##### 1.1.3重新加载配置并启动
|
||||
|
||||
```bash
|
||||
# systemctl daemon-reload
|
||||
# systemctl start docker
|
||||
# systemctl enable docker
|
||||
```
|
||||
|
||||
##### 1.1.4检查docker信息
|
||||
|
||||
```bash
|
||||
# docker info
|
||||
# docker version
|
||||
```
|
||||
|
||||
## 1.2Docker 过程中经常会被使用到的一些命令
|
||||
|
||||
## 容器生命周期管理
|
||||
|
||||
### 创建容器
|
||||
|
||||
```
|
||||
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
|
||||
```
|
||||
|
||||
因为创建命令涉及了容器运行时几乎所有的设置,所有 `run` 命令具有比其他任何 `docker` 命令更多的选项,接下来主要看一下具体的 `[OPTIONS]` 有哪些
|
||||
|
||||
- `-a stdin` : 指定标准输入输出内容类型,可选 `STDIN`/`STDOUT`/`STDERR` 三项
|
||||
- `-d` : 后台运行容器,并返回容器ID
|
||||
- `-i` : 以交互模式运行容器,通常与 -t 同时使用
|
||||
- `-P` : 随机端口映射,容器内部端口随机映射到主机的高端口
|
||||
- `-p` : 指定端口映射,格式为:主机(宿主)端口:容器端口
|
||||
- `-t` : 为容器重新分配一个伪输入终端,通常与 -i 同时使用
|
||||
- `--name string` : 为容器指定一个名称
|
||||
- `--dns 8.8.8.8` : 指定容器使用的DNS服务器,默认和宿主一致
|
||||
- `--dns-search example.com` : 指定容器DNS搜索域名,默认和宿主一致
|
||||
- `-h "mars"` : 指定容器的hostname
|
||||
- `-e username="ritchie"` : 设置环境变量
|
||||
- `--env-file=[]` : 从指定文件读入环境变量
|
||||
- `--cpuset-cpus string` : 绑定容器到指定 CPU 运行("0-2"/"0,1,2")
|
||||
- `-m` : 设置容器使用内存最大值
|
||||
- `--net="bridge"` : 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
|
||||
- `--link=[]` : 添加链接到另一个容器
|
||||
- `--expose=[]` : 开放一个端口或一组端口
|
||||
- `--volume , -v` : 绑定一个卷
|
||||
|
||||
命令有点多,一般情况,启动一个服务,常用的几个参数
|
||||
|
||||
- `-d`: 后台运行
|
||||
- `-v`:绑定卷 例如 `-v /opt/server/logs:/opt/logs`, 简单点说,就是将容器里的 `/opt/logs` 地址和宿主机 `/opt/server/logs` 的地址绑定,类似于挂载,用户就可以通过宿主机 `/opt/server/logs` 路径直接查看容器里生成的文件
|
||||
- `--name string` 声明容器的名称,建议启动的时候自己指定,便于后期启动停止可以通过容器名称直接控制
|
||||
- `-p 8100:8000` 端口映射,宿主机 `8100`,容器 `8000`, 这样发送到宿主机 `8100` 端口的消息,就会由 `docker` 转发到容器 `8000` 端口, 供容器里的服务监听
|
||||
- `-e ENV_LOGLEVALE=info` 声明一个可以让容器里识别到的环境变量,服务需要用户设置的一些信息,都可以通过定义成环境变量的形式在创建的时候传入容器
|
||||
|
||||
### 启动/停止/重启
|
||||
|
||||
```
|
||||
docker start [OPTIONS] CONTAINER [CONTAINER...]
|
||||
docker stop [OPTIONS] CONTAINER [CONTAINER...]
|
||||
docker restart [OPTIONS] CONTAINER [CONTAINER...]
|
||||
```
|
||||
|
||||
日常使用过程中,这3个命令里的 `[OPTIONS]` 都没有使用到,一般都是直接后接容器名,例如
|
||||
|
||||
```
|
||||
docker start redis-server
|
||||
```
|
||||
|
||||
### 暂停/恢复
|
||||
|
||||
- `docker pause` : 暂停容器中所有的进程。
|
||||
- `docker unpause` : 恢复容器中所有的进程。
|
||||
|
||||
```
|
||||
docker pause CONTAINER [CONTAINER...]
|
||||
docker unpause CONTAINER [CONTAINER...]
|
||||
```
|
||||
|
||||
### 删除容器
|
||||
|
||||
删除一个或多少容器。
|
||||
|
||||
```
|
||||
docker rm [OPTIONS] CONTAINER [CONTAINER...]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-f` : 强制删除一个运行中的容器
|
||||
- `-l` : 移除容器间的网络连接,而非容器本身
|
||||
- `-v` : 删除与容器关联的卷
|
||||
|
||||
```
|
||||
docker rm -f mysql
|
||||
```
|
||||
|
||||
### 在运行的容器中执行命令
|
||||
|
||||
```
|
||||
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-d` : 分离模式: 在后台运行
|
||||
- `-i` : 即使没有附加也保持 `STDIN` 打开
|
||||
- `-t` : 分配一个伪终端
|
||||
|
||||
简单点说,**可以进入容器里**,在容器的环境下,输入一些命令,就类似于 `ssh` 到别人的机器上
|
||||
|
||||
其中 `OPTIONS` 的中 `-d` 的作用不详,但是输入命令需要 `-t`, 看到命令执行结果需要 `-i`, 所以在实际使用过程中,一般都是 `-it` 一起使用,也就是下面这样的
|
||||
|
||||
```
|
||||
docker exec -it redis-server /bin/sh
|
||||
```
|
||||
|
||||
## 容器操作
|
||||
|
||||
### 列出容器
|
||||
|
||||
```
|
||||
docker ps [OPTIONS]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-a` : 显示所有的容器,包括未运行的
|
||||
- `-f` : 根据条件过滤显示的内容
|
||||
- `--format` : 指定返回值的模板文件
|
||||
- `-l` : 显示最近创建的容器
|
||||
- `-n` : 列出最近创建的n个容器
|
||||
- `--no-trunc` : 不截断输出(容器ID完整显示)
|
||||
- `-q` : 只显示容器编号
|
||||
- `-s` : 额外显示容器大小
|
||||
|
||||
列出所有在运行的容器信息。
|
||||
|
||||
```
|
||||
docker ps
|
||||
```
|
||||
|
||||
输出详情介绍:
|
||||
|
||||
- `CONTAINER ID` : 容器 ID
|
||||
|
||||
- `IMAGE` : 使用的镜像
|
||||
|
||||
- `COMMAND` : 启动容器时运行的命令
|
||||
|
||||
- `CREATED` : 容器的创建时间
|
||||
|
||||
- `STATUS` : 容器状态。状态有 7 种
|
||||
|
||||
- - `created`(已创建)
|
||||
- `restarting`(重启中)
|
||||
- `running`(运行中)
|
||||
- `removing`(迁移中)
|
||||
- `paused`(暂停)
|
||||
- `exited`(停止)
|
||||
- `dead`(死亡)
|
||||
|
||||
- `PORTS` : 容器的端口信息和使用的连接类型(tcp\udp)
|
||||
|
||||
- `NAMES` : 自动分配的容器名称
|
||||
|
||||
### 查看容器详情
|
||||
|
||||
获取容器/镜像的元数据,元数据包括容器的 id、创建时间、运行状态、启动参数、目录挂载、网路配置等等。注意,该命令也可以用来查看镜像的信息。
|
||||
|
||||
```
|
||||
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-f (--format)` : 指定返回值的 go 模板文件
|
||||
- `-s` : 显示总的文件大小。
|
||||
- `--type` : 指定类型,用于指定 `docker` 对象类型,如:`container`、`image`。在容器与镜像同名时可以使用。默认返回容器信息
|
||||
|
||||
直接 `docker inspect 容器名` 会返回特别多的信息,这时候就需要使用 `-f` 来做一步筛选
|
||||
|
||||
格式如下, 这里的key 指的是 `docker inspect 容器名` 返回结果里的 `key` 值
|
||||
|
||||
```
|
||||
docker inspect -f "{{json .key}}" 容器名
|
||||
# 方便看json, 使用 jq
|
||||
docker inspect -f "{{json .key}}" 容器名 | jq
|
||||
```
|
||||
|
||||
举个例子
|
||||
|
||||
```
|
||||
# 查看容器 redis-server 的容器ID
|
||||
docker inspect -f "{{json .ID}}" redis-server
|
||||
|
||||
# 查看容器 redis-server 的挂载信息
|
||||
docker inspect -f "{{json .Mounts}}" redis-server | jq
|
||||
|
||||
# 查看容器 redis-server 的网络设置中网络信息
|
||||
docker inspect -f "{{json .NetworkSettings.Networks}}" redis-server | jq
|
||||
```
|
||||
|
||||
### 获取日志
|
||||
|
||||
```
|
||||
docker logs [OPTIONS] CONTAINER
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-f` : 跟踪日志输出,实时显示
|
||||
- `--since` : 显示某个开始时间的所有日志
|
||||
- `-t` : 显示时间戳
|
||||
- `--tail N` : 仅列出最新 N 条容器日志
|
||||
|
||||
查看容器 `redis-server` 从 2020 年 12 月 30 日后的最新 10 条日志, 并且实时显示最新的日志输出。
|
||||
|
||||
```
|
||||
docker logs -f --since="2020-12-30" --tail 10 redis-server
|
||||
```
|
||||
|
||||
### 数据拷贝
|
||||
|
||||
用于容器与主机之间的数据拷贝。
|
||||
|
||||
```
|
||||
# 从容器中拷贝出来
|
||||
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
|
||||
|
||||
# 拷贝到容器中
|
||||
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-L` : 保持源目标中的链接
|
||||
|
||||
## 镜像管理
|
||||
|
||||
一般情况下很少涉及到对镜像管理,但是这里简单介绍一些
|
||||
|
||||
### 列出本地镜像
|
||||
|
||||
```
|
||||
docker images [OPTIONS] [REPOSITORY[:TAG]]
|
||||
```
|
||||
|
||||
OPTIONS 说明:
|
||||
|
||||
- `-a` : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
|
||||
- `--digests` : 显示镜像的摘要信息
|
||||
- `-f` : 显示满足条件的镜像
|
||||
- `--format` : 指定返回值的模板文件
|
||||
- `--no-trunc` : 显示完整的镜像信息
|
||||
- `-q`: 只显示镜像ID
|
||||
|
||||
列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
|
||||
|
||||
```
|
||||
docker images ubuntu
|
||||
```
|
||||
|
||||
### 删除镜像
|
||||
|
||||
删除本地一个或多少镜像。
|
||||
|
||||
```
|
||||
docker rmi [OPTIONS] IMAGE [IMAGE...]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-f`: 强制删除
|
||||
- `--no-prune` : 不移除该镜像的过程镜像,默认移除
|
||||
|
||||
强制删除本地镜像 runoob/ubuntu:v4。
|
||||
|
||||
```
|
||||
docker rmi -f runoob/ubuntu:v4
|
||||
```
|
||||
|
||||
### 标记本地镜像/重命名
|
||||
|
||||
标记本地镜像,将其归入某一仓库。
|
||||
|
||||
```
|
||||
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
|
||||
```
|
||||
|
||||
将镜像 `ubuntu:15.10` 标记为 `runoob/ubuntu:v3` 镜像。
|
||||
|
||||
```
|
||||
docker tag ubuntu:15.10 runoob/ubuntu:v3
|
||||
```
|
||||
|
||||
### 导出镜像
|
||||
|
||||
将指定镜像保存成 tar 归档文件。
|
||||
|
||||
```
|
||||
docker save [OPTIONS] IMAGE [IMAGE...]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `-o` : 输出到的文件
|
||||
|
||||
将镜像 `runoob/ubuntu:v3` 生成 `my_ubuntu_v3.tar` 文档。
|
||||
|
||||
```
|
||||
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
|
||||
docker save runoob/ubuntu:v3 > my_ubuntu_v3.tar
|
||||
```
|
||||
|
||||
### 导入镜像
|
||||
|
||||
导入使用 `docker save` 命令导出的镜像。
|
||||
|
||||
```
|
||||
docker load [OPTIONS]
|
||||
```
|
||||
|
||||
`OPTIONS` 说明:
|
||||
|
||||
- `--input, -i` : 指定导入的文件,代替 STDIN
|
||||
- `--quiet, -q` : 精简输出信息
|
||||
|
||||
从 `busybox.tar.gz` 导入镜像。
|
||||
|
||||
```
|
||||
docker load < busybox.tar.gz
|
||||
```
|
||||
|
||||
指定导入文件 `busybox.tar` 导入镜像。
|
||||
|
||||
```
|
||||
docker load -i busybox.tar
|
||||
```
|
||||
|
||||
## 小技巧
|
||||
|
||||
```
|
||||
# 删除所有容器
|
||||
docker rm -f $(docker ps -aq)
|
||||
|
||||
# 筛选出所有含有 k8s 字段的容器
|
||||
docker ps -a | grep k8s
|
||||
|
||||
# 同理,删除满足条件 (含有 k8s 字段) 的容器
|
||||
docker rm -f $(docker ps -a | grep k8s | awk -F ' ' '{print $1}')
|
||||
```
|
||||
|
||||
Linux 下管道还是很强大的,前一个命令的输出作为后一个命令的输入,因此 `grep` , `awk` 等等都是可以配合使用的
|
||||
同时也可以将命令的输出结果作为变量,供另一个命令使用
|
||||
|
||||
## 1.3、常用docker命令
|
||||
|
||||
### 1.3.1、查看docker信息
|
||||
|
||||
###### 1、查看docker版本
|
||||
|
||||
```
|
||||
docker version
|
||||
```
|
||||
|
||||
###### 2、显示docker系统的信息
|
||||
|
||||
```
|
||||
docker info
|
||||
```
|
||||
|
||||
### 1.3.2、对image的操作
|
||||
|
||||
###### 1、检索image
|
||||
|
||||
```
|
||||
docker search image_name
|
||||
```
|
||||
|
||||
###### 2、下载image
|
||||
|
||||
```
|
||||
docker pull image_name
|
||||
```
|
||||
|
||||
###### 3、列出镜像列表
|
||||
|
||||
```
|
||||
docker images
|
||||
```
|
||||
|
||||
###### 4、删除一个或者多个镜像
|
||||
|
||||
```
|
||||
docker rmi image_name
|
||||
```
|
||||
|
||||
###### 5、显示一个镜像的历史
|
||||
|
||||
```
|
||||
docker history image_name
|
||||
```
|
||||
|
||||
### 1.3.3、启动容器
|
||||
|
||||
###### 1、在容器中运行”echo”命令,输出”hello word”
|
||||
|
||||
```
|
||||
docker run image_name echo "hello word"
|
||||
```
|
||||
|
||||
###### 2、交互式进入容器中
|
||||
|
||||
```
|
||||
docker run -i -t image_name /bin/bash
|
||||
```
|
||||
|
||||
###### 3、在容器中安装新的程序
|
||||
|
||||
```
|
||||
docker run image_name apt-get install -y app_name
|
||||
```
|
||||
|
||||
### 1.3.4、查看容器
|
||||
|
||||
###### 1、列出当前所有正在运行的container
|
||||
|
||||
```
|
||||
docker ps
|
||||
```
|
||||
|
||||
###### 2、列出所有的container
|
||||
|
||||
```
|
||||
docker ps -a
|
||||
```
|
||||
|
||||
###### 3、列出最近一次启动的container
|
||||
|
||||
```
|
||||
docker ps -l
|
||||
```
|
||||
|
||||
### 1.3.5、保存对容器的修改
|
||||
|
||||
###### 1、保存对容器的修改
|
||||
|
||||
```
|
||||
docker commit ID new_image_name
|
||||
```
|
||||
|
||||
### 1.3.6、对容器的操作
|
||||
|
||||
###### 1、删除所有容器
|
||||
|
||||
```
|
||||
docker rm `docker ps -a -q`
|
||||
```
|
||||
|
||||
###### 2、删除单个容器
|
||||
|
||||
```
|
||||
docker rm Name/ID
|
||||
```
|
||||
|
||||
###### 3、 停止、启动、杀死一个容器
|
||||
|
||||
```
|
||||
$docker stop Name/ID
|
||||
$docker start Name/ID
|
||||
$docker kill Name/ID
|
||||
```
|
||||
|
||||
###### 4、从一个容器中取日志
|
||||
|
||||
```
|
||||
docker logs Name/ID
|
||||
```
|
||||
|
||||
###### 5、列出一个容器里面被改变的文件或者目录
|
||||
|
||||
```
|
||||
docker diff Name/ID
|
||||
```
|
||||
|
||||
###### 6、显示一个运行的容器里面的进程信息
|
||||
|
||||
```
|
||||
docker top Name/ID
|
||||
```
|
||||
|
||||
###### 7、从容器里面拷贝文件/目录到本地一个路径
|
||||
|
||||
```
|
||||
docker cp Name:/container_path to_path
|
||||
docker cp ID:/container_path to_path
|
||||
```
|
||||
|
||||
###### 8、重启一个正在运行的容器
|
||||
|
||||
```
|
||||
docker restart Name/ID
|
||||
```
|
||||
|
||||
###### 9、附加到一个运行的容器上面
|
||||
|
||||
```
|
||||
docker attach ID
|
||||
```
|
||||
|
||||
### 1.3.7、 保存和加载镜像
|
||||
|
||||
###### 1、保存镜像到一个tar包
|
||||
|
||||
```
|
||||
docker save image_name -o file_path
|
||||
```
|
||||
|
||||
###### 2、加载一个tar包格式的镜像
|
||||
|
||||
```
|
||||
docker load -i file_path
|
||||
```
|
||||
|
||||
### 1.3.8、 登录registry server
|
||||
|
||||
###### 1、登陆registry server
|
||||
|
||||
```
|
||||
docker login
|
||||
```
|
||||
|
||||
### 1.3.9、发布image
|
||||
|
||||
###### 1、发布docker镜像
|
||||
|
||||
```
|
||||
docker push new_image_name
|
||||
```
|
||||
|
||||
**Docker镜像拉取**
|
||||
|
||||
```
|
||||
root@linuxcool:~# docker pull mysql:5.6
|
||||
5.6: Pulling from library/mysql
|
||||
e62d08fa1eb1: Pull complete
|
||||
Digest: sha256:60c27b50ca72d81d92a743a965a82f124a4e123c7d374a021887286408878d60
|
||||
Status: Downloaded newer image for mysql:5.6
|
||||
docker.io/library/mysql:5.6
|
||||
```
|
||||
|
||||
**Docker容器备份**
|
||||
|
||||
```
|
||||
root@linuxcool:~# docker image save mysql:5.6 -o mysql:5.6.tar.gz
|
||||
mysql:5.6
|
||||
mysql:5.6.tar.gz
|
||||
```
|
||||
|
||||
**Docker容器导出**
|
||||
|
||||
```
|
||||
root@linuxcool:~# docker save mysql:5.6 > mysql:5.6.tar.gz
|
||||
mysql:5.6
|
||||
mysql:5.6.tar.gz
|
||||
```
|
||||
|
||||
**Docker容器恢复**
|
||||
|
||||
```
|
||||
root@linuxcool:~# docker image load -i mysql:5.6.tar.gz
|
||||
mysql:5.6.tar.gz
|
||||
```
|
||||
|
||||
**Docker容器导入**
|
||||
|
||||
```
|
||||
root@linuxcool:~# docker image load < mysql:5.6.tar.gz
|
||||
Loaded image: mysql:5.6
|
||||
mysql:5.6.tar.gz
|
||||
```
|
||||
|
||||
# 1.4、搭建需要镜像
|
||||
|
||||
## 已有镜像列表
|
||||
|
||||
jenkins/jenkins latest 3d2f88dfa0ea 16 hours ago 572MB
|
||||
gitlab/gitlab-ce latest e5894d9173ec 7 days ago 2.21GB
|
||||
portainer/portainer latest 580c0e4e98b0 4 weeks ago 79.1MB
|
||||
sonatype/nexus3 latest f07af611e0df 6 weeks ago 662MB
|
||||
idoop/zentao latest 2d8b2ca2e0d7 2 months ago 188MB
|
||||
mysql 5.7 a70d36bc331a 3 months ago 449MB
|
||||
rabbitmq 3.8.9 7471fb821b97 3 months ago 167MB
|
||||
redis 6.0.9 6060df96cef3 3 months ago 104MB
|
||||
nginx 1.19.4 daee903b4e43 5 months ago 133MB
|
||||
registry 2.4.1 8ff6a4aae657 4 years ago 172MB
|
||||
|
||||
java 8 d23bdf5b1b1b 4 years ago 643MB
|
||||
|
||||
|
||||
|
||||
## 导出需要的镜像
|
||||
|
||||
docker save java -o /opt/images/java.tar.gz
|
||||
|
||||
docker save gitlab/gitlab-ce -o /opt/images/gitlab-ce.tar.gz
|
||||
|
||||
docker save portainer/portainer -o /opt/images/portainer.tar.gz
|
||||
|
||||
docker save sonatype/nexus3 -o /opt/images/nexus3.tar.gz
|
||||
|
||||
docker save idoop/zentao -o /opt/images/zentao.tar.gz
|
||||
|
||||
docker save mysql -o /opt/images/mysql.tar.gz
|
||||
|
||||
docker save rabbitmq -o /opt/images/rabbitmq.tar.gz
|
||||
|
||||
docker save redis -o /opt/images/redis.tar.gz
|
||||
|
||||
docker save nginx -o /opt/images/nginx.tar.gz
|
||||
|
||||
docker save registry -o /opt/images/registry.tar.gz
|
||||
|
||||
|
||||
|
||||
docker save jenkins/jenkins -o /opt/images/jenkins.tar.gz
|
||||
|
||||
docker commit ca0037d8a147 jenkins/jenkins
|
||||
|
||||
docker save jenkins/jenkins -o /opt/data/jenkins.tar.gz
|
||||
|
||||
|
||||
|
||||
## 加载需要的镜像
|
||||
|
||||
docker load -i /opt/images/java.tar.gz
|
||||
|
||||
docker load -i /opt/images/gitlab-ce.tar.gz
|
||||
|
||||
docker load -i /opt/images/portainer.tar.gz
|
||||
|
||||
docker load -i /opt/images/nexus3.tar.gz
|
||||
|
||||
docker load -i /opt/images/zentao.tar.gz
|
||||
|
||||
docker load -i /opt/images/mysql.tar.gz
|
||||
|
||||
docker load -i /opt/images/rabbitmq.tar.gz
|
||||
|
||||
docker load -i /opt/images/redis.tar.gz
|
||||
|
||||
docker load -i /opt/images/nginx.tar.gz
|
||||
|
||||
docker load -i /opt/images/registry.tar.gz
|
||||
|
||||
docker load -i /opt/images/jenkins.tar.gz
|
||||
|
||||
tar -zcvf jekins.tar.gz jenkins/
|
||||
|
||||
tar -zxvf jekins.tar.gz -C /opt/data/
|
||||
|
||||
tar -zcvf data.tar.gz data/
|
||||
|
||||
# 2、修改yum源
|
||||
|
||||
**概要**
|
||||
|
||||
刚装完的CentOs系统里使用的是国外的CentOs更新源,这就造成了我们使用默认更新源安装或者更新软件时速度很慢的问题。
|
||||
|
||||
为了使用yum工具能快速的安装更新软件,我们需要将默认的yum更新源配置为国内的更新源。
|
||||
|
||||
### **开启网络连接**
|
||||
|
||||
对于新装的CentOS,默认是没有开启网络连接的,所以你看不到IP地址。
|
||||
|
||||
```text
|
||||
#查看有线网设备
|
||||
ip address
|
||||
```
|
||||
|
||||
可以看到几个设备:
|
||||
|
||||
```text
|
||||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
|
||||
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
|
||||
...
|
||||
```
|
||||
|
||||
那么,有线网就是叫enp4s0,(虚拟机一般为 ens33 )
|
||||
|
||||
```text
|
||||
#打开有线网配置
|
||||
vi /etc/sysconfig/network-scripts/ifcfg-enp4s0
|
||||
#最后一行,修改为YES
|
||||
ONBOOT=YES
|
||||
#重启网络服务
|
||||
systemctl restart network.service
|
||||
```
|
||||
|
||||
### **更换yum官方源**
|
||||
|
||||
```text
|
||||
#下载wget工具,一般默认有
|
||||
yum install -y wget
|
||||
#进入yum源配置文件所在文件夹
|
||||
cd /etc/yum.repos.d/
|
||||
#备份本地yum源(修改或删除文件都建议备份下)
|
||||
mv CentOS-Base.repo CentOS-Base.repo_bak
|
||||
```
|
||||
|
||||
获取国内yum源进行覆盖(阿里云、163等等)
|
||||
|
||||
```text
|
||||
#以CentOs7为例,若为CentOs5/6只需要改下方数字
|
||||
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
|
||||
|
||||
#wget -O CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
|
||||
```
|
||||
|
||||
通常,yum 把下载的header和软件包都存储在/var/cache/yum目录中,而不会自动删除。如果你觉得它们占用了大量磁盘空间,可以使用yum clean指令进行清除
|
||||
|
||||
```text
|
||||
#清理yum缓存
|
||||
yum clean all
|
||||
#清理后重建缓存
|
||||
yum makecache
|
||||
#升级Linux系统
|
||||
yum -y update
|
||||
```
|
||||
|
||||
### **增加EPEL源**
|
||||
|
||||
(Extra Packages for Enterprise Linux),为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS等,里面有1万多个软件,**强烈建议安装。**
|
||||
|
||||
```text
|
||||
#安装epel源
|
||||
yum install epel-release
|
||||
#修改为阿里的epel源
|
||||
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
|
||||
```
|
||||
|
||||
**yum priorities** 插件可以用来强制保护源。它通过给各个源设定不同的优先级,使得系统管理员可以将某些源(比如 Linux 发行版的官方源)设定为最高优先级,从而保证系统的稳定性(同时也可能无法更新到其它源上提供的软件最新版本)。
|
||||
|
||||
```text
|
||||
#安装yum源优先级管理工具
|
||||
yum install -y yum-priorities
|
||||
#添加优先级(数字越小优先级越高)
|
||||
vim /etc/yum.repo.d/epel.repo
|
||||
priority=88
|
||||
#添加优先级(这个数要小于epel里的88即可)
|
||||
vim /etc/yum.repo.d/Centos-Base.repo
|
||||
priority=6
|
||||
#开启yum源优先级功能
|
||||
vim /etc/yum/pluginconf.d/priorities.conf
|
||||
#确保文件内容包含如下:
|
||||
[main]
|
||||
enabled=1
|
||||
```
|
||||
|
||||
133
技术探究/docker容器/docker cmd.md
Normal file
133
技术探究/docker容器/docker cmd.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# docker cmd
|
||||
|
||||
## bash
|
||||
|
||||
`docker exec -it <container> bash`
|
||||
|
||||
[Docker image的导入导出 - 简书](https://www.jianshu.com/p/69b6c4c556ad)
|
||||
|
||||
## 导出image 导出镜像
|
||||
|
||||
[docker load | Docker Documentation](https://docs.docker.com/engine/reference/commandline/load/)
|
||||
|
||||
```bash
|
||||
docker save -o /home/user/images/ubuntu_14.04.tar ubuntu:14.04
|
||||
```
|
||||
|
||||
## 导入image 导入镜像
|
||||
|
||||
```bash
|
||||
docker load --input ubuntu_14.04.tar
|
||||
```
|
||||
|
||||
## 导入导出压缩
|
||||
|
||||
```bash
|
||||
docker save mp_info | gzip > /home/userapp/xiewei/mp_info/mp_info.tar.gz
|
||||
|
||||
|
||||
# gunzip -c /home/userapp/xiewei/mp_info/mp_info.tar.gz | docker load
|
||||
|
||||
|
||||
docker save gcr.io/cadvisor/cadvisor:latest | gzip > cadvisor.tar.gz
|
||||
|
||||
|
||||
docker load -i cadvisor.tar.gz
|
||||
|
||||
|
||||
|
||||
# Load an image or repository from a tar archive (even if compressed with gzip, bzip2, or xz) from a file or STDIN. It restores both images and tags.
|
||||
# 直接读取,不解压也可以
|
||||
docker load -i /home/userapp/xiewei/mp_info/mp_info.tar.gz
|
||||
```
|
||||
|
||||
## docker run
|
||||
|
||||
最后面的 `server /data` 是指定需要在容器内执行的命令。
|
||||
|
||||
```sh
|
||||
docker run -p 9000:9000 --name myminio \
|
||||
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
|
||||
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
|
||||
-v /mnt/data:/data \
|
||||
-v /mnt/config:/root/.minio \
|
||||
minio/minio server /data
|
||||
```
|
||||
|
||||
```yml
|
||||
version: '3'
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
container_name: myminio
|
||||
ports:
|
||||
- 9000:9000
|
||||
volumes:
|
||||
- /var/minio/data:/data
|
||||
- /var/minio/config:/root/.minio
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: "root"
|
||||
MINIO_SECRET_KEY: "password"
|
||||
command: server /data
|
||||
restart: always
|
||||
```
|
||||
|
||||
## docker stack
|
||||
|
||||
单机模式下,我们可以使用 Docker Compose 来编排多个服务,而 Docker Swarm 只能实现对单个服务的简单部署。本文的主角 Docker Stack ,通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排
|
||||
|
||||
## docker cp
|
||||
|
||||
```bash
|
||||
# Docker容器向宿主机传送文件
|
||||
docker cp container_id:<docker容器内的路径> <本地保存文件的路径>
|
||||
# ---
|
||||
# 宿主机向Docker容器传送文件
|
||||
docker cp 本地文件的路径 container_id:<docker容器内的路径>
|
||||
```
|
||||
|
||||
|
||||
## docker stats
|
||||
资源监控
|
||||
|
||||
```shell
|
||||
docker top xxx
|
||||
docker stats
|
||||
```
|
||||
|
||||
|
||||
## docker 进入未启动的容器 `How To Run Commands In Stopped Docker Containers`
|
||||
|
||||
[How To Run Commands In Stopped Docker Containers · Thorsten Hans](https://www.thorsten-hans.com/how-to-run-commands-in-stopped-docker-containers/)
|
||||
|
||||
```bash
|
||||
# Commit the stopped image
|
||||
docker commit 0dfd54557799 xxx
|
||||
|
||||
# now we have a new image
|
||||
docker images list
|
||||
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||
debug/ubuntu <none> cc9db32dcc2d 2 seconds ago 64.3MB
|
||||
|
||||
|
||||
# create a new container from the "broken" image
|
||||
docker run -it --rm --entrypoint sh xxxx
|
||||
# inside of the container we can inspect - for example, the file system
|
||||
$ ls /app
|
||||
App.dll
|
||||
App.pdb
|
||||
App.deps.json
|
||||
# CTRL+D to exit the container
|
||||
|
||||
# delete the container and the image
|
||||
docker image rm xxx
|
||||
```
|
||||
|
||||
>端口映射 实际上就是 SNAT+DNAT
|
||||
都是NAT
|
||||
SNAT(源地址转换)和DNAT(目的地址转换)
|
||||
这个是 容器不能访问其他容器的情况
|
||||
```bash
|
||||
iptables -I INPUT -i docker0 -j ACCEPT
|
||||
iptables -t nat -L -n -v
|
||||
```
|
||||
420
技术探究/docker容器/docker tips.md
Normal file
420
技术探究/docker容器/docker tips.md
Normal file
@@ -0,0 +1,420 @@
|
||||
# docker tips
|
||||
|
||||
#docker #tips
|
||||
|
||||
官方教程
|
||||
|
||||
[Samples | Docker Documentation](https://docs.docker.com/samples/)
|
||||
|
||||
## docker 验证
|
||||
|
||||
docker_auth
|
||||
[GitHub - cesanta/docker_auth: Authentication server for Docker Registry 2](https://github.com/cesanta/docker_auth)
|
||||
|
||||
harbor
|
||||
[GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content.](https://github.com/goharbor/harbor)
|
||||
|
||||
nexus
|
||||
|
||||
## docker 安装源
|
||||
|
||||
[Debian Docker 安装 | 菜鸟教程](https://www.runoob.com/docker/debian-docker-install.html)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
|
||||
add-apt-repository \
|
||||
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \
|
||||
$(lsb_release -cs) \
|
||||
stable"
|
||||
apt-get update
|
||||
apt-get install docker-ce docker-ce-cli containerd.io
|
||||
```
|
||||
|
||||
## docker 容器镜像源
|
||||
|
||||
[阿里云容器镜像服务](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)
|
||||
镜像库可能只包含流行的公有镜像,而私有镜像仍需要从美国镜像库中拉取。
|
||||
但是portianer 要先在images中pull 可以找到80x86/filebrowser
|
||||
|
||||
Registry
|
||||
|
||||
```
|
||||
https://upm3cnhv.mirror.aliyuncs.com
|
||||
```
|
||||
|
||||
[汇总最近更新的一些docker镜像,群晖威联通等通用_网摘资源部落_社区_115,一生相伴](https://q.115.com/22495040/T31798.html)
|
||||
[oldiy's Profile - Docker Hub](https://hub.docker.com/u/oldiy/)
|
||||
[30多个N1可用docker镜像-百度云同步、1898种dos游戏、花生壳、可道云、蚂蚁笔记... - 斐讯无线路由器以及其它斐迅网络设备 - 恩山无线论坛 - Powered by Discuz!](https://www.right.com.cn/forum/thread-911375-1-1.html)
|
||||
[DaoCloud | Docker 极速下载](http://get.daocloud.io/)
|
||||
|
||||
### docker国内镜像源Azure 中国(最快镜像源)
|
||||
|
||||
`vim /etc/docker/daemon.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": ["https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
|
||||
}
|
||||
```
|
||||
|
||||
## docker 容器启动后立马退出的解决方法
|
||||
|
||||
Docker容器后台运行,就必须有一个前台进程
|
||||
|
||||
```
|
||||
tail -f /dev/null
|
||||
|
||||
docker run -d --name mycentos-zp5 -d centos:7.4.1708 /bin/sh -c "while true;do echo hello;sleep 5;done"
|
||||
sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
|
||||
|
||||
docker run -d --name mycentos-zp4 -d centos:7.4.1708 ping 8.8.8.8
|
||||
|
||||
docker run -dit --name ubuntu2 ubuntu
|
||||
docker run -d --name ubuntu ubuntu /bin/bash -c "tail -f /dev/null"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#####
|
||||
# docker-nginx-amplify/entrypoint.sh
|
||||
有这种写法
|
||||
nginx -g "daemon off;" &
|
||||
nginx_pid=$!
|
||||
wait ${nginx_pid}
|
||||
```
|
||||
|
||||
## 查看docker container内进程信息及与宿主机上进程的映射关系
|
||||
|
||||
1、docker ps 找到对应的容器
|
||||
2、根据container id 找到容器在宿主机上映射后的进程信息
|
||||
`docker top id`
|
||||
就会得到类似下面的信息,其中PID是容器内进程在宿主机上的pid,ppid是容器内进程在宿主机上的父进程pid
|
||||
[查看docker container内进程信息及与宿主机上进程的映射关系 - 衣舞晨风 - CSDN博客](https://blog.csdn.net/jiankunking/article/details/85853187)
|
||||
|
||||
## 映射的host目录 好像会自己建立
|
||||
|
||||
在portainer上试验是这样的
|
||||
|
||||
## PUID=1000 and PGID=1000
|
||||
|
||||
id应该是按主机上的用户id来定义
|
||||
建立文件和文件夹的权限是该账户的
|
||||
-e TZ="Asia/Shanghai" -e HOST_OS="Unraid" -e 'PUID'='99' -e 'PGID'='100'
|
||||
|
||||
[Understanding PUID and PGID - LinuxServer.io](https://docs.linuxserver.io/general/understanding-puid-and-pgid)
|
||||
|
||||
`id $user`
|
||||
|
||||
## 查看一个正在运行的Docker容器的启动命令
|
||||
|
||||
`docker ps -a --no-trunc`
|
||||
|
||||
apt-get install python-pip
|
||||
pip install setuptools
|
||||
pip install runlike
|
||||
runlike Docker_container_name
|
||||
runlike -p Docker_container_name
|
||||
|
||||
## docker开启远程tcp监听端口
|
||||
|
||||
[Docker TCP远程连接_慕课手记](https://www.imooc.com/article/details/id/28426)
|
||||
|
||||
https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file
|
||||
|
||||
> You cannot set options in daemon.json that have already been set on daemon startup as a flag. On systems that use systemd to start the Docker daemon, -H is already set, so you cannot use the hosts key in daemon.json to add listening addresses. See https://docs.docker.com/engine/admin/systemd/#custom-docker-daemon-options for how to accomplish this task with a systemd drop-in file.
|
||||
>
|
||||
|
||||
configure-docker-to-start-on-boot
|
||||
[Post-installation steps for Linux | Docker Documentation](https://docs.docker.com/engine/install/linux-postinstall/#configure-docker-to-start-on-boot)
|
||||
|
||||
Configure where the Docker daemon listens for connections
|
||||
[Post-installation steps for Linux | Docker Documentation](https://docs.docker.com/engine/install/linux-postinstall/#configure-where-the-docker-daemon-listens-for-connections)
|
||||
|
||||
按官方文档的说法,好像在centos里面用不了 daemon.json 来配置 host
|
||||
|
||||
/etc/docker/daemon.json
|
||||
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": ["https://upm3cnhv.mirror.aliyuncs.com"],
|
||||
"hosts": ["tcp://192.168.66.254:2375", "unix:///var/run/docker.sock"]
|
||||
|
||||
"hosts": ["tcp://0.0.0.0:22375", "unix:///var/run/docker.sock"]
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
所以使用下面的方法
|
||||
|
||||
systemctl edit docker.service
|
||||
|
||||
```
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:22375
|
||||
```
|
||||
|
||||
重启docker网络
|
||||
|
||||
```
|
||||
systemctl daemon-reload
|
||||
```
|
||||
|
||||
重启docker服务 重启 docker
|
||||
|
||||
```bash
|
||||
systemctl restart docker
|
||||
systemctl status docker.service
|
||||
```
|
||||
|
||||
curl -l http://localhost:22375/info
|
||||
|
||||
## Non-Root
|
||||
|
||||
[Work With Non-Root Containers for Bitnami Applications](https://docs.bitnami.com/containers/how-to/work-with-non-root-containers/)
|
||||
|
||||
## docker 普通用户 将docker权限添加给普通用户
|
||||
|
||||
[将docker权限添加给普通用户 - 简书](https://www.jianshu.com/p/b0245f0360ca)
|
||||
[使用普通用户执行 docker - klvchen - 博客园](https://www.cnblogs.com/klvchen/p/9098745.html)
|
||||
|
||||
```shell
|
||||
cat /etc/group
|
||||
sudo gpasswd -a userapp docker
|
||||
|
||||
|
||||
|
||||
# 最好不要用这个命令,这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉
|
||||
# 所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用 gpasswd 这个命令来添加操作用户
|
||||
# usermod -G docker userapp
|
||||
|
||||
#####
|
||||
groupadd docker
|
||||
gpasswd -a ${USER} docker
|
||||
|
||||
```
|
||||
|
||||
## 网络
|
||||
|
||||
### drone 有时候会导致整个服务器网络异常
|
||||
```shell
|
||||
docker network ls
|
||||
docker network rm drone-ysqYZHndoYiYX2ndglk8
|
||||
```
|
||||
|
||||
### docker 中访问宿主
|
||||
|
||||
宿主执行 ip a
|
||||
看docker0 网卡的ip
|
||||
一般是
|
||||
`172.17.0.1`
|
||||
|
||||
### host 模式
|
||||
|
||||
[docker 网络-host - 简书](https://www.jianshu.com/p/1dd65ab5b997)
|
||||
容器与主机在相同的网络命名空间下面,使用相同的网络协议栈,容器可以直接使用主机的所有网络接口
|
||||
|
||||
host 模式 不能使用端口映射和自定义路由规则,这些都与主机一致,-p 与-icc 参数是无效的
|
||||
|
||||
host 模式下面的网络模型是最简单和最低延迟的模式,容器进程直接与主机网络接口通信,与物理机性能一致
|
||||
|
||||
```bash
|
||||
docker run -itd --net host --name C1 hub.c.163.com/library/alpine:latest
|
||||
```
|
||||
|
||||
## 判断系统是否运行在Docker环境中
|
||||
|
||||
[判断系统是否运行在Docker环境中_白帽子技术/思路_i春秋社区-分享你的技术,为安全加点温度.](https://bbs.ichunqiu.com/thread-47469-1-1.html)
|
||||
|
||||
`cat /proc/1/cgroup|grep docker`
|
||||
|
||||
```bash
|
||||
# docker
|
||||
root@55ff7ae5bdae:~# cat /proc/1/sched | head -n 1
|
||||
startWebLogic.s (8212, #threads: 1)
|
||||
root@55ff7ae5bdae:~#
|
||||
|
||||
# real
|
||||
root@kali:~# cat /proc/1/sched | head -n 1
|
||||
systemd (1, #threads: 1)
|
||||
root@kali:~#
|
||||
|
||||
|
||||
|
||||
# real
|
||||
root@kali:~# ps -q1
|
||||
PID TTY TIME CMD
|
||||
1 ? 00:00:02 systemd
|
||||
root@kali:~#
|
||||
|
||||
|
||||
# docker
|
||||
root@55ff7ae5bdae:~# ps -p 1
|
||||
PID TTY TIME CMD
|
||||
1 ? 00:00:00 startWebLogic.s
|
||||
root@55ff7ae5bdae:~#
|
||||
```
|
||||
|
||||
## 容器内查看运行时间
|
||||
|
||||
[uptime command gives weird results in a docker image - Server Fault](https://serverfault.com/questions/830643/uptime-command-gives-weird-results-in-a-docker-image)
|
||||
`stat /proc/1/cmdline`
|
||||
|
||||
## unraid 的docker命令
|
||||
|
||||
```bash
|
||||
root@localhost:# /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/docker create --name='nginx' --net='bridge' --log-opt max-size='50m' --log-opt max-file='1' -e TZ="Asia/Shanghai" -e HOST_OS="Unraid" -e 'PUID'='99' -e 'PGID'='100' -p '2280:80/tcp' -p '22443:443/tcp' -v '/mnt/user/appdata/nginx':'/config':'rw' 'linuxserver/nginx'
|
||||
1c20c14ca61487a84313eac231c46fdaa0818eb1e5a872246abd6147c97f8945
|
||||
```
|
||||
|
||||
## docker restart policy
|
||||
|
||||
[Docker容器的重启策略及docker run的--restart选项详解_运维_成长的足迹-CSDN博客](https://blog.csdn.net/taiyangdao/article/details/73076019)
|
||||
|
||||
no:不自动重新启动容器。(默认)默认策略,在容器退出时不重启容器
|
||||
|
||||
on-failure :由于一个错误退出,它表现为退出状态不等于0,自动启动容器
|
||||
on-failure:3,在容器非正常退出时重启容器,最多重启3次
|
||||
|
||||
unless-stopped :除非被显式停止 stop、kill 否则docker服务停止或自动重启,自动启动容器
|
||||
在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
|
||||
|
||||
always:如果容器停止,总是重新启动容器。(这是官方解释,如果手动kill容器 无法自动重启,应该也属于正常 如果手动都不能让他停止 也许我们会更烦恼怎么停止它~~~~)在容器退出时总是重启容器
|
||||
|
||||
使用重新启动策略时请记住以下几点:
|
||||
|
||||
1. 重新启动策略仅在容器启动成功后才生效。在这种情况下,启动成功意味着容器已启动至少10秒,并且Docker已开始监视它。这可以防止根本不启动的容器进入重启循环。
|
||||
2. 如果手动停止容器,则会忽略其重新启动策略,直到Docker守护程序重新启动或手动重新启动容器。这是另一个防止重启循环的尝试。
|
||||
3. 重新启动策略仅适用于容器。群集服务的重新启动策略配置不同。
|
||||
https://docs.docker.com/engine/reference/commandline/service_create/
|
||||
|
||||
## Configure Docker to use a proxy server 容器内代理
|
||||
|
||||
两种方式
|
||||
|
||||
一个是配置文件
|
||||
一个是容器的环境变量
|
||||
|
||||
| Variable | Dockerfile example | `docker run` Example |
|
||||
| ------------- | ------------------------------------------------- | --------------------------------------------------- |
|
||||
| `HTTP_PROXY` | `ENV HTTP_PROXY "http://127.0.0.1:3001"` | `--env HTTP_PROXY="http://127.0.0.1:3001"` |
|
||||
| `HTTPS_PROXY` | `ENV HTTPS_PROXY "https://127.0.0.1:3001"` | `--env HTTPS_PROXY="https://127.0.0.1:3001"` |
|
||||
| `FTP_PROXY` | `ENV FTP_PROXY "ftp://127.0.0.1:3001"` | `--env FTP_PROXY="ftp://127.0.0.1:3001"` |
|
||||
| `NO_PROXY` | `ENV NO_PROXY "*.test.example.com,.example2.com"` | `--env NO_PROXY="*.test.example.com,.example2.com"` |
|
||||
|
||||
## 宿主机进程的问题
|
||||
|
||||
[在Linux宿主机审计docker进程和网络连接 - 血梦博客 - 专注于网络安全|渗透测试|代码审计|国内最专业的黑客技术博客](http://www.hacksec.cn/Penetration-test/965.html)
|
||||
|
||||
有docker字样的是docker进程
|
||||
|
||||
```bash
|
||||
root@unRaid:~# cat /proc/23437/cgroup
|
||||
10:pids:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
9:perf_event:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
8:net_cls:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
7:freezer:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
6:devices:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
5:memory:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
4:blkio:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
3:cpuacct:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
2:cpu:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
1:cpuset:/docker/069de498d1d22d31565ea8816981cb4d546e5437bb0e84ff0d6bdc2655475b5f
|
||||
```
|
||||
|
||||
## 保存修改后的容器
|
||||
|
||||
[保存对容器的修改 - Docker入门教程 - docker中文社区](http://www.docker.org.cn/book/docker/docer-save-changes-10.html)
|
||||
|
||||
commit 之前最好停止容器
|
||||
|
||||
查看被修改的容器:docker ps -l
|
||||
提交指定容器保存为新的镜像: `docker commit <container id> <new image name>`
|
||||
查看本地所有镜像:docker images
|
||||
|
||||
[Docker保存修改后的镜像 - 知乎](https://zhuanlan.zhihu.com/p/86524042)
|
||||
|
||||
```text
|
||||
docker run -it ubuntu:16.04 /bin/bash
|
||||
|
||||
docker run -it openjdk:8-jdk /bin/bash
|
||||
docker commit d3742a06f8ae openjdk-tesseract
|
||||
```
|
||||
|
||||
## Docker 配置 HTTP 代理
|
||||
|
||||
[Docker配置HTTP代理 - Hazx小屋](https://hazx.hmacg.cn/server/docker-http-proxy.html)
|
||||
|
||||
配置的 HTTP 代理主要用于 Docker 拉取 (pull) 和推送 (push) 镜像使用。不会影响 Docker 容器的联网状态。
|
||||
Docker 代理仅支持 HTTP 协议。
|
||||
若有特殊需求,请自备梯子。
|
||||
代理地址配置为自己的本地服务器地址,必须是 HTTP 代理协议。
|
||||
NO_PROXY 配置跳过代理的地址,需要填入所以用到的本地地址,支持 *,多个地址用逗号隔开。
|
||||
|
||||
```bash
|
||||
mkdir -p /etc/systemd/system/docker.service.d
|
||||
vim /etc/systemd/system/docker.service.d/http-proxy.conf
|
||||
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://192.168.100.100:8080/"
|
||||
Environment="HTTPS_PROXY=http://192.168.100.100:8080/"
|
||||
Environment="NO_PROXY=localhost,127.0.0.1,10.96.0.1,192.168.*"
|
||||
|
||||
|
||||
systemctl daemon-reload
|
||||
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
## docker 运行 代理
|
||||
|
||||
[Configure Docker to use a proxy server | Docker Documentation](https://docs.docker.com/network/proxy/)
|
||||
|
||||
| Variable | Dockerfile example | `docker run` Example |
|
||||
| ------------- | ------------------------------------------------- | --------------------------------------------------- |
|
||||
| `HTTP_PROXY` | `ENV HTTP_PROXY="http://127.0.0.1:3001"` | `--env HTTP_PROXY="http://127.0.0.1:3001"` |
|
||||
| `HTTPS_PROXY` | `ENV HTTPS_PROXY="https://127.0.0.1:3001"` | `--env HTTPS_PROXY="https://127.0.0.1:3001"` |
|
||||
| `FTP_PROXY` | `ENV FTP_PROXY="ftp://127.0.0.1:3001"` | `--env FTP_PROXY="ftp://127.0.0.1:3001"` |
|
||||
| `NO_PROXY` | `ENV NO_PROXY="*.test.example.com,.example2.com"` | `--env NO_PROXY="*.test.example.com,.example2.com"` |
|
||||
|
||||
## ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
|
||||
|
||||
原因是防火墙关闭之后需要重启docker服务
|
||||
|
||||
`service docker restart`
|
||||
|
||||
## tools
|
||||
|
||||
ctop 监控
|
||||
[ctop](https://ctop.sh/)
|
||||
[CTOP一款管理Docker容器的TOP命令 | 佰阅部落](https://baiyue.one/archives/1135.html)
|
||||
|
||||
## links
|
||||
|
||||
[Docker 与 Vagrant 的区别? - V2EX](https://www.v2ex.com/t/296100#reply17)
|
||||
[docker 部署方式 - V2EX](https://www.v2ex.com/t/401144#reply9)
|
||||
[有什么好玩的自建服务没? 最近在玩 docker,搭上瘾了。。。。。 - V2EX](https://www.v2ex.com/t/226691#reply7)
|
||||
|
||||
[实在没理解 docker 或 vagrant 是怎么统一 开发 环境的 - V2EX](https://www.v2ex.com/t/388777#reply34)
|
||||
[Dockerize PostgreSQL | Docker Documentation](https://docs.docker.com/engine/examples/postgresql_service/)
|
||||
|
||||
[docker 使用 mysql 时选择新建 mysql 容器还是单一容器内新开 mysql 进程? - V2EX](https://www.v2ex.com/t/357237#reply32)
|
||||
|
||||
> docker 建议是单一进程的,也就是这一个容器里只跑一个进程
|
||||
> 别在 docker 上跑数据库,会被坑死的
|
||||
>
|
||||
|
||||
[京东MySQL数据库Docker化最佳实践(附PPT) - MySQL - dbaplus社群:围绕Data、Blockchain、AiOps的企业级专业社群。技术大咖、原创干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙。](https://dbaplus.cn/news-11-1118-1.html)
|
||||
|
||||
[容器监控实践—cAdvisor - 简书](https://www.jianshu.com/p/91f9d9ec374f)
|
||||
|
||||
[Samples | Docker Documentation](https://docs.docker.com/samples/)
|
||||
|
||||
### 资料
|
||||
|
||||
[WORKDIR 指定工作目录-Docker — 从入门到实践](https://www.cntofu.com/book/139/image/dockerfile/workdir.md)
|
||||
|
||||
### books
|
||||
|
||||
[Docker — 从入门到实践](https://www.cntofu.com/book/139/index.html)
|
||||
34
技术探究/docker容器/docker 命令.md
Normal file
34
技术探究/docker容器/docker 命令.md
Normal file
@@ -0,0 +1,34 @@
|
||||
|
||||
docker compose up -d
|
||||
docker compose down
|
||||
|
||||
### docker 执行命令
|
||||
```
|
||||
docker run -it -u 1000:1000 --rm -v "$PWD":/usr/src/app -w /usr/src/app node:14.21 bash a.sh
|
||||
docker run -it -u 1000:1000 --rm -v "$PWD":/usr/src/app -w /usr/src/app node:14.21 bash
|
||||
```
|
||||
|
||||
```
|
||||
docker run -it -u 1000:1000 --rm -v "$PWD":/usr/src/mymaven -v "$HOME/.m2":/root/.m2 -v "$PWD/target":/usr/src/mymaven/target -w /usr/src/mymaven maven mvn clean package
|
||||
```
|
||||
|
||||
## docker java 环境变量
|
||||
```
|
||||
docker run -itd -p 28080:28080 -e "SPRING_PROFILES_ACTIVE=prod" -e "SWAGGER_ENABLED=true" -e "KNIFE4J_PRODUCTION=false" -v /data/jfzx/docker_data/nginx/cache:/nginx/cache --name idigital-admin-server idigital-admin-server:latest
|
||||
```
|
||||
* -e SPRING_PROFILES_ACTIVE=prod 指定 yml
|
||||
* 其他 跟jar 启动 一样
|
||||
|
||||
## docker 代理
|
||||
```
|
||||
[root@master ~]# systemctl show --property=Environment docker
|
||||
Environment=HTTP_PROXY=http://192.168.186.1:10809/ HTTPS_PROXY=http://192.168.186.1:10809/
|
||||
[root@master ~]# mkdir -p /etc/systemd/system/docker.service.d
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
[root@master ~]# cd /etc/systemd/system/docker.service.d/
|
||||
[root@master docker.service.d]# cat http-proxy.conf
|
||||
[Service]
|
||||
Environment="HTTP_PROXY=http://192.168.186.1:10809/"
|
||||
Environment="HTTPS_PROXY=http://192.168.186.1:10809/"
|
||||
```
|
||||
120
技术探究/docker容器/docker 常用软件.md
Normal file
120
技术探究/docker容器/docker 常用软件.md
Normal file
@@ -0,0 +1,120 @@
|
||||
## 阿里云 ECS 安装 docker
|
||||
> https://developer.aliyun.com/article/1662498
|
||||
|
||||
## 普通用户入组
|
||||
```
|
||||
sudo usermod -aG docker userapp
|
||||
```
|
||||
|
||||
## nginx-proxy
|
||||
```
|
||||
docker run -d -p 9024:80 -p 9025:81 -p 9026:443 -v /data/letsencrypt:/etc/letsencrypt -v /data/nginx-proxy-manager/data:/data --name nginx-proxy-manager docker.io/jc21/nginx-proxy-manager:latest
|
||||
```
|
||||
|
||||
## portainer
|
||||
```shell
|
||||
docker run -d -p 9000:9000 --name porainer -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer:/data --restart=always portainer/portainer-ce:2.19.4
|
||||
```
|
||||
## mysql
|
||||
|
||||
/data/mysql/conf
|
||||
```shell
|
||||
touch my.cnf
|
||||
```
|
||||
|
||||
```text
|
||||
[client]
|
||||
default_character_set=utf8mb4
|
||||
[mysql]
|
||||
default_character_set=utf8mb4
|
||||
[mysqld]
|
||||
collation_server = utf8mb4_unicode_ci
|
||||
character_set_server = utf8mb4
|
||||
```
|
||||
|
||||
```shell
|
||||
docker run -p 9090:3306 --name mysql \
|
||||
-v /data/mysql/log:/var/log/mysql \
|
||||
-v /data/mysql/data:/var/lib/mysql \
|
||||
-v /data/mysql/conf:/etc/mysql/conf.d \
|
||||
-e MYSQL_ROOT_PASSWORD=root \
|
||||
-d mysql:5.7
|
||||
```
|
||||
|
||||
## nginx
|
||||
1. 生成容器
|
||||
1. 将容器nginx.conf文件复制到宿主机
|
||||
1. 将容器conf.d文件夹下内容复制到宿主机
|
||||
1. 将容器中的html文件夹复制到宿主机
|
||||
```
|
||||
docker run --name nginx -p 9001:80 -d nginx
|
||||
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
|
||||
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
|
||||
|
||||
# 删除正在运行的nginx容器
|
||||
docker rm -f nginx
|
||||
|
||||
docker run \
|
||||
-p 9002:80 \
|
||||
--name nginx \
|
||||
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
|
||||
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
|
||||
-v /home/nginx/log:/var/log/nginx \
|
||||
-v /home/nginx/html:/usr/share/nginx/html \
|
||||
-d nginx:latest
|
||||
```
|
||||
|
||||
## redis
|
||||
配置文件
|
||||
![[redis.conf]]
|
||||
|
||||
```
|
||||
docker run -p 6379:6379 --name redis -v /data/redis/data:/data -v /data/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
|
||||
```
|
||||
|
||||
## docker Jenkins
|
||||
https://blog.csdn.net/weixin_44000133/article/details/132189696
|
||||
|
||||
## filebrowser
|
||||
### 注意!!!! 需要先创建文件,不是文件夹
|
||||
```
|
||||
docker run \
|
||||
-v /path/to/root:/srv \
|
||||
-v /path/to/filebrowser.db:/database/filebrowser.db \
|
||||
-v /path/to/settings.json:/config/settings.json \
|
||||
-e PUID=$(id -u) \
|
||||
-e PGID=$(id -g) \
|
||||
-p 8080:80 \
|
||||
-d \
|
||||
--name filebrowser \
|
||||
filebrowser/filebrowser:v2.25.0-s6
|
||||
```
|
||||
|
||||
```json
|
||||
settings.json
|
||||
{
|
||||
"port": 80,
|
||||
"baseURL": "",
|
||||
"address": "",
|
||||
"log": "stdout",
|
||||
"database": "/database/filebrowser.db",
|
||||
"root": "/srv"
|
||||
}
|
||||
```
|
||||
|
||||
## ssh web niruix/sshwifty
|
||||
```
|
||||
ssl 凭据
|
||||
openssl req -newkey rsa:4096 -nodes -keyout domain.key -x509 -days 90 -out domain.crt
|
||||
|
||||
mkdir -p /data/sshwifty
|
||||
|
||||
docker run --detach \
|
||||
--restart always \
|
||||
--publish 8182:8182 \
|
||||
--env SSHWIFTY_DOCKER_TLSCERT="$(cat domain.crt)" \
|
||||
--env SSHWIFTY_DOCKER_TLSCERTKEY="$(cat domain.key)" \
|
||||
--name sshwifty \
|
||||
niruix/sshwifty:latest
|
||||
|
||||
```
|
||||
37
技术探究/docker容器/docker环境搭建.md
Normal file
37
技术探究/docker容器/docker环境搭建.md
Normal file
@@ -0,0 +1,37 @@
|
||||
docker 环境
|
||||
```
|
||||
1.pom/jenkinsfile/dockerfille
|
||||
|
||||
2.基础镜像 open jdk 公网下载
|
||||
|
||||
a.没有hub仓库的时候,镜像上传jenkins所在主机的load imges
|
||||
|
||||
b.如果存在 harbor 仓库,需要上传权限,构建后上传到 harbor里面
|
||||
|
||||
3.修改jenkinsfile
|
||||
```
|
||||
|
||||
在目标主机拉取构建后的镜像 并运行
|
||||
```
|
||||
a、导出 images 传到目标主机,目标主机load 镜像,并运行
|
||||
|
||||
b、在目标主机上 拉取 构建后镜像 并运行
|
||||
```
|
||||
|
||||
二、基础镜像
|
||||
```
|
||||
保证能读取 openjdk 基础镜像(无论是 jenkins 主机 还是harbor 仓库 )
|
||||
|
||||
然后进行构建;对于构建的结果
|
||||
|
||||
1、如果不存在 harbor 仓库,那么结果在jenkins 主机上,在(三)进行导出;
|
||||
|
||||
2、如果存在 harbor 仓库,需要上传权限,构建后上传到 harbor里面;
|
||||
```
|
||||
三 修改 Jenkisfile
|
||||
```
|
||||
1、导出 images 传到目标主机,目标主机load 镜像,并运行
|
||||
|
||||
2、在目标主机上 拉取 harbor 构建后镜像 并运行
|
||||
```
|
||||
|
||||
92
技术探究/docker容器/节点容器化自动构建流程.md
Normal file
92
技术探究/docker容器/节点容器化自动构建流程.md
Normal file
@@ -0,0 +1,92 @@
|
||||
## 节点容器化自动构建流程
|
||||
|
||||
|
||||
|
||||
#### 设置GitLab服务器钩子
|
||||
|
||||
运用GitLab的webhook,勾选push Event,当每次有push操作的时候,会触发webhook向Jenkins发送事件。
|
||||
|
||||
|
||||
|
||||
#### Jenkins配置主要步骤
|
||||
|
||||
##### 新建Job项目
|
||||
|
||||
新建项目,并添加项目描述。
|
||||
|
||||

|
||||
|
||||
##### Git项目源配置
|
||||
|
||||

|
||||
|
||||
##### Maven构建配置
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
##### 清理镜像构建服务器的Jar包并重新上传
|
||||
|
||||
* 采用远程执行脚本清理镜像构建服务器的旧Jar包
|
||||
* 复制新构建成功的Jar至镜像构建服务器上
|
||||
|
||||
##### 清理旧的容器实例
|
||||
|
||||
```
|
||||
container=`docker container ls -a | grep $container_name | awk '{print $1}'`
|
||||
|
||||
echo 'stop container ' $container
|
||||
[[ -n $container ]] && docker stop $container
|
||||
|
||||
echo 'rm container ' $container
|
||||
[[ -n $container ]] && docker rm $container
|
||||
```
|
||||
|
||||
##### 清理旧的镜像实例
|
||||
|
||||
```
|
||||
image=`docker images | grep $image_name | awk '{print $3}'`
|
||||
|
||||
echo 'rm image ' $image
|
||||
[[ -n $image ]] && docker rmi $image
|
||||
```
|
||||
|
||||
##### 构建镜像文件
|
||||
|
||||
dockerfile如下:
|
||||
|
||||
```
|
||||
# 基础镜像
|
||||
FROM openjdk:8-jre
|
||||
# author
|
||||
MAINTAINER ruoyi
|
||||
|
||||
# 挂载目录
|
||||
VOLUME /home/ruoyi
|
||||
# 创建目录
|
||||
RUN mkdir -p /home/ruoyi
|
||||
# 指定路径
|
||||
WORKDIR /home/ruoyi
|
||||
# 复制jar文件到路径
|
||||
COPY ./jar/ruoyi-modules-system.jar /home/ruoyi/ruoyi-modules-system.jar
|
||||
# 启动系统服务
|
||||
ENTRYPOINT ["java","-jar","ruoyi-modules-system.jar"]
|
||||
```
|
||||
|
||||
构建镜像:
|
||||
|
||||
```
|
||||
docker build -t ruoyi-modules-system:0.0.1 .
|
||||
```
|
||||
|
||||
##### 运行容器实例
|
||||
|
||||
```
|
||||
new_image=`docker images |grep $image_name |awk '{print $3}'`
|
||||
|
||||
[[ -n $new_image ]] && docker run -d -p 19201:9201 --name $container_name $new_image
|
||||
```
|
||||
|
||||
|
||||
|
||||
28
技术探究/docker容器/镜像下载教程.md
Normal file
28
技术探究/docker容器/镜像下载教程.md
Normal file
@@ -0,0 +1,28 @@
|
||||
给鹏飞的镜像下载教程
|
||||
|
||||
https://hub.docker.com/ 上查看镜像的 pull 命令
|
||||
比如原来是 docker pull postgres:14,也就是没有用户名的,是 docker 的官方镜像
|
||||
改成
|
||||
docker pull docker.wanpeng.top/library/postgres:14
|
||||
docker tag docker.wanpeng.top/library/postgres:14 postgres:14
|
||||
docker rmi docker.wanpeng.top/library/postgres:14
|
||||
|
||||
原来是 docker pull bitnami/mediawiki:1.40.0 ,也就是用户名是 bitnami ,属于 bitnami 组织或者公司的镜像
|
||||
改成
|
||||
|
||||
|
||||
docker pull docker.wanpeng.top/bitnami/mediawiki:1.40.0
|
||||
docker tag docker.wanpeng.top/bitnami/mediawiki:1.40.0 bitnami/mediawiki:1.40.0
|
||||
docker rmi docker.wanpeng.top/bitnami/mediawiki:1.40.
|
||||
|
||||
2025-01-15 目前可用的代理加速地址
|
||||
docker.wanpeng.top
|
||||
hub.211678.top
|
||||
cjie.eu.org
|
||||
dhub.kubesre.xyz
|
||||
|
||||
下载不行,或者报错,有时候是不能用了,有时候是抽风了,多试几次
|
||||
|
||||
|
||||
dockerpull.cn
|
||||
新增一个这个
|
||||
Reference in New Issue
Block a user