LoginSignup
0
1

More than 3 years have passed since last update.

ubuntu 20.04.1 上でプロキシ環境でdockerを使うための設定スクリプト

Last updated at Posted at 2020-09-18

ubuntu 20.04.1 上でプロキシ環境でdockerを使うための設定スクリプト

ubuntu 20.04.1 上でプロキシ環境でdocker を利用する の設定を一括でやるスクリプトを作成しました。

使い方

  1. docker-proxy.py とかいう名前で保存します。
  2. chmod +x docker-proxy.py で実行権限を付けます。
  3. sudo docker-proxy.py proxy-url のようにして実行します。

ここで proxy-url には http://192.168.11.61:3128 などの文字列を指定します。

スクリプト本体

#!/usr/bin/python3

import string
import subprocess
import os
import sys

###########################################################################
#  template for /etc/apt/apt.conf
###########################################################################
template_apt_conf = """\
Acquire::http::Proxy "$proxy_url";
Acquire::https::Proxy "$proxy_url";
"""


###########################################################################
#  template for /etc/systemd/system/docker.service.d/override.conf
###########################################################################
template_docker_service_override = """\
[Service]
Environment="HTTP_PROXY=$proxy_url"
Environment="HTTPS_PROXY=$proxy_url"
Environment="NO_PROXY=localhost,127.0.0.1"
"""

###########################################################################
#  template for ~/.docker/config.json
###########################################################################
template_config_json = """\
{
  "proxies": {
    "default": {
      "httpProxy": "$proxy_url",
      "httpsProxy": "$proxy_url",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}
"""


###########################################################################
#  write proxy data to a file
###########################################################################
def write_proxy(file_name, input_template, proxy_url):
    context = {
        'proxy_url' : proxy_url
    }
    template = string.Template(input_template)
    data = template.substitute(context)

    with open(file_name, "w") as fout:
        fout.write(data)
    print("wrote: " + file_name)

###########################################################################
#  get the home directory of the original user
###########################################################################
def get_original_home():
    user = os.environ['SUDO_USER']
    if user:
        home_dir = os.path.expanduser('~' + user)
    else:
        home_dir = os.path.expanduser('~')
    return home_dir

###########################################################################
#  write etc/apt/apt.conf
###########################################################################
def write_apt_conf(proxy_url):
    write_proxy('/etc/apt/apt.conf', template_apt_conf, proxy_url)

###########################################################################
#  write /etc/systemd/system/docker.service.d/override.conf
###########################################################################
def write_docker_service_override(proxy_url):
    docker_service_d = '/etc/systemd/system/docker.service.d'
    if not os.path.isdir(docker_service_d):
        os.mkdir(docker_service_d)

    override_conf = os.path.join(docker_service_d, "override.conf")
    write_proxy(override_conf, template_docker_service_override, proxy_url)

###########################################################################
#  write ~/.docker/config.json
###########################################################################
def write_docker_config(proxy_url):
    # get the path of ~/.docker
    home_dir = get_original_home()
    docker_dir = os.path.join(home_dir, ".docker")

    # create ~/.docker
    if not os.path.isdir(docker_dir):
        os.mkdir(docker_dir)

    # get ~/.docker/config.json
    config_json = os.path.join(docker_dir, "config.json")
    write_proxy(config_json, template_config_json, proxy_url)

###########################################################################
#  usage
###########################################################################
def usage():
    print("usage: sudo docker-proxy.py proxy-url")
    print("example: sudo docker-proxy.py http://192.168.11.61:3128")

def exec(command):
    subprocess.call(command.split(), shell=False)
    print("ran: " + command)

if __name__ == '__main__':
    if len(sys.argv) != 2 or os.getuid() != 0:
        usage()
        sys.exit(1)

    proxy_url = sys.argv[1]

    exec('apt install -y docker.io docker-compose')

    write_apt_conf(proxy_url)
    write_docker_service_override(proxy_url)
    write_docker_config(proxy_url)

    exec('systemctl daemon-reload')
    exec('systemctl restart docker')

処理内容

1.
docker をインストールする。

apt install -y docker.io docker-compose

2.
以下ファイルにプロキシ設定を書き込みます。(必要に応じてフォルダも作成します。)

  • /etc/apt/apt.conf
  • /etc/systemd/system/docker.service.d/override.conf
  • ~/.docker/config.json

3.
以下コマンドを実行して docker デーモンの設定ファイルを反映します。

  • systemctl daemon-reload
  • systemctl restart docker
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1