具有中国特色的docker折腾记(下)

Dockerfile

弄明白docker是怎么回事以后,当然是要来做几个自己的image。而要自建image,有两个方法:

一是下载一个官方image,然后在里面run一些你需要的东西,然后commit成一个image。

另一个方法则是用Dockerfile。

但本质上两个方法是一样的——因为Dockerfile的内容不过是一堆的RUN命令而已……

Dockerfile的文件名一般就叫做Dockerfile,这样比较方便,因为可以直接用来生成image:

docker build -t yourname/imagename:yourtagname .

如果不是用这个文件名的话,就需要用这样的命令了:

docker build -t yourname/imagename:yourtagname - < yourdockerfilename

其中yourtagname是可以省略的,默认是latest。build完成以后会按Dockerfile的内容生成一个新的image,image的名字就是:yourname/imagename。

Dockerfile最基本的内容主要有两个:一个是FROM指令,一个是RUN指令。

FROM用于指定用哪个image作为基础,RUN则是在基础image上新建一个container并运行命令。一个简单的例子如下:

FROM ubuntu
RUN echo "deb http://cn.archive.ubuntu.com/ubuntu precise main" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y vim

其它可选和进阶的指令有:MAINTAINER, ENTRYPOINT, USER, EXPOSE等。简单说明如下:

MAINTAINER:维护者说明
ENTRYPOINT:作为container运行时的启动程序
USER:作为container运行时,启动程序使用的用户身份
EXPOSE:作为container运行时需要监听的端口号

更具体的说明请参见官方文档。

需要注意的是,使用docker build建立image时会依次运行Dockerfile里的每一句run,而每运行一句就会生成一个单独的container。

分享image

自建的image可以上传到官方仓库与大家分享,也方便以后自己重用。

但在上传之前,需要先到官方仓库注册一个用户。注意:注册完要先去收一下邮件,通过邮箱验证以后才可以从docker登录。

然后从本地docker登录官方仓库:

docker login

之后就可以上传自己创建的image了:

docker push yourname/imagename

docker-registry

老是穿墙用官方仓库也不方便,而且总会有一些东西是不方便放到官方仓库去公开的,所以自建仓库很有必要。

我的仓库是建在一台FreeBSD服务器上的,以下步骤供参考:

第一步当然是装一个git。说实话,我是非常不喜欢git的,远没有hg用起来简单方便,而且刚才在FreeBSD上用ports安装完成以后居然还运行出错,clone的时候core dump了。最后还是升级了openssl和curl才解决。

第二步就是clone docker-registry的代码:

git clone https://github.com/dotcloud/docker-registry.git

第三步是准备docker-registry的运行环境,因为它是用python写的,所以我还是专门给它开了一个virtualenv。不过因为它用到了gevent,而在FreeBSD的virtualenv里安装gevent会有点小麻烦,详见我以前的文章。所以要先装gevent,而要装这个,又要先装一个libevent。

cd /usr/ports/devel/libevent
# 注意,这里不要clean,因为编译gevent还要用到
make install
# 用了virtualenvwrapper的命令进入指定的virtualenv环境
workon your_virtualenv
# 下载gevent并不安装
pip install --no-install gevent==0.13.8
# 进入已下载的gevent位置
cdvirtualenv build/gevent
# libevent参见你的实际环境
python setup.py install --libevent /usr/ports/devel/libevent/work/libevent-1.4.14b-stable
pip install gevent
# 回到docker-registry位置
cd path_to/docker-registry
pip install -r requirements.txt

不过以上都是针对FreeBSD而言,如果是ubuntu之类的就要简单很多,apt安装一下就完了,详见官方文档

第三步是配置,最简单的做法就是用默认配置,更详细的说明则见官方文档。默认配置的方法如下:

cd config
cp config_sample.yml config.yml

第四步就可以运行了:

gunicorn --access-logfile - --debug -k gevent -b 0.0.0.0:5000 -w 1 wsgi:application

注意:以上默认配置和运行命令都是以测试/调试模式工作的,实际应用请自己修改配置和命令。

如果需要,还可以再加上一层Apache/Nginx做代理发布到外网跟你的小伙伴们分享,这个就不再赘述了。

docker-registry的使用

自建的docker-registry如何使用呢?

最先要做的一件事情就是:

停掉那个加了代理的docker daemon,重启默认的服务:

ps aux | grep "sudo docker"
sudo kill [docker-daemon-pid]
sudo service docker start

因为自建的registry显然不再需要代理,加了代理反而会连不通。

然后看看本地image的ID,准备挑一个拿来上传:

docker images | grep ubuntu | grep latest

接着设置其repository名:

docker tag [image_id] [your-registry-host]:5000/ubuntu

OK,现在可以push了:

docker push [your-registry-host]:5000/ubuntu

之后就可以在别的机器上从这个registry上下载了:

docker pull [your-registry-host]:5000/ubuntu

就是这样。

相关推荐
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰刘运强老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL性能、可用性、扩展性都提出了很高要求。使用MySQL解决大量数据以及高并发请求已经是程序员必备技能,也是衡量一个程序员能力和薪资标准之一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引使用和优化技巧,能够避开很多实战遇到“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数和通用表表达式。企业许多报表统计需求,如果不采用窗口函数,用普通 SQL 语句是很难实现。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制和读写分离。在企业生产环境,很少采用单台MySQL节点情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构实现是非常有必要。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作第一步,就是高效准备面试,面试篇主要从知识点回顾总结角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪工作机会。</span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页