国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker 搭建靶場的利器

techstay / 2288人閱讀

摘要:后聯合廣東,致力于北伐,他所統領的七軍被譽為鋼軍,奠定了南京國民政府的基礎,龍潭一役,奠定了統一全國的基礎。這本書爆出很多歷史事實,比如北伐,國民黨內部紛爭,蔣介石的為人。

最近在看《李宗仁回憶錄》,斷斷續續看了一個星期,因白天沒時間,只能抽出晚上的時間,荒廢了好多學習的時間,自覺慚愧。本來就對歷史非常感興趣,而李宗仁的這個回憶錄,寫得真是太好啦,每天晚上回來,本想著打開書就看一會,然后就漸漸忘我了。

這本書最吸引我的地方是刷新了我對民國歷史的理解,之前,我了解到的李宗仁是一個領導臺兒莊戰役,與蔣介石對立的桂系領袖。仔細讀完這本書之后,發現李實為一代英雄,和預想中差別真是太大,而且從他做事的風格打心底佩服這個傳奇人物。少時家貧,棄文從戎,從排長做起,負過傷,一步一步(克死上級),連長、營長、團長、旅長,三十出頭,統一廣西,李的年輕史就是一部奮斗史。

后聯合廣東,致力于北伐,他所統領的七軍被譽為“鋼軍”,奠定了南京國民政府的基礎,龍潭一役,奠定了統一全國的基礎。后經武漢軍變,蔣桂戰爭,中原大戰而不被滅亡,抗日戰爭后又有很多輝煌事跡。這本書爆出很多歷史事實,比如北伐,國民黨內部紛爭,蔣介石的為人。

之前我一直有一個疑惑,像汪精衛這種大漢奸,為什么后人罵之甚少,才知道原來汪在國民黨內部地位如此之高,而且投日后也未作出對國家,對民族不利的事情。

雖說歷史不可全信,而且看這本書就像看小說一樣過癮,李宗仁的經歷就像兒時自己的夢想一樣,只不過一個是真實存在,一個從來未踏出第一步,看完之后,只能用佩服得五體投地來形容。

最近公司里開始全面使用 Docker 來搭建靶機環境,以前搭環境都是用 Ubuntu 虛擬機,安裝必備的軟件 mysql、php 和 apache(以 php 服務器為例),然后整個虛擬機生成一個好幾 G 的 .vof 虛擬機文件當作服務器,每次需要搭一個新環境,都必先拷貝該文件,然后像 /var/www/html 中復制 php web 文件。可以說整個過程,費時費力,還很占用空間。

很早之前,公司里有部分人就開始研究 docker,最近才打算使用 docker 來搭建環境。而我最近在寫 jQuery 源碼方面的項目,想來也沒啥可寫,就抽時間把這幾周使用 docker 的經驗記錄一下吧,歡迎打臉。

為什么要用 docker

docker 在 github 上開源,它是一個引擎,支持創建一個輕量級、可移植的容器,用過之后感覺和虛擬機非常像呀,而且還比虛擬機輕量多了。docker 最經典的一句話:build once, configure once and run anywhere。可見 docker 的強大。

比如現在的阿里云容器,用戶可以在上面購買 web 服務,然后 docker 一鍵部署生成應用,可見 docker 已經有取代虛擬云主機的趨勢,畢竟對于大部分服務商來說,他們只希望 web 服務能平穩安全的運行,并不在意它運行在容器里還是虛擬機里。

我的理解,docker 是面向運維人員的,而開發人員,該怎么開發,還是怎么開發,只是運行的平臺不同而已。

那么,docker 的優勢在哪里?

支持多平臺,目前已支持各大操作系統:window、linux 和 mac,docker products overview。

就我使用的來看,比 VM 小,比 VM 快,docker 在構建應用的過程中,速度要比虛擬機快很多,而且每個應用依托 image,實際上是在 container 中運行,鏡像和容器分開,在構建多個應用的時候,又非常多方便。

docker 雖然是容器,但卻是通過命令行來管理,而且還借鑒 git 操作,比如一些常見的 commit、push、pull 命令。

CPU/內存的低消耗這方面我無法驗證,但是 build once,run anywhere,這點非常贊同。比如公司里現在需要搭建 php 的環境,只需要 build 一個 php+mysql+apache 的環境,便可構建任意一個 web 應用。

