Jenkins容器中安装Python3

浅谈容器内安装 python3 方案

  1. 将 python3 挂载到容器工作目录上
  2. 直接复制 python3 目录到工作目录上
  3. jenkins 容器内安装 python3

但经过尝试后,方案1和2都以失败告终,各种乱七八糟的报错,原因是宿主机和容器中的系统有差异,会缺少些配置,因此不推荐方案1和2,接下来我们选择方案3。

查看容器内的系统

  • 以root进入jenkins容器:docker exec -it -u root 容器id|容器名 /bin/bash
  • cat /etc/issue查看系统类型
1
2
3
4
[root@iZ2ze0mc5577fn814ewhb8Z ~]# docker exec -it -u root cca651588eb3 /bin/bash
root@cca651588eb3:/# cat /etc/issue
Debian GNU/Linux 9 \n \l

这是我们看到容器中的系统是Debian(不是Ubuntu、也不是CentOS,虽然我们的宿主机是CentOS),因此在容器中不能使用yum,但是可以使用apt-get。注意:一定要是root进入容器,否则在执行apt-get会告诉你没有权限。

容器中安装Python3

  1. 更新apt-get : apt-get update

    1
    2
    3
    4
    5
    6
    root@cca651588eb3:/# apt-get update
    Get:1 http://security.debian.org/debian-security stretch/updates InRelease [53.0 kB]
    Get:2 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [656 kB]
    Ign:3 http://deb.debian.org/debian stretch InRelease
    Get:5 http://deb.debian.org/debian stretch-updates InRelease [93.6 kB]
    ……
  1. 安装依赖包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    apt-get install build-essential -y

    apt-get install libncurses5-dev libncursesw5-dev libreadline6-dev -y

    apt-get install libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev -y

    apt-get install libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev -y

    apt-get install libssl-dev openssl -y
  1. 在/var/jenkins_home目录下创建python3的安装目录

    1
    2
    root@cca651588eb3:/# cd /var/jenkins_home/
    root@cca651588eb3:/var/jenkins_home# mkdir python3
  1. 下载python3.9.1版本的压缩包:wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    root@cca651588eb3:/var/jenkins_home# mkdir python3
    root@cca651588eb3:/var/jenkins_home# cd python3/
    root@cca651588eb3:/var/jenkins_home/python3# wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz
    --2021-02-20 06:06:35-- https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz
    Resolving www.python.org (www.python.org)... 151.101.228.223, 2a04:4e42:1a::223
    Connecting to www.python.org (www.python.org)|151.101.228.223|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 25372998 (24M) [application/octet-stream]
    Saving to: ‘Python-3.9.1.tgz’

    Python-3.9.1.tgz 47%[===============================> ] 11.59M 31.8KB/s in 12m 2s
    ……
  1. 解压:tar -xvf Python-3.9.1.tgz

    1
    root@cca651588eb3:/var/jenkins_home/python3# tar -xvf Python-3.9.1.tgz
  1. 进入解压后的目录,进行编译安装

    • 配置:./configure --prefix=/var/jenkins_home/python3 --with-ssl 报错缺少依赖包
    • 编译安装:make && make install
    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@cca651588eb3:/var/jenkins_home/python3# cd Python-3.9.1
    root@cca651588eb3:/var/jenkins_home/python3/Python-3.9.1# ./configure --prefix=/var/jenkins_home/python3 --with-ssl
    configure: WARNING: unrecognized options: --with-ssl
    checking build system type... x86_64-pc-linux-gnu
    checking host system type... x86_64-pc-linux-gnu
    ……
    root@cca651588eb3:/var/jenkins_home/python3/Python-3.9.1# make && make install
    gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -I. -I./Include -DPy_BUILD_CORE -o Programs/python.o ./Programs/python.c
    ……
  1. 添加python3软连接

    1
    2
    ln -s /var/jenkins_home/python3/bin/python3.9  /usr/bin/python3
    ln -s /var/jenkins_home/python3/bin/pip3.9 /usr/bin/pip3

将安装Python3的容器打包成镜像

  1. 从容器中创建镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@iZ2ze0mc5577fn814ewhb8Z ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    cca651588eb3 jenkins/jenkins:lts "/sbin/tini -- /usr/…" 4 hours ago Up 4 hours 50000/tcp, 0.0.0.0:8082->8080/tcp jenkins
    [root@iZ2ze0mc5577fn814ewhb8Z ~]# docker commit -a "lvjing" -m "Jenkins install python3" cca651588eb3 jenkins/python3:v1
    sha256:6e361084a78882f6409358b98dec4617a744130d77ad0e05610c4243e7f74ced
    [root@iZ2ze0mc5577fn814ewhb8Z ~]# docker images
    REPOSITORY TAG IMAGE ID CREATED SIZE
    jenkins/python3 v1 6e361084a788 10 seconds ago 929MB
    jenkins/jenkins lts e5599f396096 5 weeks ago 717MB
  1. 打包镜像

    1
    [root@iZ2ze0mc5577fn814ewhb8Z ~]# docker save -o jenkins_python3.tar jenkins/python3:v1

    image-20210220161843372

    打包得到的镜像,可以上传远端,也可以复制到别处,load镜像即可使用。