Docker 的一些使用过程记录
事先说明
- 因为在Docker中遇到了很多额外的问题,已经超出了OMV那篇文章的主线范围,所以再开一篇文章记录;
- 本文全部操作流程均在root账户下完成;
- 本文目前仅针对
x86_64
架构的设备,对于,请酌情参考;arm
或其他架构可能不适用 - Docker配置文件
/etc/docker/daemon.json
是一个标准的json文件,应用前请务必检查该文件是否有格式上的错误。该文件旨在修改或替代一些默认设置,因此在刚安装好乃至使用一段时间的 Docker 后该文件可能不会被立即创建,一般需要用户自行创建,创建时请务必注意换行标准为Unix(LF)
而非Windows(CR LF)
; - 本文章长期更新,如果这不是你第一次访问这篇文章,那么一次强制刷新(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日删除掉了,
写的不好也懒得再写了。
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 | sudo mkdir -p /etc/docker |
其中的https://xxx.mirror.aliyuncs.com
地址需要自行申请,申请地址,左侧下方“镜像加速服务”。
Docker 改变数据位置
在/etc/docker/daemon.json
文件中添加如下项,然后执行systemctl restart docker
重启Docker服务即可。强烈建议在全新安装后就更换数据位置,否则可能会出现权限问题和丢数据等问题。
1 | { |
修改 Docker 容器内的 DNS
在/etc/docker/daemon.json
文件中添加如下项,然后执行systemctl restart docker
重启Docker服务即可。
1 | { |
镜像加速源
由于未知监管原因,下方列表中的镜像大多已失效。
镜像加速器 | 镜像加速器地址 |
---|---|
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镜像的多种解决方案。
- 首先先确定你的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 agoLoaded
行后面的地址就是Service文件的位置。 - 编辑该文件:
1
nano /lib/systemd/system/docker.service
- 在
[Service]
块ExecStart
行前添加如下文本:
请在添加前将下方Proxy地址换成你自己的代理地址!1
2Environment="HTTP_PROXY=http://215.215.0.2:10809"
Environment="HTTPS_PROXY=http://215.215.0.2:10809" - 应用环境变量并重启docker:
1
2systemctl daemon-reload
systemctl restart docker - 查看环境变量在设置上是否生效:能够返回刚才设置的值证明设置有效。
1
2root@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
docker volume create portainer_data
- 拉取镜像并启动
1
2
3
4
5docker 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 - 访问
https://localhost:9443
(已设置SSL证书的前提下)或http://localhost:9000
(未设置SSL证书)即可进入后台。
Portainer-EE(企业版)
- 创建数据库
1
docker volume create portainer_data
- 拉取镜像并启动
1
2
3
4docker 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 - 访问
https://localhost:9443
(已设置SSL证书的前提下)或http://localhost:9000
(未设置SSL证书)即可进入后台。
设置SSL
打开 Portainer ,Setting
👉 SSL certificate
上传 SSL 证书即可。
重置密码
同时支持ce版本和ee版本,在ee版本上测试通过。
- 先停止portainer的容器:
1
docker stop portainer
- 拉取官方的密码重置工具:
1
docker run --rm -v portainer_data:/data portainer/helper-reset-password
- 如果一切正常,会返回:最后两行就是随机生成的用户名和密码
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名是否是官方默认的等等问题。 - 随后正常启动Portainer所在容器,然后用上面的用户名密码登录即可。
Docker 设置代理
要求 Docker 17.07 及以上版本。
在/etc/docker/daemon.json
文件中添加如下项,然后重启Docker服务即可。
1 | { |
Docker 常用命令
此处所提到的常用命令可能并非是完整的,仅为个人常用或可能用到的。
完整的命令提示请参考Docker官方网站。
登录到 Docker Hub:
docker login
拉取镜像
1 | # docker pull NAME[:TAG] |
对容器操作
1 | # 查看镜像列表 |
容器的文件操作
从外部复制到容器内:
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
安装。
- 打开Releases · docker/compose,找到“Latest”标签(不要选Pre-release版本,可能不稳定),然后下载自己架构的版本即可。
- 将下载的二进制文件放到
/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
- 加运行权限:
1
chmod +x /usr/local/bin/docker-compose
- 看一下能不能正常返回版本号:
1
docker-compose --version
启动
- 准备一个目录
- 在目录里放上
docker-compose.yml
- 启动!如果还需要后台启动再加上
1
docker-compose up -d
-d
。
查看日志
查看日志
1 | docker logs -f CONTAINER_ID |
限制日志查询范围
- 只查看最后200行:
1
docker logs --tail 200 CONTAINER_ID
- 只查看最后30分钟:
1
docker logs --since 30m CONTAINER_ID
- 查看某时间后的日志:
1
dockere logs -t --since "2022-06-13T18:11:00" CONTAINER_ID
- 查看某时间段的日志:
1
docker logs -t --since "2022-06-13T16:11:00" --until "2022-06-13T18:11:00" CONTAINER_ID
参考资料
排名不分先后