docker 的使用

關于 docker 的安裝,可以參考 docker docs,詳細介紹了支持操作系統的安裝。

使用 docker 的第一步,就是拉取 image。docker image 是 docker 運行時的模版,比如我想要運行一個 mysql 服務,就必須有一個安裝了 mysql 的基本的 ubuntu 系統。這個就是運行時基本的 image,而最基本的 image 要屬一個純凈的 ubuntu 系統docker hub ubuntu。

第一步,先拉取一個簡單的 docker 鏡像。docker 提供一個類似于 github 一樣鏡像官網,https://hub.docker.com/,用戶可以 pull 到一些基本和流行的鏡像。當然在 docker hub 中最火的還是 ubuntu 鏡像,關注度最高。用戶把基本 ubuntu 鏡像加以改造,衍生出各類鏡像文件。

docker pull ubuntu:14.04

上面這個是最基本的 docker pull 命令,有 ubuntu:14.04 表示官方 ubuntu 鏡像 14.04 版本,也可以 pull 最新版的比如:docker pull ubuntu:latest 或者 pull 16.04:docker pull ubuntu:16.04

這個是從 docker hub 官網獲取鏡像,速度非常慢,好在國內有鏡像加速器,具體配置可參考這篇文章,或者注冊 www.daocloud.io 通過這個頁面獲取鏡像加速。通過加速之后,你會發現,速度非常快。

這個時候通過 docker images 可以查看當前存在的鏡像。

運行的話,使用下面的命令:

docker run -i -t ubuntu:14.04 /bin/bash 
// -i 表示輸出在標準控制臺
// -t 表示分配一個 tty 終端設備

這個命令執行后,在當前的命令行下面,會進入 ubuntu:14.04 的命令行,就像 ssh 服務器那樣,exit 命令退出。ubuntu:14.04 是 image 名稱和版本,最后是要執行的命令,這里是進入命令行,所以 執行 /bin/bash 文件。因為 build 是自動的,所以在大多數情況下(后面介紹 Dockerfile 會用到)事先寫好一個 bash 文件,啟動運行這個 bash 文件即可,比如:

docker run -d ubuntu:14.04 /bin/bash /run.sh
// -d 表示后臺運行容器

docker ps 用于查看當前正在運行的 container,docker ps -a 顯示所有 container,docker stop/start/restart {container_id | container name} 可以停止/開啟/重啟 正在運行或已經停止的容器。總之記住一句話,images 是模版,而運行靠容器

有時候為了方便管理,還需要對 container 進行命名:

docker run -d ubuntu:14.04 /bin/bash /run.sh --name=test

如果運行時忘記了或者需要修改名字,可以通過下面的命令,因為即使忘記命名,docker container 會使用一個系統隨機分配的名字:

docker rename {old_name} {new_name}

我們可以將基本的 ubuntu 鏡像升級成一個 mysql 的服務器,這是通過 commit 命令來完成:

host$ docker run -i -t ubuntu:14.04 /bin/bash 
// 下面進入 ubuntu:14.04 shell
// 命令進行簡化
root$ sudo apt-get update
root$ sudo apt-get install mysql-server
root$ exit
host$ docker commit -m "install mysql_server" {container_id} ubuntu:mysql
host$ docker images

會發現多一個叫做 ubuntu:mysql 的鏡像文件,便是 commit 后的鏡像文件,此時可以通過 push 命令將它們 push 到服務器供別人使用。

docker 還通過端口映射,文件夾映射等,比如一個 mysql 服務器,它啟動了之后,實際上會在容器中開啟 3306 端口,可以通過 -p 將它們映射到本地的 3306 端口:

docker run -d -p 3306:3306 -p 80:80 -v /web/:/var/www/html ubuntu:apache_server /bin/bash /run.sh

-v 會將主機目錄下 /web 映射到 /var/www/html 中。

這是一個容器,如果我們需要開啟第二個 web 應用,只需要新建另一個容器即可,所謂的 build once,run everywhere。

有時候對于數據庫服務和 apache 服務,需要在兩個不同的容器中運行,需要將它們建立 link 鏈接。

Dockerfile

前面說了,一鍵部署,一鍵運行,而我們只看到的是一鍵運行,而一鍵部署該如何設置?

通過 docker 提供的 docker build 命令。

