一、简介
本人最近对k8s+docker容器云、微服务进行一些调研,尝试着在docker中安装nginx。先来安利docker一波,真是神器,但是对于docker的有点本人将在docker的相关文章中介绍。
- 需求:做自动化运维的同学可能需要测试自己写完的shell脚本,docker是一个比虚拟机快照更方便的选择。只需要启动一个docker容器,将写好的脚本以挂载文件的方式,在docker容器中运行即可(copy进去再执行也可以)。
- 环境: 虚拟机+docker
- 优点:当shell脚本有问题的时候,直接kill掉docker容器,修改完shell后重启一个容器再运行即可。
- 目的:为了练习nginx的安装配置。由于docker使用Linux内核namespace\cgroup等隔离技术,近似等同于虚拟机(有些隔离做的不彻底,不能完全等同于),在docker中练习安装nginx比跟在虚拟机上安装相差无异,但开销更少。如果仅仅是为了在docker中使用nginx,只需要直接拉取nginx镜像再开启容器即可。
二、安裝过程
在docker中安装nginx的步骤跟上一篇文章Centos7安装nginx(一)大致相同。需要注意的是在docker中使用systemctl必须以特殊的方式启动容器,否则会报错Docker: Failed to get D-Bus connection: Operation not permitted
安装过程主要分为二部分:
- 启动容器
- 安装nginx
安装部分参考文章Centos7安装nginx(一),本文重点讲解如何启动docker容器,避免在配置systemctl来管理nginx时出现报错信息。
1. 启动容器
- 容器的正确启动姿势
docker pull centos:7
(拉取镜像)
docker images
(查看镜像具体信息)
步骤3中的镜像版本要与拉去下来的版本信息对应docker run -d --name nginx --privileged=true docker.io/centos:7 /usr/sbin/init
(以后台运行的方式启动容器)
docker exec -it nginx /bin/bash
(进入容器)
- docker容器中使用systemctl报错总结
-
Docker: Failed to get D-Bus connection: Operation not permitted
- 原因
- 这个的原因是因为dbus-daemon没能启动。启动容器时,带上参数
--privileged=true
、将你的CMD或者entrypoint设置为/usr/sbin/init
即可(两者缺一不可)。会自动将dbus等服务启动起来。
- 这个的原因是因为dbus-daemon没能启动。启动容器时,带上参数
- 解决办法:
- 在启动容器时添加参数
- docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init
- docker exec -it centos7 /bin/bash
- 在启动容器时添加参数
- 原因
2. 安装nginx
三、总结
本文主要记录了docker中使用systemctl的报错问题,为下一篇文章Centos7安装nginx(三)之shell脚本自动化安装nginx,通过shell自动化安装nginx做准备。文章可能在编辑过程中,由于个人疏忽、不同版本markdown解析器不兼容等原因导致字符书写错误,导致安装失败。本文属于原创,若有引用请注明出处。若有疑问或错误,欢迎各位指出,可以评论或者跟本人联系。