Lxn-Chan!

(~ ̄▽ ̄)→))* ̄▽ ̄*)o

Docker 的一些使用过程记录

事先说明

  1. 因为在Docker中遇到了很多额外的问题,已经超出了OMV那篇文章的主线范围,所以再开一篇文章记录;
  2. 本文全部操作流程均在root账户下完成
  3. 本文目前仅针对x86_64架构的设备,对于arm或其他架构可能不适用,请酌情参考;
  4. Docker配置文件/etc/docker/daemon.json是一个标准的json文件,应用前请务必检查该文件是否有格式上的错误。该文件旨在修改或替代一些默认设置,因此在刚安装好乃至使用一段时间的 Docker 后该文件可能不会被立即创建,一般需要用户自行创建,创建时请务必注意换行标准为Unix(LF)而非Windows(CR LF)
  5. 本文章长期更新,如果这不是你第一次访问这篇文章,那么一次强制刷新(Ctrl+F5)或清除缓存是非常有必要的。

Docker 安装

清理残余组件

执行后可能会报错(软件包不存在等)但不必理会。

1
apt purge docker docker-engine docker.io

安装必备依赖

1
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Docker安装

这一部分在2023年5月6日删除掉了,写的不好也懒得再写了

请参看Docker CE 软件仓库镜像使用帮助

openEuler安装Docker

参见Docker CE 软件仓库镜像使用帮助,使用RHEL系统的安装方式,按照其中说明进行配置仓库后,进行如下更改:

/etc/yum.repos.d/docker-ce.repo文件中所有的$releasever替换为8.9(openEuler 20.03 LTS-SP3)然后正常安装即可。

或者也可以使用上述帮助中的内容在每次安装时附带如下参数:--releasever=8.9

1
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y --releasever=8.9

DockerHub 换源

2022年10月24日更新:阿里云加速源的镜像版本都比较老,不建议在采用;同时本人在国内测试Docker Hub速度也还可以,因此现在不建议再换源。

编辑/etc/docker/daemon.json文件:

