部署centos7容器应用
镜像下载:
[root@yixuan ~]# docker pull daocloud.io/library/centos:7
systemd 整合:
因为 systemd 要求 CAPSYSADMIN 权限,从而得到了读取到宿主机 cgroup 的能力,CentOS7 中已经用 fakesystemd 代替了 systemd 。 但是我们使用systemd,可用参考下面的 Dockerfile:
[root@yixuan ~]# mkdir test
[root@yixuan ~]# cd test/
[root@yixuan test]# vim Dockerfile
FROM daocloud.io/library/centos:7
MAINTAINER "soso" soso@qq.com
ENV container docker
RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs
RUN yum -y update; yum clean all; \
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
这个Dockerfile删除fakesystemd 并安装了 systemd。然后再构建基础镜像:
[root@yixuan test]# docker build -t local/c7-systemd .
执行没有问题这就生成一个包含 systemd 的应用容器示例
[root@yixuan test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local/c7-systemd latest a153dcaa642e 6 minutes ago 391MB
为了使用像上面那样包含 systemd 的容器,需要创建一个类似下面的Dockerfile:
[root@yixuan test]# mkdir http
[root@yixuan test]# cd http/
[root@yixuan http]# vim Dockerfile
FROM local/c7-systemd
RUN yum -y install httpd; yum clean all; systemctl enable httpd.service
EXPOSE 80
CMD ["/usr/sbin/init"]
构建镜像:
[root@yixuan http]# docker build -t local/c7-systemd-httpd .
运行包含 systemd 的应用容器:
为了运行一个包含 systemd 的容器,需要使用--privileged选项, 并且挂载主机的 cgroups 文件夹。 下面是运行包含 systemd 的 httpd 容器的示例命令:
[root@yixuan http]# docker run --privileged -tid -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 local/c7-systemd-httpd
--privileged:授权提权。让容器内的root用户拥有正真root权限(有些权限是没有的)
注意:如果不加会运行在前台(没有用-d),可以用ctrl+p+q放到后台去
测试可用:
[root@yixuan http]# yum install -y elinks
[root@yixuan http]# elinks --dump http://192.168.246.141 #apache的默认页面
Testing 123..
This page is used to test the proper operation of the [1]Apache HTTP
server after it has been installed. If you can read this page it means
that this site is working properly. This server is powered by [2]CentOS.
再来个安装openssh-server的例子:
[root@yixuan http]# cd ..
[root@yixuan test]# mkdir ssh
[root@yixuan test]# cd ssh/
[root@yixuan ssh]# vim Dockerfile
FROM local/c7-systemd
RUN yum -y install openssh-server; yum clean all; systemctl enable sshd.service
RUN echo 1 | passwd --stdin root
EXPOSE 22
CMD ["/usr/sbin/init"]
[root@yixuan ssh]# docker build --rm -t local/c7-systemd-sshd .
[root@yixuan ssh]# docker run --privileged -tid -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 2222:22 local/c7-systemd-sshd
[root@yixuan ssh]# ssh 192.168.246.141 -p 2222
[root@ce1af52a6f6c ~]#
docker数据存储位置
查看存储路径
[root@yixuan ~]# docker info | grep Root
Docker Root Dir: /var/lib/docker
修改默认存储位置:
在dockerd的启动命令后面追加--data-root参数指定新的位置
[root@yixuan ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/data
[root@yixuan ~]# systemctl daemon-reload
[root@yixuan ~]# systemctl restart docker
查看是否生效:
[root@yixuan ~]# docker info | grep Root
Docker Root Dir: /data
[root@yixuan ~]# cd /data/
[root@yixuan data]# ls
builder buildkit containers image network overlay2 plugins runtimes swarm tmp trust volume