Docker之在一个镜像中开启多服务,容器的安全机制,做压测,cgroup的权限限制

[root@foundation44 ~]# cd /tmp/docker/
[root@foundation44 docker]# systemctl start dokcer
[root@foundation44 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@foundation44 docker]# docker run -d --name vm1 nginx         #打入后台运行,不能查看内容,nginx后面默认跟的是cmd命令,此时无法进入vm1内部
68469b00bffe1e5dd6ba4ddaf8c9eb7a2c1be4e8d4949c0526debc1ffbc14429
[root@foundation44 docker]# docker container attach vm1      #查看容器内部,查看不到,而且一旦执行此命令,vm1就会自动退出

这里写图片描述
这里写图片描述
这里写图片描述

[root@foundation44 docker]# docker start vm1
		vm1
[root@foundation44 docker]# docker ps
		CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
		68469b00bffe        nginx               "nginx -g 'daemon ..."   7 minutes ago       Up 7 seconds        80/tcp              vm1
[root@foundation44 docker]# docker container exec -it vm1 bash   #这个命令可以进入容器,并且可以查看内容
		root@68469b00bffe:/# ls  
					bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
					boot  etc  lib	 media	opt  root  sbin  sys  usr
		root@68469b00bffe:/# exit

[root@foundation44 docker]# docker run -it --name vm2 nginx bash  #run=create+start,交互式运行,bash可以覆盖cmd,打开交互shell,进入到容器内部查看信息
		root@db59ec377fa8:/#     #不能关闭容器退出, ctrl + p q ,这个是没有关闭容器的退出,ctrl + d ,关闭容器并且退出
[root@foundation44 docker]#   

这里写图片描述

[root@foundation44 docker]# docker container attach vm2  #查看容器内容
	root@db59ec377fa8:/# ls
			bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
			boot  etc  lib	 media	opt  root  sbin  sys  usr
	root@db59ec377fa8:/# exit

1.开启多个服务在一个镜像中(以httpd+ssh为例)

 镜像分层是为了共享

Dockerfile 负责安装;    supervisor负责开启多个服务

因为cmd命令只能有一条所以想要同时开启多个服务定制到镜像中就需要调用一个管理进程来管理这些并行
进程的运行启动。

supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,
所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进
程被视为supervisor的子进程,若该子进程异常中断,则父进程可以准确的获取子进程异常中断的信息,
通过在配置文件中设置autostart=ture,可以实现对异常中断的子进程的自动重启。

[root@foundation44 tmp]# cd docker/
[root@foundation44 docker]# ls
		Dockerfile  dvd.repo  ssh  web
[root@foundation44 docker]# vim dvd.repo    #编辑yum源
  1 [dvd]
  2 name=dvd
  3 baseurl=http://172.25.44.250/rhel7.3
  4 gpgcheck=0
  5 
  6 [docker]
  7 name=docker
  8 baseurl=http://172.25.254.250/pub/docker
  9 gpgcheck=0

这里写图片描述

[root@foundation44 docker]# vim Dockerfile       #编辑安装脚本
  1 FROM rhel7
  2 EXPOSE 80
  3 COPY dvd.repo /etc/yum.repos.d/dvd.repo
  4 RUN rpmdb --rebuilddb && yum install -y httpd openssh-server openssh-clients supervis    or && yum clean all && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh    -keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ed25519     -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:redhat | chpasswd
  5 COPY supervisord.conf /etc/supervisord.conf
  6 CMD ["/usr/sbin/supervisord"]

这里写图片描述

[root@foundation44 docker]# docker cp  dvd.repo  vm1:/etc/yum.repos.d/   #把yum源复制到默认目录下


#重新打开一个shell,测试yum源
[root@foundation44 ~]# docker run -it --name vm1 rhel7 bash
bash-4.2# ls
bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
boot  etc  lib	 media	opt  root  sbin  sys  usr
bash-4.2# cd /etc/yum.repos.d/           
bash-4.2# ls
dvd.repo  rhel7.repo
bash-4.2# yum repolist 
Skipping unreadable repository '///etc/yum.repos.d/rhel7.repo'
docker                                            | 2.9 kB     00:00     
dvd                                               | 4.1 kB     00:00     
(1/3): docker/primary_db                            | 9.1 kB   00:00     
(2/3): dvd/primary_db                               | 3.9 MB   00:00     
(3/3): dvd/group_gz                                 | 136 kB   00:00     
repo id                           repo name                        status
docker                            docker                             11
dvd                               dvd                              4751
repolist: 4762
		
# 回到刚才的shell继续进行操作
[root@foundation44 docker]# vim supervisord.conf
1 [supervisord]      #开启多个服务
2 nodaemon=true
3 
4 [program:sshd]      #运行sshd
5 command=/usr/sbin/sshd -D
6 
7 [program:httpd]     #运行httpd
8 command=/usr/sbin/httpd

这里写图片描述

[root@foundation44 docker]# docker build -t rhel7:v2 /tmp/docker      #执行脚本,构建镜像v2
Successfully built 3fe178f06b6e

[root@foundation44 docker]# docker run -d --name vm4 -v /tmp/docker/web:/var/www/html rhel7:v2      #挂载
3354cf9ae475d36ac68e298f4b9f2d2c69ed3335535fae70ef2acf271b283a5e


[root@foundation44 docker]# docker ps  #查看挂载情况

这里写图片描述

[root@foundation44 docker]# docker inspect vm4
                "Gateway": "172.17.0.1",
                "IPAddress": "172.17.0.3",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:11:00:03"

这里写图片描述

[root@foundation44 docker]# curl 172.17.0.3        # httpd部署成功
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
[root@foundation44 docker]# ssh -l 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值