牧场主施工注意事项


0.术语

Rancher:在真实环境中运行容器需要多种技术,这些技术必须在其整个生命周期中进行集成和管理。诸如Kubernetes之类的强大工具需要大量的安装和管理专业知识。 Rancher是一个完整的容器管理平台,可以非常轻松地管理和使用生产中的容器。 (来自官方)

目录:Rancher提供了一个应用程序模板目录,使您可以轻松地部署复杂的堆栈。库目录包含Rancher认证目录的模板,社区目录包含社区目录的模板。 Rancher仅在库中维护对认证模板的支持。 (来自官方)

私人目录:自制目录

堆栈:多个容器的集合

1.目的

我尝试使用Rancher,所以给自己准备了一份备忘录。
自从我开始使用Docker已经两周了,所以我对实际操作并不了解。
在Proxy环境中安装Docker,Docker-compose和Rancher,轻松使用它,并在Rancher中创建一个包含PostgreSQL pgAdmin4的私有目录。

2.环境

主机(物理服务器)
--OS:CentOS Linux 7(核心)
-有一个代理。如果您没有代理,请根据需要跳过代理部分。
-以root身份运行。除root以外,酌情添加sudo。
-防火墙,SElinux已禁用

3. Docker安装

说明物理服务器上的CentOS安装,操作系统更新等已完成。
假定yum.conf中的环境变量和代理设置也是可能的。

Docker正式安装过程:
https://docs.docker.com/engine/installation/linux/docker-ce/centos/#set-up-the-repository

按照官方程序进行安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

# stableのレポジトリセットアップ
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# testとedgeリポジトリの有効?無効設定は公式ページを見ること。
# 上記コマンドではtestとedgeリポジトリは有効ではない。

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64            17.09.ce-1.el7.centos             docker-ce-stable

# versionを正確に指定してもいい
$ sudo yum -y install docker-ce

$ sudo systemctl start docker

# proxy環境だと以下のようなエラーがでてhello-world出来なかった。
# docker pullが出来ないみたい。
$ sudo docker run hello-world
Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on <環境のIPアドレス:ポート>: no such host

按照官方代理的说明进行设置。
https://docs.docker.com/engine/admin/systemd/#runtime-directory-and-storage-driver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# ディレクトリ作成
$ sudo mkdir -p /etc/systemd/system/docker.service.d

# http-proxy.conf と https-proxy.confファイルを作る
$ touch /etc/systemd/system/docker.service.d/http{,s}-proxy.conf

# めんどいので両方のファイルを同じ内容にして大丈夫。以下のような内容を書き込んで保存する。
$ cat  /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://<ユーザ名>:<パスワード>@<proxyサーバ>:<ポート>/" "HTTPS_PROXY=http://<ユーザ名>:<パスワード>@<proxyサーバ>:<ポート>/" "NO_PROXY=localhost,127.0.0.1(,他にもあれば追加する)"

# デーモン再起動
$ sudo systemctl daemon-reload

# docker再起動
$ sudo systemctl restart docker

# 2018/07/29追加 docker自動起動設定
$ systemctl enable docker.service

# 設定確認
$ systemctl show --property=Environment docker
# もしくは、
$ docker info |grep Proxy

# あまり覚えてないけどIPv6設定はホストで無効化した気がする。
# この設定が必要かどうかは不明。設定しても私の環境では特に問題は起きてない。
$ sysctl -w net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
$ sysctl -w net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6 = 1

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1
$ cat /proc/sys/net/ipv6/conf/default/disable_ipv6
1

4. docker-compose安装

按照官方程序进行安装。
https://docs.docker.com/compose/install/#install-compose

1
2
3
4
5
6
7
# proxy環境の場合、curlのproxy設定をすること。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

# インストール確認
$ docker-compose --version

如果需要,请设置命令行完成。
官方:https://docs.docker.com/compose/completion/

如果您构建的不是root用户环境,则会发生以下错误。

看来您可以通过下面描述的方法进行操作。 (未确认)
http://docs.docker.jp/compose/install.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ docker-compose up -d
ERROR: Couldn't connect to Docker daemon at http://127.0.0.1:8082 - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

$ sudo docker-compose up -d
sudo: docker-compose: コマンドが見つかりません

# 以下のようにsecure_pathを変更しておく。
$ sudo visudo

...
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/local/bin:/usr/bin
...

