dos啥也不会

以需求为导向学习

docker的基本使用

本篇内容仅做备忘用,如无特殊说明,都是指Linux下的docker软件

修改镜像标签

从镜像仓库拉取的镜像默认名称是[repository]:[tag]这种形式,如果需要将镜像上传到其他仓库,或者方便日常使用,可以使用docker tag命令修改镜像标签.以下示例从harbor.example.com拉取一个镜像并上传至10.0.0.101服务器上运行在1234端口的私有仓库.如果

1
2
3
docker pull harbor.example.com/group/image:1.0
docker tag harbor.example.com/group/image[:1.0] 10.0.0.101:1234/newgroup/newimage[:1.1]
docker push 10.0.0.101:1234/newgroup/newimage:1.1

docker配置的一些坑

使用私有仓库前需要先配置私有仓库地址.如果仓库使用http或者自签https证书,需要将仓库设置为不安全的仓库

数据卷

如果dockerfile中使用VOLUME关键字指定了数据卷,或者在启动容器时没用指定宿主机路径,则会自动生成一个数据卷

1
2
3
4
# 显示当前所有数据卷
docker volume ls
# 清理未使用的数据卷
docker volume prune

容器内权限

默认情况下容器内的进程是以root身份运行的,当有外部应用需要与容器内应用以文件的方式交互时,可能会有问题.比如容器内程序产生的日志文件普通用户无法读取,或者在挂载了公共文件或目录时会遭到容器内程序的意外修改或未授权读取,从而影响宿主机的正常运行

日志问题

默认配置下docker会将容器内进程的标准输出和错误输出保存在json文件中,使用docker logs命令时会展示日志内容.但是docker并不会做日志切分和日志大小限制,这样就会又概率因为日志文件撑爆服务器磁盘.如果需要修改日志的配置可以参考官方文档修改/etc/docker/daemon.json这个配置文件

dind

dind即docker in docker,官方提供了docker:dind镜像,但是日常使用的时候也可以将docker可执行文件和docker.socket挂载到容器内实现
如果采用第二种方法,则需要注意

  1. 容器内需要有libltdl7依赖
  2. 容器内用户需要归属宿主机docker组或将宿主机docker.socket文件的权限修改为大于666