1. 加速Docker镜像下载速度
国内下载Docker Hub的镜像很慢,有时直接无法下载成功,所以,有必要进行加速,daocloud.io它们家提供免费的镜像加速服务,还是蛮良心的,他们的加速服务有两个版本,一个是2.0,一个是1.0,2.0是从他们那里下载经过定制的Docker程序,安装主机监控程序,如果只是想加速下载,用1.0版本就好,简单粗暴的修改下配置文件的设置就可以
Ubuntu的Docker配置文件地址为:/etc/default/docker
,字段:DOCKER_OPTS
Centos/Fedora的配置文件地址为:/etc/sysconfig/docker
,字段:OPTIONS
追加--registry-mirror=http://xxxxxxxx.m.daocloud.io
到如上的字段中。
重启docker,配置文件就生效了。不过经过几天的学习,我觉得刚接触Docker想学习还是使用国外VPS方便,方便控制变量,排除不必要的错误
一个不错的学习Docker的在线文档:Docker —— 从入门到实践
2. Docker Hub基于Github的自动构建
这个东西还是蛮方便的,维护一个Dockerfile,然后每次更新,Docker Hub都会自己构建镜像。
1,首先在Github上创建一个项目,将Dockerfile放置在根目录下
2,注册并登陆Docker Hub,又上角 “Create - Create Automated Build”,关联Github账号
3,选择刚刚创建的Github仓库就可以了,提交后不是时实构建的,会有一定的排队时间,等一会再一刷新就可以看到构建完成
3. 快速构建上网环境
这里以Fedora为例,炒鸡简单
dnf install docker
docker run -d -p 1984:1984 oddrationale/docker-shadowsocks -s 0.0.0.0 -p 1984 -k $SSPASSWORD -m aes-256-cfb
OK! 这个部署的太方便了...-d
是告诉docker在后台运行这个实例,-p
是绑定容器内服务的端口到物理机的端口,oddrationale/docker-shadowsocks
是一个已经构建好的Docker 55镜像,了解更多请看文末参考,接下来后边的各种参数都是传递给容器内部的,下文有解释,把$PASSWORD换成你想使用的密码,-p 后的1984就是远程VPS开启的监听的端口号
4. CMD与ENTRYPOINT
上边oddrationale提供Docker 55的Github地址为:https://github.com/oddrationale/docker-shadowsocks
Dockerfile文件内容:
# shadowsocks
#
# VERSION 0.0.3
FROM ubuntu:14.04.3
MAINTAINER Dariel Dato-on <oddrationale@gmail.com>
RUN apt-get update && \
apt-get install -y python-pip
RUN pip install shadowsocks==2.8.2
# Configure container to run as an executable
ENTRYPOINT ["/usr/local/bin/ssserver"]
很简单的一个Dockerfile,FROM
指定基于的镜像,MAINTAINER
指明作者信息,RUN
在创建镜像的时候执行,通过pip安装55,安装55后将在/usr/local/bin
目录下会有一个ssserver程序,这就是服务端
Dockerfile中有两个命令是在运行实例的时候运行命令的
如果Dockerfile存在ENTRYPOINT
命令,那么在docker run
的时候,镜像后边的内容都会被当作是参数,如上边的-s 0.0.0.0 -p 1984 -k $SSPASSWORD -m aes-256-cfb
都是传递给ssserver的
CMD与ENTRYPOINT都只能在Dockerfile中出现一次,不同的是CMD会被docker run
的时候指定的参数给覆盖,而ENTRYPOINT则不会被覆盖
CMD与ENTRYPOINT的参数
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
如上的第一个是单独使用CMD时的推荐写法,第二个是与ENTRYPOINT一起使用时为ENTRYPOINT提供参数的写法,第三个会被翻译成这样/bin/sh command param1 param2
,一不留神就会出错,如果要使用sh来执行,那么可以这样写CMD ["/bin/sh", "-c", "command", "param1", "param2"]
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)
同样,ENTRYPOINT的第一种写法是建议的写法,第二种和CMD的同理
CMD与ENTRYPOINT协同工作
这两个可以一起工作的很好,举个栗子
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
使用不带参数的命令运行
docker run -it --rm --name test
那么top的参数就为-b -c
,如果使用如下指定参数的方式运行
docker run -it --rm --name test -H
那么top的参数为-b -H
,这是因为ENTRYPOINT不会被覆盖,CMD会被覆盖。也就是说,在写Dockerfile的时候,不变的参数写在ENTRYPOINT的参数列表,默认但可通过运行时改变的参数可以写在CMD后边,如果一定要运行时指定的参数,那么就不需要写了。
参考: