本篇内容仅做备忘用,如无特殊说明,都是指Linux下的docker软件
修改镜像标签
从镜像仓库拉取的镜像默认名称是[repository]:[tag]
这种形式,如果需要将镜像上传到其他仓库,或者方便日常使用,可以使用docker tag
命令修改镜像标签.以下示例从harbor.example.com拉取一个镜像并上传至10.0.0.101服务器上运行在1234端口的私有仓库.如果
1 | docker pull harbor.example.com/group/image:1.0 |
docker配置的一些坑
使用私有仓库前需要先配置私有仓库地址.如果仓库使用http或者自签https证书,需要将仓库设置为不安全的仓库
数据卷
如果dockerfile中使用VOLUME
关键字指定了数据卷,或者在启动容器时没用指定宿主机路径,则会自动生成一个数据卷
1 | 显示当前所有数据卷 |
容器内权限
默认情况下容器内的进程是以root身份运行的,当有外部应用需要与容器内应用以文件的方式交互时,可能会有问题.比如容器内程序产生的日志文件普通用户无法读取,或者在挂载了公共文件或目录时会遭到容器内程序的意外修改或未授权读取,从而影响宿主机的正常运行
日志问题
默认配置下docker会将容器内进程的标准输出和错误输出保存在json文件中,使用docker logs
命令时会展示日志内容.但是docker并不会做日志切分和日志大小限制,这样就会又概率因为日志文件撑爆服务器磁盘.如果需要修改日志的配置可以参考官方文档修改/etc/docker/daemon.json
这个配置文件
dind
dind即docker in docker
,官方提供了docker:dind
镜像,但是日常使用的时候也可以将docker可执行文件和docker.socket挂载到容器内实现
如果采用第二种方法,则需要注意
- 容器内需要有
libltdl7
依赖 - 容器内用户需要归属宿主机
docker
组或将宿主机docker.socket
文件的权限修改为大于666
tini
tini是一个轻量级的init进程,在容器启动时,tini会作为第一个进程启动,适用于在容器环境下管理进程
如果容器会多个子进程,则可以使用tini提升容器稳定性