# うまくいった
$ sudo docker-compose up -d
Creating network "rancher_default" with the default driver
Pulling rancher-server (rancher/server:latest)...
...

5.尝试运行Docker

我创建了一个Dockerfile来启动httpd。
在Dockerfile中将HTTP_PROXY=${HTTP_PROXY}HTTPS_PROXY-${HTTPS_PORXY}指定为ENV。
如果您收到一个错误消息,即无法在Dockerfile中找到该存储库,则似乎可以将yum clean all写出来,但是
Nginx没有工作,哭了,放弃了。 (是因为代理...)

创建

文件时,执行以下命令。 (您可以在docker-compose.yml中编写它)
test100的一部分是任意名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 適宜好きなディレクトリに変更してください。
$ mkdir -p /root/testweb/html

$ cd /root/testweb

# 以下のDockerfileを作成。
# /etc/yum.confを./にコピーしておく。
$ cat Dockerfile
FROM             centos:centos7.4.1708
MAINTAINER       TestUser
ENV              container docker
ENV              HTTP_PROXY=${HTTP_PROXY}
ENV              HTTPS_PROXY=${HTTPS_PROXY}
ADD              yum.conf /etc/
RUN              yum update -y && yum clean all
RUN              yum swap -y fakesystemd systemd && yum clean all
RUN              yum install -y httpd && yum clean all
RUN              yum install -y iproute
RUN              systemctl enable httpd
EXPOSE           80

# test100は任意の名称
$ docker build -f Dockerfile -t centos:test100 --no-cache=true .
...

# imageの確認
$ docker images
REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
centos                                   test100             6973673f976e        19 seconds ago      578MB
...

# docker-compose.ymlでコンテナ起動(docker runでやってもいい)
# 適宜、自分の環境にあうように書き換えてください。
# volumesでホストのボリューム/root/testweb/htmlを/var/www/htmlに見せる。
# 権限がおかしくpermission deniedになる場合は、ホスト側でchownしてやること。
# .envファイルでproxyの設定を書いている。ベタでenvironment:でproxy設定を書いても良い。
# ホストのポートを8040に指定。
# docker runの場合はproxy設定を--envで行う。以下に docker runの場合を示す(未確認)。
# docker run -d --privileged --name test -it -p 8040:80 centos:test100 /sbin/init \
#   --env HTTP_PROXY=${HTTP_PROXY} --env HTTPS_PROXY=${HTTPS_PROXY} --restart=unless-stopped こんな感じ?
$ cat docker-compose.yml
version: '3'
services:
  testweb:
    image: cenots:test100
    container_name: test
    ports:
      - "8040:80"
    privileged: true
    hostname: testweb
    volumes:
      - /root/testweb/html:/var/www/html
    env_file: .env
    restart: unless-stopped
    command: /sbin/init

# 適宜、自分の環境のproxy情報に書き換えてください。
$ cat .env
http_proxy=http://xxxx
https_proxy=http://xxxx
HTTPS_PROXY=http://xxxx
HTTP_PROXY=http://xxxx
NO_PROXY="localhost,127.0.0.1"

# コンテナ起動
$ docker-compose up -d

# ちゃんと起動している。
$ docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                       PORTS                                                   NAMES
b5a7ccd8147c        cenots:test100                    "/sbin/init"             17 minutes ago      Up 17 minutes                0.0.0.0:8040->80/tcp                                    test

# コンテナに入ってみる
docker exec -it test /bin/bash

# ホストで (./ = /root/testweb/)
echo "hello" > ./html/index.html

# ブラウザで"ホストIP:8040"を開くとhelloと表示される。

6.安装Rancher

由于我能够确认docker-compose的操作,因此将Rancher放入docker-compose。
由于未考虑HA配置,ACL等内容编写,因此请适当查看公式来重写它。
https://rancher.com/docs/rancher/latest/en/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# v1.6を入れる。rancher2.0が使いたい場合は、 imageで rancher/server:v2.0.0-alpha10を指定する(未確認)
# https://github.com/rancher/rancher

$ mdkir -p /root/rancher/

$ cd /root/rancher/

