天天看点

Ubuntu安装Docker引擎和支持HTTPS的docker-registry服务(1)系统初始化完成后开始安装Docker引擎服务(2)安装docker-enter工具,便于使用docker(3)安装docker-registry服务(4)配置支持HTTPS的docker-registry服务(5)验证最终结果附加:CentOS将python2.6切换到python2.7的方法

虽然本文标题是针对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  &gt; </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 &gt; </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 &amp;&amp; </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 ] &amp;&amp; . ~/.bashrc_docker"</code> <code>&gt;&gt; ~/.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>&amp;&amp; </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 &gt;&gt;</code><code>/tmp/docker-registry</code><code>.log &amp;</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>&gt;&gt; </code><code>/etc/default/docker</code>

<code>service docker stop &amp;&amp; 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>&amp;&amp; </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>&gt;&gt; </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>&amp;&amp; </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--