龙芯平台Docker 配置与实践清单

 

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。

 

虚拟机最大的瓶颈在于其需要特殊硬件虚拟化技术支持,并且携带完整的操作系统;而 Docker 没有硬件虚拟化,可以运行在物理机、虚拟机,甚至嵌套运行在 Docker 容器内,并且其不携带操作系统的,会轻巧很多。在调用宿主机的内存、CPU、磁盘等等资源时,虚拟机是利用 Hypervisor 去虚拟化内存,整个调用过程是虚拟内存->虚拟物理内存->真正物理内存,但是 Docker 是利用 Docker Engine 去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。

 

Docker 综合运用了 Cgroup,Linux Namespace,Secomp capability,Selinux 等机制,在 Docker Internals CheatSheet 中我们会有详细的讨论,或者前往 Backend Boilerplate/Docker[3] 浏览常见服务/应用的 Docker 配置案例。

 

安装与配置

Docker CE

 

这里我们使用科大的 Docker CE 源[4]进行安装:

 

# 更改 Ubuntu 默认源地址
$ sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

# 安装必备的系统命令
$ sudo apt-get install -y python-software-properties

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

$ sudo apt-get update

$ apt-cache policy docker-ce # 列举 docker-ce 版本

$ apt-get install docker-ce=17.03.2-ce....

Daemon Configuration

 

# 配置开机自启动
$ sudo systemctl enable docker

# 取消开机自启动
$ sudo systemctl disable docker

我们还需要修改存储路径,指定镜像存储地址,允许远程访问;此时我们可以修改 systemd 中的配置文件,也可以修改 /etc/docker/daemon.json,此处以修改服务为例:

 

# 使用 systemctl 命令行修改
$ sudo systemctl edit docker.service

# 或者查找配置地址并使用 Vim 修改
$ systemctl status docker

# 修改文件内容
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock --insecure-registry 10.196.108.176:5000 --dns 114.114.114.114 --dns 8.8.8.8 --dns 8.8.4.4 -g /mnt

然后重启服务:

 

# 重新载入服务配置
$ sudo systemctl daemon-reload

# 重启 Docker
$ sudo systemctl restart docker.service

# 判断是否配置成功
$ sudo netstat -lntp | grep dockerd

Docker Swarm

 

# 在主节点启动 Swarm
$ docker swarm init

# 查看 Swarm 密钥
$ docker swarm join-token -q worker

# 在主节点启动 Procontainer
$ docker run -it -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

# 在主节点启动 Registry
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2

# 将子节点加入到 Swarm
$ docker swarm join \
--token ${TOKEN} \
10.196.108.176:2377

代理设置

 

鉴于 gcr 域名的不可用,我们需要利用 ss-privoxy 等工具搭建 Docker 源代理,也可以参考这里手动配置客户端:

 

$ docker run -i -t -e SERVER_ADDR=ss.server.ip -e SERVER_PORT=port -e PASSWORD=123456 bluebu/shadowsocks-privoxy

如果需要手动安装,需要先安装 sslocal 命令:

$ apt install python3-pip
$ pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip -U

写入你的配置文件到例如 config.json:

 

{
    "server": "...",
    "server_port": ...,
    "local_port": 1080,
    "password": "..."
    "method": "chacha20-ietf-poly1305",
    "timeout": 600
}

启动:

 

$ sslocal -c config.json

这时一个 socks5 代理在你本机就启动了。下面安装配置 privoxy 把他转成 http/https 代理。安装略。修改/添加两个 privoxy 的配置(对于 ubuntu,在 /etc/privoxy/config):

 

listen-address 0.0.0.0:8118        # 所有 interface 上监听流量
forward-socks5 / 127.0.0.1:1080 .  # 流量导向本机上的 ss 代理

这时可以访问一下不存在的网站测试一下:

 

HTTP_PROXY=127.0.0.1:8118 HTTPS_PROXY=127.0.0.1:8118 curl https://www.google.com

下面修改各台机器的 Docker 配置(假定我们的 master 内网地址 1.1.1.2,其他两台机器地址为 1.1.1.3 和 1.1.1.4):

 

[Environment]
Environment="HTTP_PROXY=127.0.0.1:8118" "HTTPS_PROXY=127.0.0.1:8118" "NO_PROXY=localhost,127.0.0.1,1.1.1.2,1.1.1.3,1.1.1.4"

...

环境变量 NO_PROXY 顾名思义,它不支持 CIDR 应该,所以需要你枚举一下集群主机地址。

 

镜像

 

镜像描述了 Docker 容器运行的初始文件系统,包含运行应用所需的所有依赖。即可以是一个完整的操作系统,也可以仅包含应用所需的最小 bin/lib 文件集合。Docker 镜像和容器采用分层文件系统结构,每个容器包含一层薄薄的可写层,只读部分是共享的,这种机制保证了资源的可复用性,减少了镜像与容器的空间占用。Docker 镜像存储引擎有 AUFS,DeviceMapper,Overlay 等多种实现。

 

构建与拉取

 

编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像;关于 Dockfile 的具体语法,可以查看下文。Dockfile 基本的格式为 docker build [ 选项 ] 路径,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。因此一般建议放置 Dockerfile 的目录为空目录。也可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。

 

镜像的完整 tag 不仅包含镜像名字,还指明了镜像从哪里来,要到哪里去,就像一个 URL。可以通过 -t 选项指定镜像的标签信息,譬如:

 

$ sudo docker build -t myrepo/myapp /tmp/test1/

$ docker build -t username/image_name:tag_name .

$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Docker 支持从 Registry 拉取镜像,或者将某个容器保存为镜像:

 

# 拉取镜像
$ docker pull image_name

# 将某个容器保存为镜像
$ docker commit -m “commit message” -a “author”  container_name username/image_name:tag
复制代码Docker 支持将镜像保存为文件,以方便镜像的导出与加载:
# 保存镜像
$ docker save --output saved-image.tar my-image:1.0.0
$ docker save my-image:1.0.0 > saved-image.tar
$ docker save my_image:my_tag | gzip > my_image.tar.gz

# 导入镜像
$ docker load --input saved-image.tar
$ docker load < saved-image.tar

镜像管理

 

docker images 命令会列举出全部的镜像:

 

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mynewimage          latest              4d2eab1c0b9a        5 minutes ago       278.1 MB
ubuntu              14.04               ad892dd21d60        11 days ago         2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值