# 以下のファイルを作成。
# データボリュームをホストに作成して、Rancherを削除してもデータが消えないようにする。
# .evnは先程と同じ
$ cat docker-compose.yml
version: '3'
services:
  rancher-server:
    image: rancher/server:latest
    container_name: rancher-server
    ports:
      - "8000:8080"
    environment:
      - CATTLE_DB_CATTLE_USERNAME=rancher
      - CATTLE_DB_CATTLE_PASSWORD=rancher
    volumes:
      - /root/rancher/rancher-server/mysql:/var/lib/mysql
      - /root/rancher/rancher-server/mysql-log:/var/log/mysql
      - /root/rancher/rancher-server/cattle:/var/log/cattle
    env_file: .env
    restart: unless-stopped

# 実行
$ docker-compose up -d

# ログを監視。立ち上がりを待つ。
$ docker-compose logs -f rancher-server

从带有\\" Host IP:8000 \\"的浏览器访问。右下角有一个语言设置,因此,如果要使用日语,请进行设置。
在管理员→设置中检查主机注册URL是否正确。
此处的设置比较混乱,因为如果您使用Google,很容易提出其他设置。

キャプチャ.PNG

输入主机服务器。 5.复制命令并在主机上运行。
キャプチャ.PNG

您可以在

基础结构→主机中看到已添加主机,如下所示。
キャプチャ.PNG

7.增加私人目录

根据以下公式创建。省略了对Git和存储库的说明。
创建一个运行PostgreSQL和pgAdmin4的私有目录。
https://rancher.com/docs/rancher/v1.3/en/catalog/private-catalog/

已创建以下目录结构。我将此添加到github存储库中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
$ pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'
/root/rancher_catalog/templates/postgres_pgadmin
|--0
|  |--docker-compose.yml
|  |--rancher-compose.yml
|--catalogIcon-cloudflare.png
|--config.yml

$ cat config.yml
name: postgres_pgadmin
description: "available postgreSQL&pgAdmin4"
version: v0.1
category: "Web Apps"

$ cat docker-compose.yml
version: '2'

services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: changeme
      PGDATA: /data/postgres
    volumes:
       - /data/postgres:/data/postgres
    ports:
      - "5434:5432"
    networks:
      - postgres
    restart: unless-stopped

  pgadmin:
    links:
      - postgres:postgres
    image: fenglc/pgadmin4
    volumes:
       - /data/pgadmin:/root/.pgadmin
    ports:
      - "5052:5050"
    networks:
      - postgres
    restart: unless-stopped

networks:
  postgres:
    driver: bridge

$ cat rancher-compose.yml
version: '2'
catalog:
  name: "PostgreSQL & pgAdmin4"
  version: "v1.0"
  description: "PostgreSQL & pgAdmin4"
services:
  postgres:
    scale: 1

添加目录,添加名称,URL和分支并保存。
キャプチャ.PNG

添加了自制目录。
image.png

关于Docker,Rancher

的说明

  • 主机重新启动时启动容器
    当使用systemctl enable docker自动启动docker时,rancher及其管理目标似乎自动启动。重新设定?
    但是,对于不由牧场主管理的独立容器,牧场主将不会启动,因此有必要单独设置自动启动。
  • 数据持久性
    如果您没有将数据保存在主机或容器中以获取具有大容量的数据,则将通过删除容器来删除数据。
  • 牧场主更新
    出于某种原因,Rancher 2.0无法正常工作。我没有时间,所以我会推迟。
    s6-svscanctl:致命:无法控制/服务:主管未收听。这种事情不起作用。
    如果数据具有持久性,则可以使用没有问题的剩余信息进行更新,而无需每次都添加主机。
    删除ranchersvr不会删除堆栈。 (当然)
    在更新时,可以在不进行任何特殊删除的情况下更新代理和其他牧场主的网络容器。
  • 群集
    只需增加规模即可增加容器数量和规模。
    如果有多个主机,则将分配和分配容器。
    image.png
    如果主机死亡,它将在活动主机上的死主机上重建容器。
    image.png

命令备忘录

  • docker-compose build --no-cache#不带缓存的构建

我将来想知道的

  • 牧场主CLI
  • postgreSQL集群和rancher之间的关系(pgpool-II的构造)
  • 牛→k8s
  • 牧场主ACL设置

结束于

我想阅读正式文档,因为有很多部分我还不了解。
我正在学习,所以如果你说些奇怪的话,请告诉我。
私有目录无法按原样缩放,因此我们将在以后进行设置。

参考

  • IT工程师的现场知识Docker实用指南(Masazumi Koga =作者)
  • Docker官方网站