{"id":15321078,"url":"https://github.com/eryajf/docker_learn","last_synced_at":"2025-04-14T04:23:12.435Z","repository":{"id":49392721,"uuid":"154657402","full_name":"eryajf/docker_learn","owner":"eryajf","description":"学习docker过程中所用到的一些东东","archived":false,"fork":false,"pushed_at":"2018-10-28T12:15:03.000Z","size":34326,"stargazers_count":14,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T18:16:25.796Z","etag":null,"topics":["dockerfile","eryajf"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eryajf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-25T11:11:58.000Z","updated_at":"2025-03-16T07:49:14.000Z","dependencies_parsed_at":"2022-09-12T17:10:29.051Z","dependency_job_id":null,"html_url":"https://github.com/eryajf/docker_learn","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eryajf%2Fdocker_learn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eryajf%2Fdocker_learn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eryajf%2Fdocker_learn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eryajf%2Fdocker_learn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eryajf","download_url":"https://codeload.github.com/eryajf/docker_learn/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248819922,"owners_count":21166568,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dockerfile","eryajf"],"created_at":"2024-10-01T09:09:51.635Z","updated_at":"2025-04-14T04:23:12.406Z","avatar_url":"https://github.com/eryajf.png","language":"Dockerfile","funding_links":[],"categories":["Dockerfile"],"sub_categories":[],"readme":"要想使用docker完成一些项目的构建，或者学习，首先需要自己来构建一些基础的镜像，以便于使用。\n\n## 1，构建CentOS7.4。\n\n需要四个文件。\n\n```\n[root@localhost centos7]$ls\naliyun-epel.repo  aliyun-mirror.repo  Dockerfile  supervisord.conf\n```\n\n### 1，Dockerfile。\n\n```\n#\n# Dockerizing CentOS7: Dockerfile for building CentOS images\n#\n#需要一个基础镜像，这里从国内的daocloud下载，速度比较快。\nFROM       daocloud.io/library/centos:centos7.4.1708\n\n#维护者\nMAINTAINER eryajf \u003cLinuxlql@163.com\u003e\n\n#设置一个时区的环境变量\nENV TZ \"Asia/Shanghai\"\n\n#虚拟终端\nENV TERM xterm\n\n#dockerfile中有2条命令可以复制文件，1.COPY 2.ADD， ADD比COPY多2个功能，可以写成连接 直接COPY到container，如果是压缩文件，add能自动解压\nADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo\nADD aliyun-epel.repo /etc/yum.repos.d/epel.repo\n\nRUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man \u0026\u0026 \\\n    yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel \u0026\u0026 \\\n    yum install -y --enablerepo=epel pwgen python-pip python-setuptools.noarch lrzsz ntp docker-client \u0026\u0026 \\\n    yum clean all\n\n#配置supervisor 进程管理工具，运行单个进程可以不使用\nRUN easy_install supervisor \u0026\u0026 \\\n    mkdir -m 755 -p /etc/supervisor \u0026\u0026 \\\n    mkdir -m 755 /etc/supervisor/conf.d\nADD supervisord.conf /etc/supervisor/supervisord.conf\n\nEXPOSE 22\n\nENTRYPOINT [\"/usr/bin/supervisord\", \"-n\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n```\n\n### 2，两个yum源。\n\n`其一：`\n\n```\n[root@localhost centos7]$cat aliyun-epel.repo\n[epel]\nname=Extra Packages for Enterprise Linux 7 - $basearch\nbaseurl=http://mirrors.aliyun.com/epel/7/$basearch\n#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7\u0026arch=$basearch\nfailovermethod=priority\nenabled=1\ngpgcheck=0\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\n\n[epel-debuginfo]\nname=Extra Packages for Enterprise Linux 7 - $basearch - Debug\nbaseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug\n#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7\u0026arch=$basearch\nfailovermethod=priority\nenabled=0\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\ngpgcheck=0\n\n[epel-source]\nname=Extra Packages for Enterprise Linux 7 - $basearch - Source\nbaseurl=http://mirrors.aliyun.com/epel/7/SRPMS\n#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7\u0026arch=$basearch\nfailovermethod=priority\nenabled=0\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7\ngpgcheck=0\n```\n\n`其二：`\n\n```\n[root@localhost centos7]$cat aliyun-mirror.repo\n# CentOS-Base.repo\n#\n# The mirror system uses the connecting IP address of the client and the\n# update status of each mirror to pick mirrors that are updated to and\n# geographically close to the client.  You should use this for CentOS updates\n# unless you are manually picking other mirrors.\n#\n# If the mirrorlist= does not work for you, as a fall back you can try the\n# remarked out baseurl= line instead.\n#\n#\n\n[base]\nname=CentOS-$releasever - Base - mirrors.aliyun.com\nfailovermethod=priority\nbaseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/\n#mirrorlist=http://mirrorlist.centos.org/?release=$releasever\u0026arch=$basearch\u0026repo=os\ngpgcheck=1\ngpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n#released updates\n[updates]\nname=CentOS-$releasever - Updates - mirrors.aliyun.com\nfailovermethod=priority\nbaseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/\n#mirrorlist=http://mirrorlist.centos.org/?release=$releasever\u0026arch=$basearch\u0026repo=updates\ngpgcheck=1\ngpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n#additional packages that may be useful\n[extras]\nname=CentOS-$releasever - Extras - mirrors.aliyun.com\nfailovermethod=priority\nbaseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/\n#mirrorlist=http://mirrorlist.centos.org/?release=$releasever\u0026arch=$basearch\u0026repo=extras\ngpgcheck=1\ngpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n#additional packages that extend functionality of existing packages\n[centosplus]\nname=CentOS-$releasever - Plus - mirrors.aliyun.com\nfailovermethod=priority\nbaseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/\n#mirrorlist=http://mirrorlist.centos.org/?release=$releasever\u0026arch=$basearch\u0026repo=centosplus\ngpgcheck=1\nenabled=0\ngpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n\n#contrib - packages by Centos Users\n[contrib]\nname=CentOS-$releasever - Contrib - mirrors.aliyun.com\nfailovermethod=priority\nbaseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/\n#mirrorlist=http://mirrorlist.centos.org/?release=$releasever\u0026arch=$basearch\u0026repo=contrib\ngpgcheck=1\nenabled=0\ngpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7\n```\n\n### 3，supervisor配置文件。\n\n```\n[root@localhost centos7]$cat supervisord.conf\n[unix_http_server]\nfile=/tmp/supervisor.sock   ; the path to the socket file\n\n[supervisord]\nlogfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log\nlogfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB\nlogfile_backups=10           ; # of main logfile backups; 0 means none, default 10\nloglevel=info                ; log level; default info; others: debug,warn,trace\npidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid\nnodaemon=false               ; start in foreground if true; default false\nminfds=1024                  ; min. avail startup file descriptors; default 1024\nminprocs=200                 ; min. avail process descriptors;default 200\n\n[rpcinterface:supervisor]\nsupervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface\n\n[supervisorctl]\nserverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket\n\n[include]\nfiles = /etc/supervisor/conf.d/*.ini\n```\n\n过多关于supervisor配置的问题，这里就不多做解释了。\n\n开始构建。\n\n\tdocker build -t idocker.io/eryajf/centos:7.4 .\n\n构建的时候，就将名称定义为自己私服地址。\n\n构建完成查看一下：\n\n```\n[root@localhost ~]$docker images\nREPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE\nidocker.io/eryajf/centos   7.4                 13fb619afd8c        21 hours ago        519 MB\n```\n\n之后可以push到自己的私服当中。\n\n\tdocker push idocker.io/eryajf/centos:7.4\n\n启动：\n\n\tdocker run -d --name centos idocker.io/eryajf/centos:7.4\n\n## 2，构建jdk基础镜像。\n\n这个镜像事实上在dockerhub上有官方发布的，只不过其底层镜像都是基于deebin的，并不适合日常使用，因此这里就自己来制作一下。\n\n需要两个文件。\n\n```\n[root@localhost jdk8]$ls\nDockerfile  jdk.tar.gz\n```\n\n### 1，Dockerfile。\n\n```\nFROM       idocker.io/eryajf/centos:7.4\nMAINTAINER eryajf \u003cLinuxlql@163.com\u003e\n\n# Install jdk\nADD  jdk.tar.gz   /usr/local/\n\nENV JAVA_HOME /usr/local/jdk1.8.0_144\nENV PATH $PATH:$JAVA_HOME/bin\n```\n\n剩下那个是jdk的包，可以在[官网](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html \"官网\")进行下载。\n\n构建。\n\n\tdocker build -t idocker.io/eryajf/jdk:1.8 .\n\n启动验证。\n\n```\n[root@localhost ~]$docker run -d --name jdk idocker.io/eryajf/jdk:1.8\n17c9180d892f2406bb256113ec241843ac1e18f7e20aeb52de67ad8eaef2c724\n[root@localhost ~]$docker ps\nCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES\n17c9180d892f        36a4fcd3d962        \"/usr/bin/supervis...\"   2 seconds ago       Up 1 second         22/tcp              jdk\n[root@localhost ~]$docker exec -it jdk bash\n[root@17c9180d892f /]# java -version\njava version \"1.8.0_144\"\nJava(TM) SE Runtime Environment (build 1.8.0_144-b01)\nJava HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)\n```\n\n## 3，构建tomcat镜像。\n\n需要用到如下三个文件。\n\n```\n[root@localhost tomcat]$ls\nDockerfile  tomcat.ini  tomcat.tar.gz\n```\n\n### 1，Dockerfile。\n\n```\n[root@localhost tomcat]$cat Dockerfile\nFROM       idocker.io/eryajf/jdk:1.8\nMAINTAINER eryajf \u003cLinuxlql@163.com\u003e\n\n\n# Install jdk\nADD  tomcat.tar.gz   /usr/local/\nADD  tomcat.ini /etc/supervisor/conf.d\n```\n\n### 2，tomcat.ini。\n\n```\n[root@localhost tomcat]$cat tomcat.ini\n[program:tomcat]\nenvironment=JAVA_HOME=\"/usr/local/jdk1.8.0_144\",JAVA_BIN=\"/usr/local/jdk1.8.0_144/bin\"\ncommand=/usr/local/tomcat/bin/catalina.sh run\nautostart=true\nautorestart=true\nstartsecs=60\npriority=1\nstopasgroup=true\nkillasgroup=true\nstderr_logfile=/usr/local/tomcat/logs/catalina.out\n```\n\n构建镜像。\n\n\tdocker build -t idocker.io/eryajf/tomcat:8.5 .\n\n启动。\n\n\tdocker run -d -p 8080:8080 --name tomcat idocker.io/eryajf/tomcat:8.5\n\n## 4，构建Jenkins镜像。\n\n之前使用过从dockerhub上下载的Jenkins官方发布的镜像，然而那些镜像的底层也都不是centos系统的，因此打算自己制作一个Jenkins镜像，以便于使用。\n\n所需原料如下：\n\n```\n[root@localhost jenkins]$ls\nDockerfile  maven.tar.gz  ROOT.war\n```\n\n其中maven是配置好了的，ROOT.war是Jenkins的包。\n\n`Dockerfile：`\n\n```\n[root@localhost jenkins]$cat Dockerfile\nFROM       idocker.io/eryajf/tomcat:8.5\nMAINTAINER eryajf \u003cLinuxlql@163.com\u003e\n\nADD  maven.tar.gz /usr/local/\nCOPY ROOT.war /usr/local/tomcat/webapps/\n\nENV JAVA_HOME /usr/local/jdk1.8.0_144\nENV MAVEN_HOME=/usr/local/maven\nENV JENKINS_HOME=/home/.jenkins_home\nENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin\n```\n\n构建。\n\n\tdocker build -t idocker.io/eryajf/jenkins:2.138 .\n\n启动验证。\n\n\tdocker run -d -p 8080:8080 --name jenkins idocker.io/eryajf/jenkins:2.138\n\n这种启动方式只能够正常的将Jenkins启动起来，但是如果想要继续利用Jenkins进行持续集成，那么就需要将宿主机当中的docker命令挂载到容器当中，这时可以使用如下命令：\n\n\n```\ndocker run -d -p 8080:8080 --name jenkins -v /home/.jenkins_home:/home/.jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /etc/sysconfig/docker:/etc/sysconfig/docker  idocker.io/eryajf/jenkins:2.138\n```\n\n启动之后。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feryajf%2Fdocker_learn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feryajf%2Fdocker_learn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feryajf%2Fdocker_learn/lists"}