Docker-杂项
参考文献
Docker基础概念与操作
- Docker核心概念: 镜像,容器,仓库.
- 镜像是Docker容器启动的先决条件.
- 容器是镜像的运行实体,镜像是静态的只读文件,容器带有运行时需要的可写文件层,并且容器中的进程存于运行状态.即容器运行着真正的应用程序.
- 仓库用来存储和分发Docker镜像.镜像仓库分为公共镜像仓库和私有镜像仓库.
- 镜像,容器,仓库三者之间的关系
- 镜像是容器的基石,容器是由镜像创建的.
- 一个镜像可以创建多个容器,容器是镜像运行的实体.
- 仓库用来存放和分发镜像的.
安装Docker
1 | curl -fsSL https://get.docker.com | sudo sh -s -- --mirror Aliyun |
常用组件启动命令
-
Redis
1
docker run -itd --name redis -p 6379:6379 redis
-
Elasticsearch
1
2
3
4
5docker run --name elasticsearch
-p 9200:9200 -p 9300:9300
-e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"
elasticsearch:7.14.0 -
Portainer
1
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name portainer portainer/portainer
-
Kafka
1
2docker pull wurstmeister/kafka
docker pull wurstmeister/zookeeper -
启动zk
1
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
-
启动kafka
1
2
3
4
5
6
7docker run --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.40.78:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.40.78:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-d wurstmeister/kafka -
consul
1
docker run --name consul -d -p 8500:8500 -v /Users/holelin/data/consul/config:/consul/config -v /Users/holelin/data/consul/data:/consul/data consul agent -server -data-dir=/consul/data -config-dir=/consul/config -bind=0.0.0.0 -client=0.0.0.0 -node=consul -bootstrap-expect=1 -ui
-
RabbitMQ
1
docker run -dit --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
遇到的问题
Docker日志文件导致磁盘满了,清理方法
-
Docker容器在启动/重启的时候会往
/var/lib/docker
中写东西,若在启动docker容器遇到No space left on device
的问题,可使用以下步骤来解决 -
对
/var/lib/docker/containers
下的文件夹进行排序,看看哪个容器杂用太多的磁盘空间1
du -d1 -h /var/lib/docker/containers | sort -h
-
选择需要清理的容器进行清理
1
cat /dev/null > /var/lib/docker/containers/container_id/container_log_name
-
限制日志文件的大小
1
docker run -it --log-opt max-size=10m --log-opt max-file=33 alpine ash
安装docker使用默认安装路径/var/lib/docker
,导致磁盘满了
迁移docker数据目录
-
备份数据: 在修改之前,请务必备份
/var/lib/docker
目录中的所有数据.这涉及到容器、镜像、网络和数据卷等重要信息.以防修改过程中发生意外或出现问题,可以通过备份恢复数据. -
停止Docker服务: 在修改路径之前,确保停止Docker服务.可以使用以下命令停止Docker服务:
1
sudo systemctl stop docker
-
修改配置文件: 打开Docker的配置文件,通常位于
/etc/docker/daemon.json
.如果该文件不存在,则需要创建一个新文件.在该文件中添加以下内容1
2
3{
"data-root": "/new/path/to/docker"
} -
迁移数据: 将旧的
/var/lib/docker
目录中的所有数据迁移到新的路径.可以使用以下命令进行迁移1
2
3sudo rsync -aP /var/lib/docker/ /new/path/to/docker/
# 或者
sudo rsync -r -avz /var/lib/docker /new/path/to/docker/-r
选项表示递归复制目录及其子目录。-a
选项表示归档模式,它将尽力保留文件的所有特性,包括权限、所有者、时间戳等。-v
选项表示详细模式,它会显示文件传输的详细信息。-z
选项表示启用压缩传输,在传输过程中对数据进行压缩,以减少网络带宽的使用。-a
选项同样表示归档模式。-P
选项是--progress
和--partial
的缩写。
-
启动Docker服务: 完成数据迁移后,重新启动Docker服务
1
sudo systemctl start docker
-
确认验证: 验证Docker是否以新的路径进行操作.可以使用以下命令来检查Docker的数据路径:
1
docker info | grep "Docker Root Dir"
启动容器报错cannot execute binary file
- 完整报错信息
1 | root@xx-PowerEdge-R740:/home/xxx/data/code# docker run --name temp -p 20016:30016 xxx:0.0.0.2 |
Dockerfile
文件
1 | FROM base:0.0.0.1 |
- 修改后的
1 | FROM base:0.0.0.1 |
-
deploy.sh
内容1
2# /bin/bash
/usr/local/python start.py
删除tag
为<none>
的镜像
1 | $ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') //停止容器 |
docker
使用mongodb
容器时报错[main] permissions on /data/keyFile/mongodb.key are too open
1 | version: '2.0' |
mongodb
配置文件
1 | security: |
-
解决办法
1
chmod 400 /data/keyFile/mongodb.key
Docker
开启远程访问
-
编辑
/usr/lib/systemd/system/docker.service
文件1
vim /usr/lib/systemd/system/docker.service
-
在
ExecStart
添加-H tcp://0.0.0.0:2375
1
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
-
重新加载
Docker
配置生效1
2systemctl daemon-reload
systemctl restart docker
Docker
后台进程参数清单如下表
参数 | 解释 |
---|---|
–add-runtime runtime |
选择容器运行时引擎,默认 containerd |
–allow-nondistributable-artifacts list |
因为类如 window base image 包含版权限制,所以配置指定的私有镜像仓库,可以帮助应用正常发布 |
–api-cors-header string |
提供跨站 API 请求自定义包头信息 |
–authorization-plugin list |
认证插件配置 |
–bip string |
配置网桥地址 |
-b, –bridge string |
连接网桥 |
–cgroup-parent string |
配置容器的父 cgroup 信息 |
–cluster-advertise string |
集群广播网络地址 |
–cluster-store string |
集群存储支持 |
–cluster-store-opt map |
集群存储参数配置 |
–config-file string |
后台引擎参数配置文件 |
–containerd string |
容器引擎实例网络套接字路径 |
–cpu-rt-period int |
限制 CPU 间隔频率(微秒级别) |
–cpu-rt-runtime int |
限制 CPU 运行时频率(微秒级别) |
–data-root string |
容器引擎数据根目录地址 |
-D, –debug |
调试信息 |
–default-gateway ip |
容器默认 IPv4 网络网关 |
–default-gateway-v6 ip |
容器默认 IPv6 网络网关 |
–default-runtime string |
容器运行时,默认 runc |
–default-ulimit ulimit |
配置容器默认最大文件限制数,改善运行性能 |
–disable-legacy-registry |
废弃老版本镜像仓库 |
–dns list |
DNS 服务地址 |
–dns-opt list |
DNS 服务参数 |
–dns-search list |
DNS服务查询域名配置 |
–exec-opt list |
运行时执行参数 |
–exec-root string |
运行时执行根目录地址 |
–experimental |
启用实验性特性 |
–fixed-cidr string |
固定 IPv4 网段 |
–fixed-cidr-v6 string |
固定 IPv6 网段 |
-G, –group string |
网络套接字所属组 |
–help |
帮助信息 |
-H, –host list |
后台进程连接地址 |
–icc |
启用容器间的网络互联,默认启用 |
–init |
在容器运行时启动一个 init 程序,来统一管理进程 |
–init-path string |
docker init 的路径地址 |
–insecure-registry list |
非安全镜像仓库地址列表 |
–ip ip |
默认容器绑定 IP 地址,默认 0.0.0.0 |
–ip-forward |
启动 net.ipv4.ip_forward |
–ip-masq |
启动IP混淆 |
–iptables |
启动默认的iptable规则 |
–ipv6 |
启动 IPv6 网络 |
–label list |
配置键值对参数到引擎后台 |
–live-restore |
启用容器热迁移特性 |
–log-driver string |
日志驱动配置,默认 json-file |
-l, –log-level string |
日志级别 |
–log-opt map |
日志驱动参数 |
–max-concurrent-downloads int |
每次 pull 的最大下载线程数 |
–max-concurrent-uploads int |
每次 push 最大上传线程数 |
–metrics-addr string |
监控地址 |
–mtu int |
网络数据包 MTU 配置 |
–no-new-privileges |
去掉 no*new*privs 权限 |
–oom-score-adjust int |
OOM 阈值配置 |
-p, –pidfile string |
引擎后台进程文件地址 |
–raw-logs |
无 ANSI 颜色的日志 |
–registry-mirror list |
镜像仓库同步镜像地址 |
–seccomp-profile string |
seccomp 文件地址 |
–selinux-enabled |
启用 selinux |
–shutdown-timeout int |
默认停机超时时间,默认15 秒 |
-s, –storage-driver string |
容器存储驱动 |
–storage-opt list |
容器存储驱动参数 |
–swarm-default-advertise-addr string |
swarm 集群广播地址 |
–tls |
使用 TLS 认证 |
–tlscacert string |
CA 文件地址 |
–tlscert string |
TLS 认证文件地址 |
–tlskey string |
TLS 私钥地址 |
–tlsverify |
使用 TLS 认证 |
–userland-proxy |
使用用户态 proxy 来路由 loopback 流量 |
–userland-proxy-path string |
用户态 proxy 地址 |
–userns-remap string |
用户命令空间的用户、用户组配置 |
-v, –version |
版本 |
Ubuntu
离线安装nvidia-container-runtime
-
下载
libnvidia-container
安装包(在Ubuntu
下是deb
文件)- 下载地址: https://github.com/NVIDIA/libnvidia-container/tree/gh-pages/stable
- 使用
sudo dpkg -i libnvidia-container1_${version}-1_amd64.deb
-
下载
nvidia-container-toolkit
和nvidia-container-runtime
-
下载地址: https://github.com/NVIDIA/nvidia-container-runtime/tree/gh-pages/stable
1
2sudo dpkg -i nvidia-container-toolkit_${version}-1_amd64.deb
sudo dpkg -i nvidia-container-runtime_${version}-1_amd64.deb
-
-
配置
/etc/docker/daemon.json
1
2
3
4
5
6
7
8{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}-
一般
nvidia-container-runtime
路径在/usr/bin/nvidia-container-runtime
1
2
3
4# ls -al /usr/bin/ | grep nvidia-container-runtime
-rwxr-xr-x 1 root root 4079040 9月 6 2022 nvidia-container-runtime
-rwxr-xr-x 1 root root 2142088 9月 6 2022 nvidia-container-runtime-hook
lrwxrwxrwx 1 root root 38 12月 15 2022 nvidia-container-toolkit -> /usr/bin/nvidia-container-runtime-hook
-
在线安装(APT
)
-
Configure the production repository:
1
2
3
4curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list -
Update the packages list from the repository:
1
sudo apt-get update
-
Install the NVIDIA Container Toolkit packages:
1
sudo apt-get install -y nvidia-container-toolkit
Ubuntu 18.04
离线安装Docker
-
下载
deb
包1
2
3
4
5
6
7
8-rwx------ 1 holelin staff 26M 1 23 09:46 containerd.io_1.6.9-1_amd64.deb
-rwx------ 1 holelin staff 25M 1 23 09:46 docker-buildx-plugin_0.10.5-1~ubuntu.18.04~bionic_amd64.deb
-rwx------ 1 holelin staff 13M 1 23 09:46 docker-ce-cli_24.0.2-1~ubuntu.18.04~bionic_amd64.deb
-rwx------ 1 holelin staff 8.6M 1 23 09:46 docker-ce-rootless-extras_24.0.2-1~ubuntu.18.04~bionic_amd64.deb
-rwx------ 1 holelin staff 22M 1 23 09:46 docker-ce_24.0.2-1~ubuntu.18.04~bionic_amd64.deb
-rwx------ 1 holelin staff 10M 1 23 09:46 docker-compose-plugin_2.18.1-1~ubuntu.18.04~bionic_amd64.deb
-rwx------ 1 holelin staff 3.5M 1 23 09:46 docker-scan-plugin_0.23.0~ubuntu-bionic_amd64.deb
-rwx------ 1 holelin staff 42K 1 23 10:03 libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb -
先安装
libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb
,然后安装containerd.io_1.6.9-1_amd64.deb
,最后安装docker*.deb
1
2
3dpkg -i libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb
dpkg -i containerd.io_1.6.9-1_amd64.deb
dpkg -i docker* -
验证
1
2
3systemctl status docker
docker info