1
2
3
4
5
6
7
8
9
10
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["xxx"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

其中的https://xxx.mirror.aliyuncs.com地址需要自行申请,申请地址,左侧下方“镜像加速服务”。

Docker 改变数据位置

/etc/docker/daemon.json文件中添加如下项,然后执行systemctl restart docker重启Docker服务即可。强烈建议在全新安装后就更换数据位置,否则可能会出现权限问题和丢数据等问题。

1
2
3
4
5
{
...
"data-root": "/path/to/your/dataroot"
...
}

修改 Docker 容器内的 DNS

/etc/docker/daemon.json文件中添加如下项,然后执行systemctl restart docker重启Docker服务即可。

1
2
3
4
5
6
7
8
{
...
"dns" : [
"1.1.1.1",
"8.8.8.8"
]
...
}

镜像加速源

由于未知监管原因,下方列表中的镜像大多已失效。

镜像加速器镜像加速器地址
Docker 中国官方镜像https://registry.docker-cn.com
DaoCloud 镜像站http://f1361db2.m.daocloud.io
Azure 中国镜像https://dockerhub.azk8s.cn
阿里云https://<code_yourself>.mirror.aliyuncs.com
七牛云https://reg-mirror.qiniu.com
网易云https://hub-mirror.c.163.com
腾讯云https://mirror.ccs.tencentyun.com

Docker 启用代理

方法改写自国内无法访问下载Docker镜像的多种解决方案

  1. 首先先确定你的Docker的Systemd Service文件位置,执行systemctl status docker
    1
    2
    3
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Active: active (running) since Fri 2024-06-14 15:28:32 UTC; 1 day 13h ago
    中间Loaded行后面的地址就是Service文件的位置。
  2. 编辑该文件:
    1
    nano /lib/systemd/system/docker.service
  3. [Service]ExecStart行前添加如下文本:
    请在添加前将下方Proxy地址换成你自己的代理地址!
    1
    2
    Environment="HTTP_PROXY=http://215.215.0.2:10809"
    Environment="HTTPS_PROXY=http://215.215.0.2:10809"
  4. 应用环境变量并重启docker:
    1
    2
    systemctl daemon-reload
    systemctl restart docker
  5. 查看环境变量在设置上是否生效:
    1
    2
    root@notest:~# systemctl show --property=Environment docker
    Environment=HTTP_PROXY=http://215.215.0.2:10809 HTTPS_PROXY=http://215.215.0.2:10809
    能够返回刚才设置的值证明设置有效。

Portainer

Portainer 是一个基于Web图形化的Docker管理工具,分为CE社区版(Community Edition)和BE商业版(Business Edition)。Portainer 无论是社区版还是商业版都没有官方中文版本,但有旧版本的第三方汉化(不建议使用)。

Portainer-CE(社区版)

  1. 创建数据库
    1
    docker volume create portainer_data
  2. 拉取镜像并启动
    1
    2
    3
    4
    5
    docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:latest
  3. 访问https://localhost:9443(已设置SSL证书的前提下)或http://localhost:9000(未设置SSL证书)即可进入后台。

Portainer-EE(企业版)

  1. 创建数据库
    1
    docker volume create portainer_data
  2. 拉取镜像并启动
    1
    2
    3
    4
    docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data portainer/portainer-ee:latest
  3. 访问https://localhost:9443(已设置SSL证书的前提下)或http://localhost:9000(未设置SSL证书)即可进入后台。

设置SSL

打开 Portainer ,Setting 👉 SSL certificate 上传 SSL 证书即可。

重置密码

同时支持ce版本和ee版本,在ee版本上测试通过。

  1. 先停止portainer的容器:
    1
    docker stop portainer
  2. 拉取官方的密码重置工具:
    1
    docker run --rm -v portainer_data:/data portainer/helper-reset-password
  3. 如果一切正常,会返回:
    1
    2
    3
    {"level":"info","filename":"portainer.db","time":"2024-03-08T14:27:03Z","message":"loading PortainerDB"}
    2024/03/08 14:27:03 Password successfully updated for user: admin
    2024/03/08 14:27:03 Use the following password to login: z2w(~69hSR5F7Bjq=yU.r48x\LC0`K+{
    最后两行就是随机生成的用户名和密码
    如果返回的是Unable to open the database, err: timeout则检查一下Portainer所在容器是否停止,创建Docker时Volume名是否是官方默认的等等问题。
  4. 随后正常启动Portainer所在容器,然后用上面的用户名密码登录即可。

Docker 设置代理

要求 Docker 17.07 及以上版本。

/etc/docker/daemon.json文件中添加如下项,然后重启Docker服务即可。

1
2
3
4
5
6
7
8
9
10
11
{
"proxies":
{
"default":
{
"httpProxy": "http://192.168.1.12:3128",
"httpsProxy": "http://192.168.1.12:3128",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
}
}
}

Docker 常用命令

此处所提到的常用命令可能并非是完整的,仅为个人常用或可能用到的。
完整的命令提示请参考Docker官方网站。

登录到 Docker Hub:

docker login

拉取镜像

1
2
3
4
5
6
7
8
9
# docker pull NAME[:TAG]
docker pull redis
docker pull nginx:latest
docker pull alpine:edge
docker pull ubuntu:20.04
# 拉取包含所有标签的镜像
docker pull --all-tags alpine
# 从未签名且可能不信任的位置拉取镜像(--disable-content-trust 参数)
docker pull --disable-content-trust localhost:5000/alpine

对容器操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看镜像列表
docker images
# 查看容器列表
docker ps
# 删除容器
docker rm NAME|CONTAINER-ID
docker rm 25fcd8c616d3
# docker | 删除镜像 | [-强制删除] | 容器名或ID
docker rmi [-f] NAME|CONTAINER-ID
docker rmi 54c9d81cbb44
docker rmi -f ubuntu:20.04
# 运行进入容器(退出容器exit)
docker run -it NAME|CONTAINER-ID [/bin/bash]
docker run -it ubuntu:20.04

容器的文件操作

从外部复制到容器内:

1
docker cp source container:target_path

从容器内部复制到容器外:
1
docker cp container:source_path output_path

容器镜像导入导出

导出镜像:docker save [options] images [images...]

1
docker save -o ubuntu-bak.tar ubuntu:20.04

导入镜像:docker load [options]
1
docker load -i ubuntu-bak.tar

修改容器restart策略

1
docker container update --restart=always [Container ID]

--restart参数可选值为:

  • no: 不自动重新启动容器(默认)
  • no-failure: 容器发生error而退出(容器退出状态不为0)重启容器
  • unless-stopped: 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
  • always: 如果容器停止,总是重新启动容器。如果手动kill容器,则无法自动重启。

Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YAML 文件配置中创建并启动所有服务。

安装

这里只讲在Linux操作系统下使用二进制的安装方式,也可以用pip安装。

  1. 打开Releases · docker/compose,找到“Latest”标签(不要选Pre-release版本,可能不稳定),然后下载自己架构的版本即可。
  2. 将下载的二进制文件放到/usr/local/bin/目录下。
    1
    wget https://gp.arlxn.top/https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose
  3. 加运行权限:
    1
    chmod +x /usr/local/bin/docker-compose
  4. 看一下能不能正常返回版本号:
    1
    docker-compose --version

启动

  1. 准备一个目录
  2. 在目录里放上docker-compose.yml
  3. 启动!
    1
    docker-compose up -d
    如果还需要后台启动再加上-d

查看日志

查看日志

1
docker logs -f CONTAINER_ID

限制日志查询范围

  1. 只查看最后200行:
    1
    docker logs --tail 200 CONTAINER_ID
  2. 只查看最后30分钟:
    1
    docker logs --since 30m CONTAINER_ID
  3. 查看某时间后的日志:
    1
    dockere logs -t --since "2022-06-13T18:11:00" CONTAINER_ID
  4. 查看某时间段的日志:
    1
    docker logs -t --since "2022-06-13T16:11:00" --until "2022-06-13T18:11:00" CONTAINER_ID

参考资料

排名不分先后

 简单说两句

很抱歉,【泠泫凝的异次元空间】2024年12月12日停机维护公告:感谢您对本站的支持,受限于政策要求,本站评论功能将暂时关闭,恢复时间另行确定。更新维护期间评论功能无法使用,给各位带来的不便,我们深表歉意。,该功能暂时不能使用,请稍后再试。如有问题请“联系站长”。



联系站长 | 服务状态 | 友情链接

备案号:辽ICP备19013963号

萌ICP备 20219421 号

津公网安备12011602300394号

中国互联网违法和不良信息举报中心

架构版本号:8.1.6 | 本站已全面支持IPv6

正在载入运行数据(1/2)请稍后...
正在载入运行数据(2/2)请稍后...

Copyright 2024 LingXuanNing, All rights reserved.