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日删除掉了,
写的不好也懒得再写了。
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 Hub 镜像缓存的访问会被 302 重定向至其他国内 Docker Hub 镜像源。从 2020 年 8 月 16 日起,从科大校外对 Google Container Registry 的镜像缓存的访问会被 302 重定向至阿里云提供的公开镜像服务(包含了部分 gcr.io 上存在的容器镜像);从科大校外对 Quay Container Registry 的镜像缓存的访问会被 302 重定向至源站。
镜像加速器 | 镜像加速器地址 |
---|---|
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 |
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
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
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
参考资料
排名不分先后