
一、编写Dockerfileubuntu_18.04:v3要求1、基础镜像ubuntu:18.04。2、替换为国内的安装源比如阿里或163。3、安装openssh-server。4、允许root用户远程登录。5、暴露端口22。6、服务开机自启动。思路先将换源的命令和源网址写道一个脚本上传到到容器执行换源之后进行下载openssh。然后创建/var/run/sshd这个目录/var/run/sshd用于存放ssh服务的运行时数据的目录例如会话信息、认证密钥等是必要的。然后就是需要注释掉/etc/pam.d/sshd这个文件里面的pam_loginuid.so(pam_loginuid.so模块的功能是记录用户登录的UID到/proc/self/loginuid。这通常用于审计和跟踪用户登录活动。容器使用独立的PID命名空间和文件系统命名空间而/proc文件系统通常与宿主机共享或部分隔离。容器内的进程可能无法正确访问宿主机/proc中的资源导致pam_loginuid.so无法写入/proc/self/loginuid。)。需要免密登录的话还需要在宿主机上面创建一份公私钥将公钥上传。最后进入容器的时候需要执行这条命令/usr/sbin/sshd -D1.1操作建议每个dockerfile操作的内容都在同一个目录下面操作mkdir ./dockerfileTest cd dockerfileTest换源脚本#!/bin/bash mv -f /etc/apt/sources.list{,.bak} 2/dev/null cat /etc/apt/sources.list.d/163.list EOF deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse EOF apt update使用sshkeygen生成公私钥对-f表示指定生成到目录-P密钥的密码,-q抑制所有交互提示和非必要输出ssh-keygen -f ./authorized_keys -P -q #这里会生成authorized_keys和authorized_keys.pub文件dockerfile脚本ARG VERSION18.04 FROM ubuntu:${VERSION} MAINTAINER SPIKEailun.sanlifoxmail.com COPY test.sh /root/ RUN chmod x /root/test.sh /root/test.sh \ apt install openssh-server -y \ sed -i /pam_loginuid.so/s/^/# /g /etc/pam.d/sshd \ mkdir -p /var/run/sshd /root/.ssh COPY authorized_keys.pub /root/.ssh/authorized_keys ENTRYPOINT [/usr/sbin/sshd, -D] EXPOSE 22然后创建镜像docker build -t ubuntu/18.04/sshd .1.2测试[rootmaster dockerfile]# docker run -d --name test -p 2333:22 ubuntu/18.04/sshd 622df3788bd4b16e76a265e89f7ba3ad08726949e982c2e9c9ab680b91f39b16 [rootmaster dockerfile]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 622df3788bd4 ubuntu/18.04/sshd /usr/sbin/sshd -D 5 seconds ago Up 4 seconds 0.0.0.0:2333-22/tcp, :::2333-22/tcp testssh登录ssh -i authorized_keys -p 2333 localhost二、编写Dockerfile制作Web应用系统nginx镜像生成镜像名为nginx:v1.1并推送其到私有仓库。具体要求如下1、基于Ubuntu基础镜像2、指定作者为Chinaskill3、安装nginx服务将提供的dest目录传到镜像内并将dest目录内的前端文件复制到nginx的工作目录4、暴露80端口5、设置服务自启动。这个也比较简单同理上nginx启动需要/usr/sbin/nginx -g daemon off让nginx在前台运行2.1操作创建一个工作环境mkdir -p nginxCentos7/dest cd nginxCentos7往dest目录里面写点东西echo This is a test page which from centos/nginx:v1.1 dest/index.html由于容器里面没有wget命令所以这里使用curl进行替换curl -o 目标文件 网址换源脚本vim test.sh#!/bin/bash rm -rf /etc/yum.repos.d/CentOS-Base.repo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tencent.com/repo/centos7_base.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.tencent.com/repo/epel-7.repo yum clean all yum makecacheDockerfile脚本ARG VERSION7 FROM centos:${VERSION} MAINTAINER Chinaskill COPY test.sh /root/ RUN chmod x /root/test.sh /root/test.sh \ yum install nginx -y COPY dest/ /usr/share/nginx/html/ ENTRYPOINT [/usr/sbin/nginx, -g, daemon off;] EXPOSE 80 4432.2测试docker build -t centos/7/nginx . docker run -d --name centosTest -p 80:80 centos/7/nginx:latest [rootmaster nginxCentos7]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eec8f2dc1276 centos/7/nginx:latest /usr/sbin/nginx -g … 4 seconds ago Up 2 seconds 0.0.0.0:80-80/tcp, :::80-80/tcp, 443/tcp centosTest[rootmaster nginxCentos7]# curl localhostThis is a test page which from centos/nginx:v1.1三、编写Dockerfile制作Redis镜像生成镜像名为redis:v1.1并推送到私有仓库。具体要求如下1、基于centos7基础镜像2、指定作者为Chinaskill3、安装Redis服务暴露6379端口4、设置服务自启动。配置逻辑先换centos7为腾讯源然后yum下载redis。将redis的配置内容上传到容器内部最后启动的时候指定配置文件3.1操作创建一个工作目录mkdir centos7Redis cd centos7Redis换源脚本vim test.sh#!/bin/bash rm -rf /etc/yum.repos.d/CentOS-Base.repo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tencent.com/repo/centos7_base.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.tencent.com/repo/epel-7.repo yum clean all yum makecacheredis.conf配置文件bind 0.0.0.0#监听ipv4地址 port 6379#监听端口 requirepass OPENlab123#客户端登录密码 protected-mode yes daemonize no#非守护进程运行 dir /data#数据目录 appendonly yes save 100 1 maxmemory 1gb maxmemory-policy volatile-lrudockerfile脚本先上传换源脚本然后添加执行权限之后再执行它顺带创建redis数据目录。并下载redis之后将数据目录的权限给到redis用户。将原本的redis.conf进行备份最后上传我们自己的redis配置文件。ARG VERSION7 FROM centos:${VERSION} MAINTAINER SPIKEailun.sanlifoxmail.com COPY test.sh /root/ RUN chmod x /root/test.sh /root/test.sh \ mkdir -p /data \ yum install redis -y \ chown -R redis:redis /data \ mv /etc/redis.conf /etc/redis.conf.bak COPY redis.conf /etc/redis.conf ENTRYPOINT [/usr/bin/redis-server, /etc/redis.conf] EXPOSE 63793.2测试创建容器docker run -d --name centosRedisTest -p 6379:6379 centos7redis/test:latest查看监听端口或者查看日志内容[rootmaster centos7Redis]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9b937600d8b4 centos7redis/test:latest /usr/bin/redis-serv… 5 seconds ago Up 4 seconds 0.0.0.0:6379-6379/tcp, :::6379-6379/tcp centosRedisTest[rootmaster centos7Redis]# netstat -lntup | grep 6379tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 2286490/docker-proxtcp6 0 0 :::6379 :::* LISTEN 2286495/docker-prox正常登录[rootmaster centos7Redis]# redis-cli -h localhost -p 6379 -a OPENlab123给镜像打上tag然后推送到自己搭建的harbor即可搭建Harbor见我的这一篇文章基于Harbor构建docker私有仓库-CSDN博客docker tag centos7redis/test:latest OpenLabTest/openlab/centos7/redis:3.2.12 docker login OpenLabTest#我自己搭建私有Harbor的域名自己写道/etc/hosts文件下的域名解析 docker push OpenLabTest/openlab/centos7/redis:3.2.12四、基于busybox搭建静态httpdBusyBox等轻量级服务器中-f可能表示在前台运行不转为守护进程。BusyBox的httpd中-h可能用于指定服务器的根目录文档根目录因此服务器会从/data/html提供静态文件。busybox和其他的那些系统不一样busybox会自己带有httpd服务。因为busybox适用于嵌入式用于现实页面只能实现简单的静态httpd服务功能BusyBox 内置的 Shell 是ashAlmquist Shell或hush更轻量而非功能更复杂的bash。4.1操作同理上先创建一个工作目录mkdir busyboxTest cd mkdir busyboxTest然后创建一个测试页面echo This is a test page index.htmldockerfile脚本ARG VERSIONlatest FROM busybox:${VERSION} RUN mkdir -p /data/html COPY index.html /data/html/ ENTRYPOINT [/bin/httpd, -f, -h] CMD [/data/html] EXPOSE 80然后构建镜像docker build -t busyboxTest/latest4.2测试运行容器docker run -d --name busyboxyHttp -p 80:80 busyboxTest/latest:latest检查监听端口netstat -lntup | grep 80[rootmaster busyboxTest]# netstat -lntup | grep 80tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2279198/docker-proxtcp6 0 0 :::80 :::* LISTEN 2279203/docker-prox访问本地端口curl localhost[rootmaster busyboxTest]# curl localhostThis is a test page