雖然本文标題是針對ubuntu的,但對于centos也是可以變通的,無非是幾個指令不完全相同,有經驗的人可以自行修改,部分不容易找的包或者指令已經在文檔中作出了注釋,可以作為參考。
目錄導航:
安裝docker引擎服務
安裝docker-enter工具,便于使用docker
安裝docker-registry服務
支援https的docker-registry服務
編譯安裝nginx
免費制作https所需的可被權威ca認證的ssl證書(dv certificates)
配置nginx https服務
驗證最終結果
centos運作python2.7的方法
# for service docker
# refer: https://www.docker.com/
# refer: https://docs.docker.com/linux/step_one/
靜默更新系統,-qq參數需要用在apt-get子指令之前,-y随意
1
<code>apt-get -qq update -y</code>
安裝wget工具用于下載下傳檔案
<code>which</code> <code>wget > </code><code>/dev/null</code> <code>|| apt-get -qq </code><code>install</code> <code>-y wget</code>
添加docker的軟體倉庫key
<code>wget -qo- https:</code><code>//get</code><code>.docker.com</code><code>/gpg</code> <code>| apt-key add -</code>
執行docker安裝程式
<code>wget -qo- https:</code><code>//get</code><code>.docker.com/ | sh</code>
執行docker的測試指令,通過此指令看一看到docker引擎的版本等資訊
<code>docker version</code>
# if you would like to use docker as a non-root user, you should now consider adding your user to the "docker" group with something like:
# sudo usermod -ag docker your-user
# for program docker-enter
# refer: http://dockerpool.com/static/books/docker_practice/container/enter.html
安裝curl用于下載下傳檔案,此步驟可以省略,但建議安裝
<code>which</code> <code>curl > </code><code>/dev/null</code> <code>|| apt-get -qq </code><code>install</code> <code>-y curl</code>
下載下傳并解壓util工具,編譯并安裝nsenter,nsenter是docker-enter的主要元件
#cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
2
3
4
5
6
<code>cd</code> <code>/tmp</code><code>; wget -q https:</code><code>//www</code><code>.kernel.org</code><code>/pub/linux/utils/util-linux/v2</code><code>.24</code><code>/util-linux-2</code><code>.24.</code><code>tar</code><code>.gz; </code><code>tar</code> <code>xzvf util-linux-2.24.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>util-linux-2.24</code>
<code>.</code><code>/configure</code> <code>--without-ncurses && </code><code>make</code> <code>nsenter</code>
<code>cp</code> <code>nsenter </code><code>'/usr/local/bin'</code>
<code>which</code> <code>nsenter</code>
<code>cd</code>
下載下傳.bashrc_docker檔案,并将此檔案添加到目前使用者的bash初始化檔案中
<code>wget -p ~ https:</code><code>//github</code><code>.com</code><code>/yeasy/docker_practice/raw/master/_local/</code><code>.bashrc_docker;</code>
<code>echo</code> <code>"[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker"</code> <code>>> ~/.bashrc; </code><code>source</code> <code>~/.bashrc</code>
# for service docker-registry
靜默安裝依賴軟體docker-registry的軟體包,執行安裝程式
<code>apt-get -qq -y </code><code>install</code> <code>build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libffi-dev swig</code>
<code>git clone https:</code><code>//github</code><code>.com</code><code>/docker/docker-registry</code><code>.git</code>
<code>cd</code> <code>docker-registry</code>
<code>python setup.py </code><code>install</code>
如果目錄存在則進入目錄
<code>test</code> <code>-d </code><code>'/usr/local/lib/python2.7/dist-packages/docker_registry-1.0.0_dev-py2.7.egg/config/'</code> <code>&& </code><code>cd</code> <code>/usr/local/lib/python2</code><code>.7</code><code>/dist-packages/docker_registry-1</code><code>.0.0_dev-py2.7.egg</code><code>/config/</code>
以config_sample.yml模闆建立config.yml檔案
<code>cp</code> <code>config_sample.yml config.yml</code>
以背景程式的方式運作gunicorn,以啟動docker-registry
<code>nohup</code> <code>gunicorn --access-logfile - --error-logfile - -k gevent -b 0.0.0.0:5000 -w 4 --max-requests 100 docker_registry.wsgi:application >></code><code>/tmp/docker-registry</code><code>.log &</code>
如果要結束docker-registry則執行killall gunicorn
<code>killall gunicorn</code>
配置docker可以使用剛剛配置好的docker-registry
把docker.domain.com改成你的域名,後面在配置支援https的docker-registry服務時會繼續使用。
<code># insecure registry, deploying a plain http registry,using self-signed certificates </code>
<code>grep</code> <code>insecure </code><code>/etc/default/docker</code> <code>|| </code><code>echo</code> <code>'docker_opts="--insecure-registry docker.domain.com:5000"'</code> <code>>> </code><code>/etc/default/docker</code>
<code>service docker stop && service docker start</code>
7
8
9
10
11
12
13
14
<code>wget http:</code><code>//nginx</code><code>.org</code><code>/download/nginx-1</code><code>.8.0.</code><code>tar</code><code>.gz </code>
<code>tar</code> <code>zxf nginx-1.8.0.</code><code>tar</code><code>.gz </code>
<code>wget </code><code>ftp</code><code>:</code><code>//ftp</code><code>.csx.cam.ac.uk</code><code>/pub/software/programming/pcre/pcre-8</code><code>.37.</code><code>tar</code><code>.gz </code>
<code>tar</code> <code>zxf pcre-8.37.</code><code>tar</code><code>.gz </code>
<code>wget https:</code><code>//www</code><code>.openssl.org</code><code>/source/openssl-1</code><code>.0.2e.</code><code>tar</code><code>.gz </code>
<code>tar</code> <code>zxf openssl-1.0.2e.</code><code>tar</code><code>.gz </code>
<code>wget http:</code><code>//zlib</code><code>.net</code><code>/zlib-1</code><code>.2.8.</code><code>tar</code><code>.gz </code>
<code>tar</code> <code>zxf zlib-1.2.8.</code><code>tar</code><code>.gz </code>
<code>groupadd -r www </code>
<code>useradd</code> <code>-r -g www www -c </code><code>"web user"</code> <code>-d </code><code>/dev/null</code> <code>-s </code><code>/sbin/nologin</code>
<code>cd</code> <code>nginx-1.8.0 </code>
<code>.</code><code>/configure</code> <code>--prefix=</code><code>/usr/local/nginx</code> <code>--with-http_ssl_module --user=www --group=www --with-pcre=</code><code>/root/pcre-8</code><code>.37 --with-zlib=</code><code>/root/zlib-1</code><code>.2.8 --with-openssl=</code><code>/root/openssl-1</code><code>.0.2e </code>
<code>make</code> <code>&& </code><code>make</code> <code>install</code>
<code>/usr/local/nginx/sbin/nginx</code> <code>-v</code>
制作證書可以自己制作自簽名證書,既可以使用windows自帶的證書服務,也可以使用openssl工具,但弊端是使用者必須安裝ca證書,浏覽器才能承認此證書。如果想申請網際網路公認的證書必須由公認的權威ca簽發,這樣的證書通常需要購買或者試用獲得。如果不想花錢或者試用,可以借助let’s encrypt ca項目,自己給自己發放管理證書。
系統要求(先決條件):
python2.6以上(不含python2.6),centos系統預設安裝的是python2.6,centos更新python的方法參照下文。
<code>git clone https:</code><code>//github</code><code>.com</code><code>/letsencrypt/letsencrypt</code>
<code>cd</code> <code>letsencrypt </code>
<code>.</code><code>/letsencrypt-auto</code> <code>certonly --standalone --email [email protected] -d www.domain.com</code>
指令會自動根據目前的作業系統下載下傳合适的依賴包(主要是python),并且判斷目前系統環境是否滿足生成證書的要求,如果不滿足系統要求,則該程式會顯示出警告或者錯誤資訊。
在指令成功完成後會有較為明顯的提示,生成的證書将存放在/etc/letsencrypt/live/www.domain.com/目錄下,這個目錄下的檔案是/etc/letsencrypt/archive/www.domain.com/下的符号連結檔案
有了證書和key就可以開始配置nginx https服務了。
可選步驟,(尚未驗證,讀者可忽略此段斜體文字)為docker-registry設定身份驗證,需要用到apache項目中的htpasswd,在centos中htpasswd位于httpd-tools包中
<code># for htpasswd </code>
<code>apt-get -qq -y </code><code>install</code> <code>apache2-utils</code>
配置nginx https服務,有兩種選擇,即可以像配置nginx http服務那樣一步一步建立虛拟主機,也可以直接用https代理http。此處選擇後者,簡單易行。
<code>mkdir</code> <code>/usr/local/nginx/conf/vhost</code>
# sed在檔案最後一行的上一行插入新行,如果是最後一行插入新行,則可以将i換成a
<code>sed</code> <code>-i </code><code>'$i include vhost/*.conf;'</code> <code>/usr/local/nginx/conf/nginx</code><code>.conf</code>
#注意:把下文中的docker-registry-server換成上文監聽5000端口的某個ip位址,建議将此ip位址使用内網ip位址
<code>vim </code><code>/usr/local/nginx/conf/vhost/https_www</code><code>.yourdomainname.com.conf</code>
server {
listen 443 ssl;
index index.html index.htm;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.yourdomainname.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.yourdomainname.com/privkey.pem;
#ssl_password_file /usr/local/;
location / {
client_max_body_size 0;
proxy_connect_timeout 300s;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header vary;
proxy_set_header accept-encoding '';
proxy_set_header host $host;
proxy_set_header referer $http_referer;
proxy_set_header cookie $http_cookie;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header host $host;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
}
}
<code>vim </code><code>/usr/local/nginx/conf/vhost/http_www</code><code>.yourdomainname.com.conf</code>
listen 80;
index index.html index.htm;
}
<code>/usr/local/nginx/sbin/nginx</code> <code>-t </code>
<code>/usr/local/nginx/sbin/nginx</code> <code>-s reload</code>
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<code>yum groupinstall -y </code><code>"development tools"</code>
<code>yum </code><code>install</code> <code>-y zlib-devel </code><code>bzip2</code><code>-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel</code>
<code>echo</code> <code>'/usr/local/lib'</code> <code>>> </code><code>/etc/ld</code><code>.so.conf</code>
<code>ldconfig</code>
<code># python 2.7.6:</code>
<code>wget -c http:</code><code>//python</code><code>.org</code><code>/ftp/python/2</code><code>.7.6</code><code>/python-2</code><code>.7.6.</code><code>tar</code><code>.xz</code>
<code>tar</code> <code>xf python-2.7.6.</code><code>tar</code><code>.xz</code>
<code>cd</code> <code>python-2.7.6</code>
<code>.</code><code>/configure</code> <code>--prefix=</code><code>/usr/local</code> <code>--</code><code>enable</code><code>-unicode=ucs4 --</code><code>enable</code><code>-shared ldflags=</code><code>"-wl,-rpath /usr/local/lib"</code>
<code>make</code> <code>&& </code><code>make</code> <code>altinstall</code>
<code># first get the setup script for setuptools:</code>
<code>wget -c https:</code><code>//bitbucket</code><code>.org</code><code>/pypa/setuptools/raw/bootstrap/ez_setup</code><code>.py</code>
<code>python2.7 ez_setup.py</code>
<code>easy_install-2.7 pip</code>
<code># install virtualenv for python 2.7 and create a sandbox called my27project:</code>
<code>pip2.7 </code><code>install</code> <code>virtualenv</code>
<code>virtualenv-2.7 my27project</code>
<code># check the system python interpreter version:</code>
<code>python --version</code>
<code># this will show python 2.6.6</code>
<code># activate the my27project sandbox and check the version of the default python interpreter in it:</code>
<code>source</code> <code>my27project</code><code>/bin/activate</code>
<code># this will show python 2.7.6</code>
<code># 在這裡運作生成證書的程式</code>
<code># 生成證書完畢後執行deactivate,退出virtualenv</code>
<code>deactivate</code>
tag:ubuntu安裝docker,ubuntu安裝docker-registry,ubuntu安裝docker-enter,ubuntu安裝docker引擎,ubuntu 容器虛拟化
--end--