容器设置开机自启#
容器创建时未指定 --restart=always , 可通过 update 命令设置
docker update --restart=always 容器ID
容器关闭自启动#
docker update --restart=no 容器ID
获取容器 / 镜像的元数据#
docker inspect id
容器网络#
创建容器网络
#docker network create --subnet 子网范围 --ip-range 子网内可用的IP地址范围 Docker网络名
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.1.102/29 zabbix-net
删除创建的容器网络#
#查看容器网络
docker network ls
#删除容器网络
docker network rm 容器id
查看 docker 所有容器 ip#
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
查看所有容器的名字#
#查看所有容器名字
docker ps -a --format {{.Names}}
docker 生成镜像(无目录映射)#
docker commit id/容器名 镜像名
# 生成带有提交信息与作者的镜像
docker commit -m "提交信息" -a "作者" id/容器名 镜像名
#查看提交信息与作者
docker inspect --format '提交信息:{{.Comment}}, 作者:{{.Author}}' 镜像名
对有目录 / 文件映射的容器的处理
针对映射了宿主机的文件 / 目录的容器,在打包成镜像时,映射文件 / 目录并不会被打包进去。
针对这种情况提供两种解决方案:
1. 先生成镜像文件,再用新生成的镜像创建一个容器,将原来的映射目录 / 文件拷贝进容器后再打包,最后就会形成一个带有源目录镜像文件。
docker cp 要拷贝的文件或目录 容器ID或容器名称:要拷贝到的容器内部位置
2. 对外提供镜像时,把映射文件一起提供出去。当运行镜像时,指定映射关系。
导出镜像为压缩包#
docker save -o /home/镜像名.tar 镜像名:latest
将镜像名.tar 导入为镜像#
# 导入方法一
docker load --input /home/skj.tar
# 导入方法二
$ docker load -i /home/skj.tar
# 导入方法三
$ docker load < /home/skj.tar
运行 docker compose 文件,创建相关容器#
docker compose -f docker-compose-XXXXXXX.yml up -d
创建 docker compose 文件时,要使用已经存在的网络,书写脚本网络内容的命令如下:
networks:
网络名称:
external: true
Docker 命令补全#
curl -L https://raw.githubusercontent.com/docker/composcompose > /etc/bash_completion.d/docker-compose
#重新登录
bash
Docker 一键安装#
Docker 镜像源
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://dockerhub.azk8s.cn",
"https://mirror.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
方式一:centos#
#使用官方脚本自动安装,默认安装最新版
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
systemctl enable docker
#设置存储库安装
sudo yum install -y yum-utils
#官方源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#阿里源(推荐)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
方式二:openEuler 22.03 (LTS-SP2) 非管理员#
#!/bin/bash
#############描述#############
:<<!
安装Docker CE,设置开机自启
修改docker存储路径
!
#############描述#############
echo "[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
" > /etc/yum.repos.d/docker-ce.repo
yum install container-selinux
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin --nogpgcheck --nobest
#启动docker并设置开机自启
systemctl start docker
systemctl enable docker
#查看版本
docker -v
docker compose version
echo "***********************
docker 安装成功
***********************"
mkdir -p /data/dockerData
#/data/docker为存储新路径
echo '
{
"data-root": "/data/dockerData"
}' > /etc/docker/daemon.json
systemctl restart docker
echo "docker的存储位置改为/data/dockerData"
方式三:openEuler 22.03 (LTS-SP2) 管理员#
#!/bin/bash
#############描述#############
:<<!
安装Docker CE,设置开机自启
修改docker存储路径
!
#############描述#############
#配置Docker CE的yum存储库
echo "[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://download.docker.com/linux/centos/7/\$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg
" > /etc/yum.repos.d/docker-ce.repo
yum install container-selinux
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin --nogpgcheck --nobest
#启动docker并设置开机自启
systemctl start docker
systemctl enable docker
#查看版本
docker -v
docker compose version
echo "***********************
docker 安装成功
***********************"
mkdir -p /data/dockerData
#/data/docker为存储新路径
echo '
{
"data-root": "/data/dockerData"
}' > /etc/docker/daemon.json
systemctl restart docker
echo "docker的存储位置改为/data/dockerData"
方式四:openEuler 20.03 (LTS) x86#
#安装openEuler镜像源
wget -O /etc/yum.repos.d/openEulerOS.repo https://repo.huaweicloud.com/repository/conf/openeuler_x86_64.repo
#安装依赖软件源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
#
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache
docker 容器出现无法重启,报错内容如下#
Error response from daemon: Cannot restart container 66dd752e0bd4: id already in use
解决方法:
#查看容器ID
docker ps -a
#查看容器进程
ps -aux | grep 容器ID
#杀掉进程
kill -9 容器进程
再次启动,成功!
方式五:openEuler 22.03#
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
docker 容器内出现无法使用安装镜像源的问题,如下图#
在 /etc/docker/daemon.json 文件中配置 DNS 即可解决
vi /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "114.114.114.114"]
}
拉取gcr.io
, k8s.gcr.io
, registry.k8s.io
, quay.io
, ghcr.io
官方镜像脚本#
方式一:
wget https://raw.githubusercontent.com/anjia0532/gcr.io_mirror/master/pull-k8s-image.sh chmod +x pull-k8s-image.sh
vi pull-images.sh
###########################################3
#!/bin/sh
k8s_img=$1
mirror_img=$(echo ${k8s_img}|
sed 's/quay\.io/anjia0532\/quay/g;s/ghcr\.io/anjia0532\/ghcr/g;s/registry\.k8s\.io/anjia0532\/google-containers/g;s/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/anjia0532\./anjia0532\//g' |
uniq)
if [ -x "$(command -v docker)" ]; then
sudo docker pull ${mirror_img}
sudo docker tag ${mirror_img} ${k8s_img}
exit 0
fi
if [ -x "$(command -v ctr)" ]; then
sudo ctr -n k8s.io image pull docker.io/${mirror_img}
sudo ctr -n k8s.io image tag docker.io/${mirror_img} ${k8s_img}
exit 0
fi
echo "command not found:docker or ctr"
###############################################
chmod +x pull-images.sh
#执行格式
./pull-images.sh 镜像名
方式二:
docker 的 iptables 策略#
#显示DOCKER-USER的链中的规则信息
iptables -nL DOCKER-USER
# 在主机10.10.3.117执行如下命令:(ens192 为本机网卡,以实际为准)
#禁止所有IP访问docker的80端口
iptables -I DOCKER-USER -i ens192 -p tcp --dport 80 -j DROP
#只允许10.10.3.122访问docker的80端口
iptables -I DOCKER-USER -i ens192 -s 10.10.3.122 -p tcp --dport 80 -j ACCEPT
#删除DOCKER-USER的链中的默认规则
iptables -D DOCKER-USER -j RETURN
#保存DOCKER-USER策略
service iptables save
#设置iptables开机自启,使策略永久生效
systemctl enable iptables.service
#或者
/etc/rc.d/init.d/iptables save