dockerftp
A. 如何用Dockerfile创建镜像
制作镜像的方式主要有两种:
通过docker commit 制作镜像
通过docker build 制作镜像
这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。
docker commit
docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
B. 如何实现对于docker资源的监控
使用LoadRunner的系统资源监控器可以监控在场景或会话步骤运行期间计算机的系统资源使用率,并可以隔离服务器性能瓶颈。影响事务响应时间的主要因素是系统资源使用率。使用LoadRunner资源监控器,可以在场景或会话步骤运行期间监控计算机上的Windows、UNIX、服务器、SNMP、Antara Flame Thrower和SiteScope资源,并可以确定特定计算机上出现瓶颈的原因。
UNIX度量包括可由rstatd守护程序提供的下列度量:average load、collision rate、context switch rate、CPU utilization、incoming packets error rate、incoming packets rate、interrupt rate、outgoing packets error rate、outgoing packets rate、page-in rate、page-out rate、paging rate、swap-in rate、swap-out rate、system mode CPU utilization和user mode CPU utilization。
服务器资源监控器可以度量远程Windows和UNIX服务器上使用的CPU、磁盘空间、内存和应用程序资源。
SNMP监控器用于监控使用简单网络管理协议(SNMP)的计算机。SNMP监控与平台无关。
Antara Flame Thrower监控器可以度量下列性能计数器:Layer、TCP、HTTP、SSL/HTTPS、Sticky SLB、ftp、SMTP、POP3、DNS和Attacks。
SiteScope监控器可以度量服务器、网络和处理器性能计数器。如果要使用SiteScope监控器引擎,请确保服务器上已安装了SiteScope。可以将SiteScope安装到Controller计算机上,也可以将其安装到专用服务器上。有关SiteScope可以监控的性能计数器的详细信息,请参阅相关的SiteScope文档。
执行场景或会话步骤时,将自动启用资源监控器。但是,必须指定要监控的计算机并为每台计算机指定要监控的资源。也可以在场景或会话步骤运行期间添加或删除计算机和资源。
C. 如何在docker中安装vsftp
Docker是一个为开发人员和系统管理员开发、迁移和运行应用程序的平台。应用程序通过Docker打包成DockerImage后,可以实现统一的方式来下载、启动、扩展、删除和迁移,这样方便了应用程序的部署和运维。本文将介绍如何在不同操作系统平台上部署Docker环境的方法。信息Ubuntu:Docker刚推出的时候只支持Ubuntu,后来才一点点开始对其他平台的支持。所以在Ubuntu平台上部署Docker平台还是挺简单的。官方目前支持的版本有UbuntuTrusty14.04(LTS)、UbuntuPrecise12.04(LTS)、UbuntuSaucy13.10。Docker要求64位的系统且内核版本至少为3.10(如果是Ubuntu12.04LTS,则要求内核版本至少是3.13)。可以使用uname–r命令来确认当前系统的内核版本:$uname-r3.11.0-15-generic可以使用以下命令来升级内核:$sudoapt-getupdate$sudoapt-getinstalllinux-image-generic-lts-trusty$sudoreboot之后就可以安装Docker了:$wget-qO-/boot2docker/osx-installer/releases/latest获得。安装完成后,Boot2Docker位于Applications文件夹。注:Boot2Docker目前只是作为开发工具发布,请不要将其应用在生产环境中。创建Boot2Docker虚拟机:$boot2dockerinit$boot2dockerstart$boot2dockershellinit显示或设置Docker客户端环境变量$boot2dockershellinit$eval"$(boot2dockershellinit)"最后验证安装是否成功:$dockerrunhello-worldWindows:Windows与MACOS相同,也需要安装Boot2Docker工具。安装文件可以在/boot2docker/windows-installer/releases/latest获得。Windows版的Boot2Docker在启动时会自动确认环境变量,因此可以直接验证安装是否成功:$dockerrunhello-world。
D. 为什么要用Fig来实现Docker自动化
自动化从构建和测试开始
运维自动化的关键在于标准化。当你有一个成熟的团队,有标准化的流程,那么运维自动化就水到渠成了。而如果你什么都没有,那就需要先设定优先级。
我们的目标当然是将所有的流程标准化,而哪些要放在前面做?做起来比较简单的,和比较重要的。我认为构建和测试的流程是最基本的第一步。这对于交付产品的公司来说容易一些,对互联网公司来说更复杂一些,而测试比构建也要复杂一些,但这是基础。构建和测试的流程标准化做好了,就可以准备做自动化的工作了。
不过我见过的很多公司连Git都还没有,仍然在用最原始的FTP push来更新代码。我的观点是,如果你还没有用上Git这样的工具,那根本就不用考虑什么自动化的问题,因为条件完全不成熟。
所以,我们假设你的团队能够很好的使用Git,然后你建立了构建和测试的标准化流程,然后你就可以用工具来实现自动化。这可能是Jenkins这样的工具,不过Jenkins比较复杂,如果你只是一个很简单的网站,那么自己写一些脚本来实现自动化是更合适的。
E. docker容器里怎么安装ftp协议
1、创建容器
docker run --name centos_ssh_ftp --privileged=true -p 10.0.75.1:3222:22 -p 10.0.75.1:3223:3223 -p 10.0.75.1:3224-3299:3224-3299 -v e:/softs:/softs -it centos_ssh
说明:
--name centos_ssh_ftp #指定创建的容器的名称为centos_ssh_ftp
--privileged=true #授权,开启系统文件的权限,比如可以编辑iptables
-p <宿主ip:宿主端口:容器端口> #将宿主机的指定端口映射到容器的指定端口,就是子网对外开放的端口,可以多个,也可以设置区间段如,3224-3299,这里我们把3222映射到容器的22,则外网通过宿主机的3222端口进行ssh连接,其他端口是为vsftpd被动模式准备的
-v <宿主机目录:容器目录> #将宿主机目录映射到容器对应目录,可以直接操作目录和文件
-it <镜像名称> #以交互模式启动镜像,没什么可说的,启动完后会自动进入容器的root交互终端
2、安装ssh
先查看是否已经安装,看有没有sshd
chkconfig --list #该命令可以看到本机上的服务和启动状态,以后设置服务开机子自启动也会用到
yum -y
install openssh-server
安装完毕,查看chkconfig --list
sshd
手动启动sshd
service sshd start
设置开机自启动
chkconfig sshd on
查看是否设置成功,2-5都是on就是设置成功
# chkconfig --list sshdsshd
0:off
1:off
2:on
3:on
4:on
5:on
6:off
此时在宿主机外通过ssh远程连接工具远程到宿主机ip(10.0.75.1)的端口(3222)应该就可以了
3、安装vsftpd
查看是否已经安装了vsftpd
rpm -aq|grep vsftpd
没有则安装
yum -y install vsftpd
添加一个ftp用户用来登录
useradd ftp
给ftp用户添加密码
passwd ftp
设置ftp用户的根目录,先创建目录/data/ftp
usermod -d /data/ftp ftp
将该目录的拥有者改为ftp
chown ftp /data/ftp
修改配置文件
vi
/etc/vsftpd/vsftpd.conf
anonymous_enable=NO #不允许匿名登录
ftpd_banner=welcome to ftp service #设置连接服务器后的欢迎信息
max_clients=200 #指明服务器总的客户并发连接数为200
max_per_ip=3 #指明每个客户机的最大连接数为3
chroot_local_user=YES #只能查看自己的根目录
listen_port=3223 #设置FTP工作的端口号,默认的为21 这里改为3223, 如果还是21映射过来,能登录却取不到目录
pasv_enable=YES #开启被动模式
pasv_min_port=3224 #被动模式的最小端口
pasv_max_prot=3299 #被动模式使用的最大端口
pasv_addr_resolve=YES #启用被动模式的回传地址
pasv_address=10.0.75.1 #这里其实就是宿主机的ip
启动vsftp
service vsftp start
使用ftp连接工具,看是否正确连接,能否创建删除文件,是否可以访问根目录以外
设置开机自启动
chkconfig vsftpd on
查看是否设置成功,2-5都是on就是设置成功
# chkconfig --list
vsftpd
vsftpd
0:off
1:off
2:on
3:on
4:on
5:on
6:off
F. 如何用Dockerfile创建镜像
Dockerfile结构
dockerfile由4部分信息组成:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# Base image to use, this must be set as the first line
FROM ubuntu
# Maintainer: docker_user <docker_user at email.com> (@docker_user)
MAINTAINER docker_user [email protected]
# Commands to update the image
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
CMD /usr/sbin/nginx
其中#表注释,可以标注一些说明性的文字。
FROM关键字指定镜像的来源,默认为DockerHub,也可以写私有仓库的镜像,例如:localhost:5000/centos:6.7,如果本地已经存在指定的镜像名称,则会从本地缓存直接获取。MAINTAINER 指定镜像的作者,之后为镜像操作执行RUN、ADD等,最后是容器启动时发起的指令。
Dockerfile中的指令
FROM: 指定镜像名称,格式为FROM <image> 或FROM <image>:<tag>,例如FROM ubuntu 或 FROM ubuntu:12.04
MAINTAINER: 镜像作者 ,格式为 MAINTAINER <name>
RUN:格式为 RUN <command> 或 RUN ["executable", "param1", "param2"]。
前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN ["/bin/bash", "-c", "echo hello"]。
每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。
CMD:支持三种格式
1.CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
2.CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
3.CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
EXPOSE:格式为 EXPOSE <port> [<port>...]。
告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。
ENV:格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。这就对应程序语言中的变量定义,可在需要的时候引用。例如:
1
2
3
4
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
ADD:格式为 ADD <src> <dest>。
该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
COPY:格式为 COPY <src> <dest>。
复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>。当使用本地目录为源目录时,推荐使用 COPY。
COPY和ADD的不同就是:ADD多了自动解压和支持URL路径的功能。
ENTRYPOINT:
两种格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
CMD和ENTRYPOINT比较:两个命令都是只能使用一次,并且都是在执行docker run指令时运行,如果有多个,只执行最后一条。
两者的不同在于参数的传递方式,如果在Dockerfile中定义如下指令
1
CMD echo hello
或
1
ENTRYPOINT ["echo","hello"]
那么在运行命令docker run containerId echo hello时,指定了CMD的输入结果为world,可以看出Dockerfile中指定的命令被覆盖了,而指定了ENTRYPOINT时,输出结果为hello echo world,可以看出指定的命令被作为ENTRYPOINT指定指令的参数了。
VOLUME:格式为 VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。不过此属性在Dockerfile中指定并没有什么意义,因为没有办法指定本地主机的目录。如果需要指定挂载点可以在执行docker run命令时指定:
1
docker run -it -v /home/fengzheng/ftp/:/data 859666d51c6d /bin/bash
USER:格式为 USER daemon。指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。
WORKDIR:格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如
1
2
3
4
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终路径为 /a/b/c。
ONBUILD:格式为 ONBUILD [INSTRUCTION]。
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
例如,Dockerfile 使用如下的内容创建了镜像 image-A。
1
2
3
4
[...]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[...]
如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。
1
2
3
4
5
FROM image-A
#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。
基于CentOS6.7并源码安装nginx
首先准备了nginx-1.9.9.tar.gz安装包和CentOS6-Base-163.repo(163源),将这两个文件放到同一目录下,并在此目录下创建名称为Dockerfile的文件。之后在此文件中实现源替换、nginx编译安装、及一些依赖包的安装,Dockerfile内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# this is a test ubuntu 12.04 image dockerfile
# Author:fengzheng
# Base image,this must be set as the first line
#localhost:5000/centos:6.7是我的私有仓库的镜像,可替换为centos:6.7(DockerHub中的镜像)
FROM localhost:5000/centos:6.7
MAINTAINER fengzheng
# Commands to update the image
RUN mkdir /usr/nginx1.9.9
ADD nginx-1.9.9.tar.gz /usr/nginx1.9.9/
#RUN yum -y install tar
#RUN tar -zxvf /usr/nginx1.9.9/nginx-1.9.9.tar.gz
RUN cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bak
ADD CentOS6-Base-163.repo /etc/yum.repos.d/
RUN cd /etc/yum.repos.d/ && mv CentOS6-Base-163.repo CentOS-Base.repo \
&& yum clean all && yum makecache \
&& yum -y install gcc \
&& yum -y install yum install -y pcre-devel \
&& yum -y install zlib zlib-devel \
&& yum -y install openssl openssl--devel \
&& cd /usr/nginx1.9.9/nginx-1.9.9/ && ./configure && make && make install
#如果设置daemon off; nginx无法启动
#RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# Commands when creating a new container
# 启动nginx 需进入/usr/local/nginx/sbin 执行./configure
CMD /bin/bash
最后执行命令"docker build -t nginx-centos:6.7 ."
其中.表示在当前目录下搜索Dockerfile文件,-t参数指定镜像名称和tag。