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。