文章目录
  1. 1. Overview
  2. 2. 安装
    1. 2.1. CentOS
    2. 2.2. ubuntu
  3. 3. 基本操作
  4. 4. 自订镜像
  5. 5. registry
  6. 6. Conclusion
  7. 7. Reference

Overview

久闻docker的大名,之前用daocloud也是用了docker,正好最近有时间,就简单研究了一下。为了避免以后忘记,这里写一篇简单的上手指南。

介绍docker概念的文章太多了,这里就不赘述了。docker的好处在于可以带着整个系统环境进行分发,避免了部署时各种依赖构建的痛苦。而且轻量级容器不仅可以隔离应用环境,还可以提高机器利用率。相对于虚拟化来说,docker更轻量级一些,避免了不必要的资源浪费。

安装

CentOS

目前epel源上有docker,看之前的文章docker必须要3.x+以上的kernel,不过显然现在也支持2.6了,这对于还用着RHEL/CentOS 6的广大中国码农来说无疑是个好消息。安装非常简单:

首先,添加epel源:

wget http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm && rpm -ivh epel-release-latest-6.noarch.rpm

然后直接
$ sudo yum install -y docker-io

ubuntu

先添加源
$ sudo apt-get install -y apt-transport-https

添加密钥
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

添加源列表,按自己的系统来,我用的16.04,不过目前还没有对应的源,但是用wily的源:
deb https://apt.dockerproject.org/repo ubuntu-wily main

然后安装就行了
$ sudo apt-get update && sudo apt-get install -y docker-engine

基本操作

  • 查看镜像列表sudo docker images
  • 拉取镜像sudo docker pull [image url]
  • 启动镜像sudo docker run -it golang:alpine /bin/sh
  • 停止sudo docker stop [container id]
  • 删除镜像sudo docker rmi [image id]
  • 构建镜像docker build -t liuyiding/java:1.0 .

自订镜像

首先要选择一个基础镜像作为构建自己的应用的镜像,这里推荐alpine linux系列的镜像,alpine是一个非常小的linux发行版,非常适合于构建docker镜像,不过官方的alpine不包括glibc,导致类似java都没法运行,我是以frolvlad/alpine-glibc为基础的。

一个简单的Java环境的Dockerfile例子:

1
2
3
4
5
6
7
8
9
10
FROM frolvlad/alpine-glibc
MAINTAINER Liu Yiding<[email protected]>
RUN mkdir -p /usr/java
RUN mkdir -p /app
ADD jdk.1.8.0_65.tar.gz /usr/java/
RUN ln -s /usr/java/jdk.1.8.0_65 /usr/java/default
ENV JAVA_HOME=/usr/java/default
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/rt.jar
ENV PATH=$JAVA_HOME/bin:$PATH

构建直接docker build -t liuyiding/java:1.8 .即可。

再来个自己应用的Dockerfile的例子:

1
2
3
4
5
6
7
8
FROM liuyiding/java:1.8
MAINTAINER Liu Yiding<[email protected]>
RUN mkdir -p /app/uds/logs
ADD uds-assembly-1.1.0.jar /app/uds/
ADD start.sh /app/uds/
EXPOSE 8888 9990 20880
CMD ["/bin/sh", "/app/uds/start.sh"]

基本上非常简单就把自己应用的环境构建好了,再分发的时候也方便。

registry

docker的registry相当于一个镜像仓库,可以把构建好的镜像直接push上去,其他的docker机器只要pull回来就可以直接用了。除了公开的dockerhub,还可以搭建自己私有的registry。方法也很简单,只要拉一个registry的镜像就好。比较麻烦的是它要求https协议,还要生成自己的证书,如果没有可以验证的证书,还得自己手动信任。

  • 生成证书

    1
    2
    3
    cd /opt && mkdir -p certs && openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
    -x509 -days 365 -out certs/domain.crt
  • 在docker的机器上将domain.crt拷贝至/etc/docker/certs.d/myregistrydomain.com:5000/ca.crt

  • 安装运行docker-registry

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #目前最新版是2.3.1,千万别用latest,因为latest指向的是一个非常低的版本,还是python实现的
    $ sudo docker pull registry:2.3.1
    $ sudo docker run -d \
    -v /opt/registry:/var/lib/registry \
    -p 5000:5000 \
    -v /opt/certs:/certs \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    --restart=always --name registry registry:2.3.1

之后就可以用myregistrydomain.com:5000作为私有的registry了,在push之前需要打tag

1
2
$ sudo docker tag liuyiding/uds:1.1.0 myregistrydomain.com:5000/liuyiding/uds:1.1.0
$ sudo docker push myregistrydomain.com:5000/liuyiding/uds

Conclusion

总的来说,docker上手还是蛮简单的,如果有机会考虑推广一下。公司的线上机器资源利用率非常低,每个月阿里云上机器成本就一大堆,如果用上docker,肯定可以减少不少机器。

Reference

  1. docker.com
  2. Docker —— 从入门到实践
  3. 如何部署一个 docker registry
  4. Insecure Registry
文章目录
  1. 1. Overview
  2. 2. 安装
    1. 2.1. CentOS
    2. 2.2. ubuntu
  3. 3. 基本操作
  4. 4. 自订镜像
  5. 5. registry
  6. 6. Conclusion
  7. 7. Reference