新建 image 有兩種方法,前面已經介紹過一種 commit 的方法,但是 commit 是針對 container 來說的,構建的話需要一個已經完好的 container,過程略有繁瑣。

docker build 需要一個 Dockerfile 的文件,如果該文件在當前目錄下:

docker build -t ubuntu:mysql .

-t 參數表示給 image 添加一個 tag 標簽,Dockerfile 也可以指定位置,把 . 換成一個指定的 Dockerfile 即可。

而一個 Dockerfile 大致如下:

# 表示來自哪個 image
FROM ubuntu:14:04
# 作者
MAINTAINER author 
# ENV 指定 docker 容器的環境變量
ENV DEBIAN_FRONTEND noninteractive
# RUN 表示執行 bash 命令
# install package
RUN apt-get update && 
  apt-get -y install supervisor git apache2 libapache2-mod-php5 mysql-server php5-mysql pwgen php-apc php5-mcrypt && 
  echo "ServerName localhost" >> /etc/apache2/apache2.conf
# ADD 表示將本地文件添加到容器目錄中
ADD start-apache2.sh /start-apache2.sh
ADD start-mysqld.sh /start-mysqld.sh
ADD run.sh /run.sh
RUN chmod 755 /*.sh
ADD my.cnf /etc/mysql/conf.d/my.cnf
ADD supervisord-apache2.conf /etc/supervisor/conf.d/supervisord-apache2.conf
ADD supervisord-mysqld.conf /etc/supervisor/conf.d/supervisord-mysqld.conf

# 刪除數據庫文件
RUN rm -rf /var/lib/mysql/*

# 添加數據庫配置文件
ADD create_mysql_admin_user.sh /create_mysql_admin_user.sh
RUN chmod 755 /*.sh

# clone app 文件
RUN git clone https://github.com/fermayo/hello-world-lamp.git /var/www/html

#Environment variables to configure php
ENV PHP_UPLOAD_MAX_FILESIZE 10M
ENV PHP_POST_MAX_SIZE 10M

# 添加掛載,用于共享,和 -v 命令一樣 
VOLUME  ["/etc/mysql", "/var/lib/mysql" ]

# 暴露端口
EXPOSE 80 3306
# 添加默認執行的 bash(cmd)
CMD ["/run.sh"]

這里面有一個坑啊。因為這個 14.04 的鏡像來自于官方,所以 apt-get 的源是美國的主機,非常慢,建議先對 ubuntu 的更新源進行修改,然后再執行 build 命令,切記。

上面這個 Dockerfile 文件來自 github 上一個 php+mysql+apache 環境搭建項目,lamp。

更多 Dockerfile 的命令請參考如何使用Dockerfile構建鏡像或Docker入門教程(三)Dockerfile。

總結

其實 docker 的使用非常簡單,又不用看它的的源碼,只是一些簡單的命令,而且網上的教程滿天飛,想在短時間內學會 docker 是完全沒有問題的,但是關鍵的問題是:你為什么要學 docker?docker 能給你帶來哪些便利?

因我公司需要掌握 docker,我也就花了一些時間,算入門 docker 了吧,基本的命令都有所了解,而且確實也帶來了很大的便利。但入門始終是入門,有一些問題會在使用的過程中碰到,比如

container 容器 root 權限的問題;

docker 像虛擬機那樣安全嗎;

docker 的性能與 VM 性能和直接在本地運行應用的性能,都有多大差別?

共勉!

參考

docker 中文
Docker入門教程
Docker容器入門
如何使用Dockerfile構建鏡像

歡迎來我的博客討論。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27993.html

相關文章

  • Docker 搭建靶場利器

    摘要:后聯合廣東,致力于北伐,他所統領的七軍被譽為鋼軍,奠定了南京國民政府的基礎,龍潭一役,奠定了統一全國的基礎。這本書爆出很多歷史事實,比如北伐,國民黨內部紛爭,蔣介石的為人。 最近在看《李宗仁回憶錄》,斷斷續續看了一個星期,因白天沒時間,只能抽出晚上的時間,荒廢了好多學習的時間,自覺慚愧。本來就對歷史非常感興趣,而李宗仁的這個回憶錄,寫得真是太好啦,每天晚上回來,本想著打開書就看一會,然...

    Jeff 評論0 收藏0

發表評論

0條評論

techstay

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<