当前位置:   article > 正文

java-docker 配置使用方法_如何生成新的docker java config

如何生成新的docker java config

目录

 

docker连接方式

java版的docker客户端


docker 是一个本地化的软件,默认不提供通信端口访问形式。如果需要连接docker,则需要修改配置,重启docker服务。

  • java版的docker客户端

    • 简介:java版的docker客户端地址。该项目主要是提供了java代码版的docker命令实现。由项目介绍可以知道,想要连接docker,需要配置docker服务端的通信端口,并且为了安全,一般都会以证书形式进行身份认证,所以需要生成一些证书。
    • 配置:
      • 在项目中提供了一份详尽的docker配置文档,生成证书部分没有问题,在配置docker服务时,我使用文档中的方式没有生效,查阅资料以另一种方式配置生效。
      • 生成证书:在服务器上执行 docker 命令

        可以看到默认的docker证书存放路径都是在/root/.docker/ca.pem目录下,红框中的内容是需要配置的内容。
        生成证书的过程根据github上的配置文档即可配置,过程中需要敲大量的命令,为了简化这个过程,我写了一个shell脚本,用来完成这些复杂的过程。代码如下:
        1. #!/bin/bash
        2. # 创建docker认证所需证书,统一放置在/root/.docker目录下
        3. # 证书有效期
        4. VALID_YEARS=10
        5. # 证书存放路径
        6. DOCKER_CERT_PATH=/root/.docker
        7. # 证书认证密码
        8. PASSWORD=123456
        9. VALID_DAYS=$((VALID_YEARS * 365))
        10. COUNTRY=CN
        11. STATE=BJ
        12. COMMON_NAME=localhost
        13. # 根据网卡名称获取ip地址
        14. function getIP() {
        15. # /sys/class/net 目录下存储了所有网卡信息,子目录均为网卡名,
        16. # /sys/devices/virtual/net/ 目录下存储了所有的虚拟网卡名
        17. NETWORK_CARD_NAME=`ls /sys/class/net | grep -v "\`ls /sys/devices/virtual/net/\`"`
        18. for net_name in $NETWORK_CARD_NAME
        19. do
        20. possible_ip=`ip a | sed "/$net_name$/p" -n | awk '{print $2}'| awk -F/ '{print$1}'`
        21. if [ $possible_ip ]; then
        22. echo $possible_ip
        23. fi
        24. done
        25. }
        26. # 拼接ip字符串
        27. function getIPStr() {
        28. ix=1
        29. for ip in `getIP`
        30. do
        31. let ix+=1
        32. echo "IP.$ix = $ip\n"
        33. done
        34. }
        35. # 主机的ip字符串
        36. IP_STR=$(echo `getIPStr` | sed 's/\\n\s/\\n/g')
        37. HOSTNAME_STR="DNS.2 = `hostname`"
        38. echo -e "本机ip为:\n`getIP`\nhostname为:`hostname`"
        39. # 定义创建证书函数,第一个参数是文件名,第二个参数是创建语句
        40. function makeCert() {
        41. if [ -f "$1" ]; then
        42. echo "$1 已存在,跳过"
        43. else
        44. # 执行命令并丢弃输出
        45. eval $2 &>> /dev/null
        46. if [ $? -ne 0 ]; then
        47. echo "$1 创建失败"
        48. exit 1
        49. else
        50. echo "$1 创建成功"
        51. # 修改权限为只读
        52. PERM_NUM=`stat -c %a $1`
        53. if [ $PERM_NUM -ne 440 ]; then
        54. chmod 440 $1
        55. echo "========== 修改$1权限为只读成功"
        56. fi
        57. fi
        58. fi
        59. echo ""
        60. }
        61. echo "------开始生成证书------"
        62. # 创建证书存放路径
        63. if [ -d $DOCKER_CERT_PATH ]; then
        64. echo "$DOCKER_CERT_PATH 已存在,跳过"
        65. else
        66. mkdir $DOCKER_CERT_PATH
        67. echo "$DOCKER_CERT_PATH 创建成功"
        68. fi
        69. cd $DOCKER_CERT_PATH
        70. # 创建ca.srl
        71. CA_SRL=$DOCKER_CERT_PATH/ca.srl
        72. CA_SRL_SH="echo 01 > ca.srl"
        73. makeCert $CA_SRL "$CA_SRL_SH"
        74. # 创建ca-key.pem
        75. CA_KEY_PEM=$DOCKER_CERT_PATH/ca-key.pem
        76. CA_KEY_PEM_SH="openssl genrsa -des3 -passout \"pass:$PASSWORD\" -out ca-key.pem 2048"
        77. makeCert $CA_KEY_PEM "$CA_KEY_PEM_SH"
        78. # 创建ca.pem
        79. CA_PEM=$DOCKER_CERT_PATH/ca.pem
        80. CA_PEM_SH="openssl req -new -x509 -days $VALID_DAYS -key ca-key.pem -out ca.pem -passin \"pass:$PASSWORD\" -subj \"/C=$COUNTRY/ST=$STATE\""
        81. makeCert $CA_PEM "$CA_PEM_SH"
        82. # 创建server-key-tmp.pem
        83. SERVER_KEY_TMP_PEM=$DOCKER_CERT_PATH/server-key-tmp.pem
        84. SERVER_KEY_TMP_PEM_SH="openssl genrsa -des3 -passout \"pass:$PASSWORD\" -out server-key-tmp.pem 2048"
        85. makeCert $SERVER_KEY_TMP_PEM "$SERVER_KEY_TMP_PEM_SH"
        86. # 创建服务端配置文件server-cert.txt
        87. SERVER_CERT_TXT=$DOCKER_CERT_PATH/server-cert.txt
        88. SERVER_CERT_TXT_SH="echo -e \"[req]\ndistinguished_name = req_distinguished_name\nreq_extensions = v3_req\n\n[req_distinguished_name]\ncommonName = TypeCommonNameHere\n\n[v3_req]\nsubjectAltName = @alt_names\n\n[alt_names]\nIP.1 = 127.0.0.1\nDNS.1 = localhost\n$IP_STR$HOSTNAME_STR\" > server-cert.txt"
        89. makeCert $SERVER_CERT_TXT "$SERVER_CERT_TXT_SH"
        90. # 创建server.csr
        91. SERVER_CSR=$DOCKER_CERT_PATH/server.csr
        92. SERVER_CSR_SH="openssl req -subj \"/CN=$COMMON_NAME\" -passin \"pass:$PASSWORD\" -new -key server-key-tmp.pem -out server.csr -config server-cert.txt"
        93. makeCert $SERVER_CSR "$SERVER_CSR_SH"
        94. # 创建server-cert.pem
        95. SERVER_CERT_PEM=$DOCKER_CERT_PATH/server-cert.pem
        96. SERVER_CERT_PEM_SH="openssl x509 -req -passin \"pass:$PASSWORD\" -days $VALID_DAYS -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem -extensions v3_req -extfile server-cert.txt"
        97. makeCert $SERVER_CERT_PEM "$SERVER_CERT_PEM_SH"
        98. # 创建key-tmp.pem
        99. KEY_TMP_PEM=$DOCKER_CERT_PATH/key-tmp.pem
        100. KEY_TMP_PEM_SH="openssl genrsa -des3 -passout \"pass:$PASSWORD\" -out key-tmp.pem 2048"
        101. makeCert $KEY_TMP_PEM "$KEY_TMP_PEM_SH"
        102. # 创建client.csr
        103. CLIENT_CSR=$DOCKER_CERT_PATH/client.csr
        104. CLIENT_CSR_SH="openssl req -passin \"pass:$PASSWORD\" -subj '/CN=client' -new -key key-tmp.pem -out client.csr"
        105. makeCert $CLIENT_CSR "$CLIENT_CSR_SH"
        106. # 创建extfile.cnf
        107. EXTFILE_CNF=$DOCKER_CERT_PATH/extfile.cnf
        108. EXTFILE_CNF_SH="echo extendedKeyUsage = clientAuth > extfile.cnf"
        109. makeCert $EXTFILE_CNF "$EXTFILE_CNF_SH"
        110. # 创建cert.pem
        111. CERT_PEM=$DOCKER_CERT_PATH/cert.pem
        112. CERT_PEM_SH="openssl x509 -req -passin \"pass:$PASSWORD\" -days $VALID_DAYS -in client.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf"
        113. makeCert $CERT_PEM "$CERT_PEM_SH"
        114. # 创建server-key.pem
        115. SERVER_KEY_PEM=$DOCKER_CERT_PATH/server-key.pem
        116. SERVER_KEY_PEM_SH="openssl rsa -in server-key-tmp.pem -passin \"pass:$PASSWORD\" -out server-key.pem"
        117. makeCert $SERVER_KEY_PEM "$SERVER_KEY_PEM_SH"
        118. # 创建key.pem
        119. KEY_PEM=$DOCKER_CERT_PATH/key.pem
        120. KEY_PEM_SH="openssl rsa -in key-tmp.pem -passin \"pass:$PASSWORD\" -out key.pem"
        121. makeCert $KEY_PEM "$KEY_PEM_SH"
        122. echo "------生成证书结束------"
        123. echo ""

        这些命令可以将需要的证书都生成出来,其中我使用了 server-key-tmp.pem 和 key-tmp.pem 两个临时文件,主要是为了方便调用创建函数,当然也可以按照官方文档中的形式。
        执行效果:

      • 配置docker服务:使用官方文档中的形式配置,我测试未生效,

        查阅资料,找到另一种配置方式,测试有效。
        配置 /lib/systemd/system/docker.service 文件,对 ExecStart= 这一行进行配置,添加官方提供的配置项中的字符串:
         -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=/root/.docker/server-cert.pem --tlskey=/root/.docker/server-key.pem --tlscacert=/root/.docker/ca.pem
        指定在docker上看到的三个tls配置
        修改 /lib/systemd/system/docker.service 文件,不过这里又存在一个问题,最早的时候,我是根据菜鸟教程的安装步骤来安装的docker,安装的docker是社区版引擎,与直接使用yum安装的docker配置文件有所不同。
        社区版docker配置文件:

        yum版docker配置文件:

        很明显可以看到社区版docker的配置文件关键配置只有一行,而yum版的docker则有多行。所以欲使用脚本完成一键配置,需要区分这两种情况。
        1. # 修改配置文件
        2. echo "------开始配置------"
        3. # 需要分开匹配,社区版的也就是用菜鸟教程安装的,一种是yum装的,配置文件内容不一致
        4. # yum版存在多行
        5. EXECSTART_NUM=`sed '/^\[Service\]$/,/^\[.*\]$/p' -n $DOCKER_SERVICE_PATH | sed '$d;/^$/d' | sed '/^ExecStart=/,/^[A-Z]/p' -n | sed '$d' | sed '$=' -n`
        6. LINE_NUM=`sed '/^ExecStart=/=' -n $DOCKER_SERVICE_PATH`
        7. TARGET_CONFIG="-H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=$SERVER_CERT_PEM --tlskey=$SERVER_KEY_PEM --tlscacert=$CA_PEM"
        8. if [ $EXECSTART_NUM -eq 1 ]; then
        9. # 处理社区版docker的配置文件,单行形式,获取在文件中的行数
        10. # 判断当前配置中是否包含目标配置,如果不包含,注释当前行,在下一行进行配置,包含则提示已存在,请核对
        11. CONFIGURED=`sed "$LINE_NUM p" -n $DOCKER_SERVICE_PATH | sed "\#$TARGET_CONFIG#=" -n`
        12. if [[ $CONFIGURED && $CONFIGURED -gt 0 ]]; then
        13. echo "配置已存在,请核对配置中是否包含 $TARGET_CONFIG"
        14. else
        15. echo "配置不存在,开始进行配置"
        16. OLD_CONFIG=`sed "$LINE_NUM p" -n $DOCKER_SERVICE_PATH`
        17. # 注释之前的配置
        18. sed "$LINE_NUM s/^/#/" -i $DOCKER_SERVICE_PATH
        19. if [ $? -eq 0 ]; then
        20. echo "已注释第 $LINE_NUM 行的原有配置"
        21. else
        22. echo "注释第 $LINE_NUM 的配置失败"
        23. exit 2
        24. fi
        25. # 添加新值
        26. sed "$LINE_NUM a\\$OLD_CONFIG -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=$SERVER_CERT_PEM --tlskey=$SERVER_KEY_PEM --tlscacert=$CA_PEM" -i $DOCKER_SERVICE_PATH
        27. if [ $? -eq 0 ]; then
        28. echo "在第 $((LINE_NUM + 1)) 行增加配置"
        29. else
        30. echo "在第 $((LINE_NUM + 1)) 行增加配置失败"
        31. exit 3
        32. fi
        33. echo "配置成功"
        34. fi
        35. else
        36. # 处理yum在线安装docker的配置文件,多行形式
        37. END_LINE_NUM=`expr $LINE_NUM + $EXECSTART_NUM - 1`
        38. echo "ExecStart配置项开始行号:$LINE_NUM,结束行号:$END_LINE_NUM"
        39. # 判断是否已经配置
        40. CONFIGURED=`sed "$LINE_NUM,$END_LINE_NUM p" -n $DOCKER_SERVICE_PATH | sed "\#$TARGET_CONFIG#=" -n`
        41. if [[ $CONFIGURED && $CONFIGURED -gt 0 ]]; then
        42. echo "配置已存在,请核对配置中是否包含 $TARGET_CONFIG"
        43. else
        44. echo "配置不存在,开始进行配置"
        45. # 在原配置下一行,拷贝原配置一份,注释原配置,将证书配置添加于新配置处。
        46. OLD_CONFIG=`sed "$LINE_NUM,$END_LINE_NUM p" -n $DOCKER_SERVICE_PATH`
        47. sed "$LINE_NUM,$END_LINE_NUM s/^/#/" -i $DOCKER_SERVICE_PATH
        48. if [ $? -eq 0 ]; then
        49. echo "已注释 $LINE_NUM 行 到 $END_LINE_NUM 行的原有配置"
        50. else
        51. echo "注释 $LINE_NUM 行 到 $END_LINE_NUM 行的配置失败"
        52. exit 4
        53. fi
        54. sed "$END_LINE_NUM a\\$OLD_CONFIG -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=$SERVER_CERT_PEM --tlskey=$SERVER_KEY_PEM --tlscacert=$CA_PEM" -i $DOCKER_SERVICE_PATH \
        55. && sed "$((END_LINE_NUM + 1)), $((END_LINE_NUM + $EXECSTART_NUM - 1)) s/$/\\\/" -i $DOCKER_SERVICE_PATH
        56. if [ $? -eq 0 ]; then
        57. echo "在第 $((END_LINE_NUM + 1)) 行增加配置 $EXECSTART_NUM 行"
        58. else
        59. echo "在第 $((END_LINE_NUM + 1)) 行增加配置失败"
        60. exit 5
        61. fi
        62. echo "配置成功"
        63. fi
        64. fi
        65. echo "------配置结束------"
        66. echo ""

        这里的脚本是承接上面生成证书的脚本。

      • 重启docker服务:
        1. systemctl daemon-reload
        2. systemctl restart docker

         

      • 测试:可以使用官方提供的测试tcp的命令来测试。



        完整的脚本:
        1. #!/bin/bash
        2. # 创建docker认证所需证书,统一放置在/root/.docker目录下
        3. # 证书有效期
        4. VALID_YEARS=10
        5. # 证书存放路径
        6. DOCKER_CERT_PATH=/root/.docker
        7. # docker.service配置文件路径
        8. DOCKER_SERVICE_PATH=/lib/systemd/system/docker.service
        9. # 证书认证密码
        10. PASSWORD=123456
        11. VALID_DAYS=$((VALID_YEARS * 365))
        12. COUNTRY=CN
        13. STATE=BJ
        14. COMMON_NAME=localhost
        15. # 根据网卡名称获取ip地址
        16. function getIP() {
        17. # /sys/class/net 目录下存储了所有网卡信息,子目录均为网卡名,
        18. # /sys/devices/virtual/net/ 目录下存储了所有的虚拟网卡名
        19. NETWORK_CARD_NAME=`ls /sys/class/net | grep -v "\`ls /sys/devices/virtual/net/\`"`
        20. for net_name in $NETWORK_CARD_NAME
        21. do
        22. possible_ip=`ip a | sed "/$net_name$/p" -n | awk '{print $2}'| awk -F/ '{print$1}'`
        23. if [ $possible_ip ]; then
        24. echo $possible_ip
        25. fi
        26. done
        27. }
        28. # 拼接ip字符串
        29. function getIPStr() {
        30. ix=1
        31. for ip in `getIP`
        32. do
        33. let ix+=1
        34. echo "IP.$ix = $ip\n"
        35. done
        36. }
        37. # 主机的ip字符串
        38. IP_STR=$(echo `getIPStr` | sed 's/\\n\s/\\n/g')
        39. HOSTNAME_STR="DNS.2 = `hostname`"
        40. echo -e "本机ip为:\n`getIP`\nhostname为:`hostname`"
        41. # 定义创建证书函数,第一个参数是文件名,第二个参数是创建语句
        42. function makeCert() {
        43. if [ -f "$1" ]; then
        44. echo "$1 已存在,跳过"
        45. else
        46. # 执行命令并丢弃输出
        47. eval $2 &>> /dev/null
        48. if [ $? -ne 0 ]; then
        49. echo "$1 创建失败"
        50. exit 1
        51. else
        52. echo "$1 创建成功"
        53. # 修改权限为只读
        54. PERM_NUM=`stat -c %a $1`
        55. if [ $PERM_NUM -ne 440 ]; then
        56. chmod 440 $1
        57. echo "========== 修改$1权限为只读成功"
        58. fi
        59. fi
        60. fi
        61. echo ""
        62. }
        63. echo "------开始生成证书------"
        64. # 创建证书存放路径
        65. if [ -d $DOCKER_CERT_PATH ]; then
        66. echo "$DOCKER_CERT_PATH 已存在,跳过"
        67. else
        68. mkdir $DOCKER_CERT_PATH
        69. echo "$DOCKER_CERT_PATH 创建成功"
        70. fi
        71. cd $DOCKER_CERT_PATH
        72. # 创建ca.srl
        73. CA_SRL=$DOCKER_CERT_PATH/ca.srl
        74. CA_SRL_SH="echo 01 > ca.srl"
        75. makeCert $CA_SRL "$CA_SRL_SH"
        76. # 创建ca-key.pem
        77. CA_KEY_PEM=$DOCKER_CERT_PATH/ca-key.pem
        78. CA_KEY_PEM_SH="openssl genrsa -des3 -passout \"pass:$PASSWORD\" -out ca-key.pem 2048"
        79. makeCert $CA_KEY_PEM "$CA_KEY_PEM_SH"
        80. # 创建ca.pem
        81. CA_PEM=$DOCKER_CERT_PATH/ca.pem
        82. CA_PEM_SH="openssl req -new -x509 -days $VALID_DAYS -key ca-key.pem -out ca.pem -passin \"pass:$PASSWORD\" -subj \"/C=$COUNTRY/ST=$STATE\""
        83. makeCert $CA_PEM "$CA_PEM_SH"
        84. # 创建server-key-tmp.pem
        85. SERVER_KEY_TMP_PEM=$DOCKER_CERT_PATH/server-key-tmp.pem
        86. SERVER_KEY_TMP_PEM_SH="openssl genrsa -des3 -passout \"pass:$PASSWORD\" -out server-key-tmp.pem 2048"
        87. makeCert $SERVER_KEY_TMP_PEM "$SERVER_KEY_TMP_PEM_SH"
        88. # 创建服务端配置文件server-cert.txt
        89. SERVER_CERT_TXT=$DOCKER_CERT_PATH/server-cert.txt
        90. SERVER_CERT_TXT_SH="echo -e \"[req]\ndistinguished_name = req_distinguished_name\nreq_extensions = v3_req\n\n[req_distinguished_name]\ncommonName = TypeCommonNameHere\n\n[v3_req]\nsubjectAltName = @alt_names\n\n[alt_names]\nIP.1 = 127.0.0.1\nDNS.1 = localhost\n$IP_STR$HOSTNAME_STR\" > server-cert.txt"
        91. makeCert $SERVER_CERT_TXT "$SERVER_CERT_TXT_SH"
        92. # 创建server.csr
        93. SERVER_CSR=$DOCKER_CERT_PATH/server.csr
        94. SERVER_CSR_SH="openssl req -subj \"/CN=$COMMON_NAME\" -passin \"pass:$PASSWORD\" -new -key server-key-tmp.pem -out server.csr -config server-cert.txt"
        95. makeCert $SERVER_CSR "$SERVER_CSR_SH"
        96. # 创建server-cert.pem
        97. SERVER_CERT_PEM=$DOCKER_CERT_PATH/server-cert.pem
        98. SERVER_CERT_PEM_SH="openssl x509 -req -passin \"pass:$PASSWORD\" -days $VALID_DAYS -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem -extensions v3_req -extfile server-cert.txt"
        99. makeCert $SERVER_CERT_PEM "$SERVER_CERT_PEM_SH"
        100. # 创建key-tmp.pem
        101. KEY_TMP_PEM=$DOCKER_CERT_PATH/key-tmp.pem
        102. KEY_TMP_PEM_SH="openssl genrsa -des3 -passout \"pass:$PASSWORD\" -out key-tmp.pem 2048"
        103. makeCert $KEY_TMP_PEM "$KEY_TMP_PEM_SH"
        104. # 创建client.csr
        105. CLIENT_CSR=$DOCKER_CERT_PATH/client.csr
        106. CLIENT_CSR_SH="openssl req -passin \"pass:$PASSWORD\" -subj '/CN=client' -new -key key-tmp.pem -out client.csr"
        107. makeCert $CLIENT_CSR "$CLIENT_CSR_SH"
        108. # 创建extfile.cnf
        109. EXTFILE_CNF=$DOCKER_CERT_PATH/extfile.cnf
        110. EXTFILE_CNF_SH="echo extendedKeyUsage = clientAuth > extfile.cnf"
        111. makeCert $EXTFILE_CNF "$EXTFILE_CNF_SH"
        112. # 创建cert.pem
        113. CERT_PEM=$DOCKER_CERT_PATH/cert.pem
        114. CERT_PEM_SH="openssl x509 -req -passin \"pass:$PASSWORD\" -days $VALID_DAYS -in client.csr -CA ca.pem -CAkey ca-key.pem -out cert.pem -extfile extfile.cnf"
        115. makeCert $CERT_PEM "$CERT_PEM_SH"
        116. # 创建server-key.pem
        117. SERVER_KEY_PEM=$DOCKER_CERT_PATH/server-key.pem
        118. SERVER_KEY_PEM_SH="openssl rsa -in server-key-tmp.pem -passin \"pass:$PASSWORD\" -out server-key.pem"
        119. makeCert $SERVER_KEY_PEM "$SERVER_KEY_PEM_SH"
        120. # 创建key.pem
        121. KEY_PEM=$DOCKER_CERT_PATH/key.pem
        122. KEY_PEM_SH="openssl rsa -in key-tmp.pem -passin \"pass:$PASSWORD\" -out key.pem"
        123. makeCert $KEY_PEM "$KEY_PEM_SH"
        124. echo "------生成证书结束------"
        125. echo ""
        126. # 修改配置文件
        127. echo "------开始配置------"
        128. # 需要分开匹配,社区版的也就是用菜鸟教程安装的,一种是yum装的,配置文件内容不一致
        129. # yum版存在多行
        130. EXECSTART_NUM=`sed '/^\[Service\]$/,/^\[.*\]$/p' -n $DOCKER_SERVICE_PATH | sed '$d;/^$/d' | sed '/^ExecStart=/,/^[A-Z]/p' -n | sed '$d' | sed '$=' -n`
        131. LINE_NUM=`sed '/^ExecStart=/=' -n $DOCKER_SERVICE_PATH`
        132. TARGET_CONFIG="-H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=$SERVER_CERT_PEM --tlskey=$SERVER_KEY_PEM --tlscacert=$CA_PEM"
        133. if [ $EXECSTART_NUM -eq 1 ]; then
        134. # 处理社区版docker的配置文件,单行形式,获取在文件中的行数
        135. # 判断当前配置中是否包含目标配置,如果不包含,注释当前行,在下一行进行配置,包含则提示已存在,请核对
        136. CONFIGURED=`sed "$LINE_NUM p" -n $DOCKER_SERVICE_PATH | sed "\#$TARGET_CONFIG#=" -n`
        137. if [[ $CONFIGURED && $CONFIGURED -gt 0 ]]; then
        138. echo "配置已存在,请核对配置中是否包含 $TARGET_CONFIG"
        139. else
        140. echo "配置不存在,开始进行配置"
        141. OLD_CONFIG=`sed "$LINE_NUM p" -n $DOCKER_SERVICE_PATH`
        142. # 注释之前的配置
        143. sed "$LINE_NUM s/^/#/" -i $DOCKER_SERVICE_PATH
        144. if [ $? -eq 0 ]; then
        145. echo "已注释第 $LINE_NUM 行的原有配置"
        146. else
        147. echo "注释第 $LINE_NUM 的配置失败"
        148. exit 2
        149. fi
        150. # 添加新值
        151. sed "$LINE_NUM a\\$OLD_CONFIG -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=$SERVER_CERT_PEM --tlskey=$SERVER_KEY_PEM --tlscacert=$CA_PEM" -i $DOCKER_SERVICE_PATH
        152. if [ $? -eq 0 ]; then
        153. echo "在第 $((LINE_NUM + 1)) 行增加配置"
        154. else
        155. echo "在第 $((LINE_NUM + 1)) 行增加配置失败"
        156. exit 3
        157. fi
        158. echo "配置成功"
        159. fi
        160. else
        161. # 处理yum在线安装docker的配置文件,多行形式
        162. END_LINE_NUM=`expr $LINE_NUM + $EXECSTART_NUM - 1`
        163. echo "ExecStart配置项开始行号:$LINE_NUM,结束行号:$END_LINE_NUM"
        164. # 判断是否已经配置
        165. CONFIGURED=`sed "$LINE_NUM,$END_LINE_NUM p" -n $DOCKER_SERVICE_PATH | sed "\#$TARGET_CONFIG#=" -n`
        166. if [[ $CONFIGURED && $CONFIGURED -gt 0 ]]; then
        167. echo "配置已存在,请核对配置中是否包含 $TARGET_CONFIG"
        168. else
        169. echo "配置不存在,开始进行配置"
        170. # 在原配置下一行,拷贝原配置一份,注释原配置,将证书配置添加于新配置处。
        171. OLD_CONFIG=`sed "$LINE_NUM,$END_LINE_NUM p" -n $DOCKER_SERVICE_PATH`
        172. sed "$LINE_NUM,$END_LINE_NUM s/^/#/" -i $DOCKER_SERVICE_PATH
        173. if [ $? -eq 0 ]; then
        174. echo "已注释 $LINE_NUM 行 到 $END_LINE_NUM 行的原有配置"
        175. else
        176. echo "注释 $LINE_NUM 行 到 $END_LINE_NUM 行的配置失败"
        177. exit 4
        178. fi
        179. sed "$END_LINE_NUM a\\$OLD_CONFIG -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock -D --tlsverify --tlscert=$SERVER_CERT_PEM --tlskey=$SERVER_KEY_PEM --tlscacert=$CA_PEM" -i $DOCKER_SERVICE_PATH \
        180. && sed "$((END_LINE_NUM + 1)), $((END_LINE_NUM + $EXECSTART_NUM - 1)) s/$/\\\/" -i $DOCKER_SERVICE_PATH
        181. if [ $? -eq 0 ]; then
        182. echo "在第 $((END_LINE_NUM + 1)) 行增加配置 $EXECSTART_NUM 行"
        183. else
        184. echo "在第 $((END_LINE_NUM + 1)) 行增加配置失败"
        185. exit 5
        186. fi
        187. echo "配置成功"
        188. fi
        189. fi
        190. echo "------配置结束------"
        191. echo ""
        192. # 打包客户端证书ca.pem cert.pem key.pem
        193. echo "------开始打包客户端证书------"
        194. TARBALL_NAME="`hostname`-client-certs.tar.gz"
        195. tar -czvf $TARBALL_NAME ca.pem key.pem cert.pem
        196. echo "客户端证书文件已经打包 ==> `pwd`/$TARBALL_NAME"
        197. echo "------打包客户端证书结束------"
        198. echo ""
        199. # 重启docker
        200. # 如果信任脚本,可以放开以下语句
        201. echo "------重启docker服务------"
        202. systemctl daemon-reload && systemctl restart docker
        203. if [ $? -eq 0 ]; then
        204. echo "重启成功"
        205. else
        206. echo "重启失败,请查看"
        207. exit 6
        208. fi
        209. echo "------重启完成------"
        210. echo ""
        211. # 处理防火墙端口
        212. echo "------处理防火墙端口开始------"
        213. firewall-cmd --state &> /dev/null
        214. if [ $? -eq 0 ]; then
        215. echo "防火墙开启"
        216. firewall-cmd --zone=public --query-port=2376/tcp &> /dev/null
        217. if [ $? -eq 0 ]; then
        218. echo "2376端口已开放"
        219. else
        220. firewall-cmd --zone=public --add-port=2376/tcp --permanent &> /dev/null \
        221. && firewall-cmd --reload &> /dev/null
        222. if [ $? -eq 0 ]; then
        223. echo "成功开放2376 tcp端口"
        224. else
        225. echo "2376端口开放失败"
        226. exit 7
        227. fi
        228. fi
        229. else
        230. echo "防火墙已关闭,2376端口可用"
        231. fi
        232. echo "------处理防火墙端口结束------"

         

    • java代码连接:在上面配置好之后,可以按照官方文档中给的示例进行连接。首先需要将客户端证书拷贝到本地目录,然后在代码中配置即可。
      1. private static DockerClient dockerClient;
      2. public static DockerClient getDockerClient(){
      3. DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
      4. .withDockerHost("tcp://centos1:2376")
      5. .withDockerTlsVerify(true)
      6. .withDockerCertPath("D:\\cert\\cert1")
      7. .build();
      8. ApacheDockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
      9. .dockerHost(config.getDockerHost())
      10. .sslConfig(config.getSSLConfig())
      11. .build();
      12. dockerClient = DockerClientImpl.getInstance(config, httpClient);
      13. return dockerClient;
      14. }
      15. public static void main(String[] args) throws IOException {
      16. dockerClient = getDockerClient();
      17. getImages();
      18. }
      19. public static void getImages() {
      20. List<Image> images = dockerClient.listImagesCmd().exec();
      21. System.out.println("------------------展示镜像列表开始---------------------");
      22. images.forEach(System.out::println);
      23. System.out.println("------------------展示镜像列表结束---------------------");
      24. }
      使用maven导入依赖即可:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/411867
推荐阅读
相关标签
  

闽ICP备14008679号