Skip to main content

Docker备忘

常用资料

安装

如上文档所说,在CentOs上安装Docker有三种方式: 使用repository(从项目源码),使用package(下载安装包),使用脚本.

我们简单点,使用脚本:

# 登录为xkyii
ssh xkyii@i.xkyii.cn

# 进入工作目录(非必须)
mkdir workspace
cd workspace

# 下载并运行脚本
# 等待安装完成,其中有部分脚本是静默的,不显示进度,网速不理想的需要点耐心.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 看下版本
docker -v

# 看下信息
docker info

安装之后

# 新建docker用户组
sudo groupadd docker

# 当前用户加入docker用户组
sudo usermod -aG docker $USER

# 切换到docker组
newgrp docker

常用

# 删除正在运行的容器
docker rm -f $(docker ps -q)
# 删除正在运行的容器 (含隐藏)
docker rm -f $(docker ps -qa)

# 删除所有未在运行的容器
docker container prune -f

使用代理 docker pull

  • 可能的报错:
[djhc@localhost down]$ docker pull centos:centos8
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

使用前面说的临时代理的方式是行不通的, 因为镜像的拉取和管理都是 docker daemon 的职责.

  • 创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置
sudo mkdir -p /etc/systemd/system/docker.service.d
  • 新建配置文件
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.1.38:7890"
Environment="HTTPS_PROXY=http://192.168.1.38:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
  • 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 检查配置
sudo systemctl show --property=Environment docker
  • 报错
sudo docker run hello-world
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: EOF

通常代表代理配置错误

使用clash时, HTTPS_PROXY的代理要注意:

# 是这个
Environment="HTTPS_PROXY=http://192.168.1.38:7890"
# 不是这个, 注意https
Environment="HTTPS_PROXY=https://192.168.1.38:7890"

免sudo

# 把USER加入到docker组
sudo usermod -aG docker $USER
# 立即生效(无需重启)
newgrp docker

运行arm64镜像

# 安装 qemu-user-static
sudo apt update
sudo apt install -y qemu-user-static binfmt-support

# 注册 QEMU 解释器(一次性)
sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

# 检查是否注册成功 (显示enabled)
cat /proc/sys/fs/binfmt_misc/qemu-aarch64

# 运行
docker run -it --rm --platform linux/arm64 centos:centos8 uname -p

服务

停止服务

sudo systemctl stop docker.service
# 会守护docker.service
sudo systemctl stop docker.socket

# 禁用自动启动
sudo systemctl disable docker

错误

Cannot connect to the Docker daemon.

docker服务没有启动

# 启动以下
service docker start

# 再看一下
docker info

https client

需要把私服的服务器加到docker的配置里面(insecure-registries这段):

{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"insecure-registries": [ "http://192.168.1.53:8088"]
}

An attempt was made to access a socket in a way forbidden by its access permissions

Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:2399 -> 0.0.0.0:0: listen tcp 0.0.0.0:2399: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
# 查看端口范围
❯ netsh int ipv4 show dynamicport tcp

Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 1024
Number of Ports : 64511

# 修改范围
❯ netsh int ipv4 set dynamicport tcp start=19999 num=32000
Ok.

# 再查看
❯ netsh int ipv4 show dynamicport tcp

Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 19999
Number of Ports : 32000

重启

时区问题

# 使用 ubuntu:20.04 作为基础镜像
FROM ubuntu:20.04

# 设置环境变量,避免安装过程中交互式提示
ENV DEBIAN_FRONTEND=noninteractive
# 编码
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# 时区
ENV TZ=Asia/Shanghai

# 更新包列表并安装 build-essential 和 gdb
RUN apt-get update \
&& apt-get install -y openssl tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /workspace

# 默认命令
#CMD ["gdb"]

# 182.Arm64-编译
# docker buildx build --platform=linux/arm64/v8 --build-arg "HTTP_PROXY=http://192.168.1.38:7890/" --build-arg "HTTPS_PROXY=http://192.168.1.38:7890/" --build-arg "NO_PROXY=localhost,127.0.0.1" -t ubuntu-rt:20.04-arm64 -f ./Dockerfile .

打包镜像

打包

docker save mysql -o mysql.tar

加载

docker load -i mysql.tar