20260509 Dockerfile案例

一、Dockerfile案例:配置SSH镜像

项目背景:官方下载的centos镜像默认不带ssh,管理起来不方便,自己制作一个带SSH功能的

centos镜像

1.1 创建dockerfile

bash 复制代码
[root@docker ~]# vim centos.ssh.dockerfile
FROM centos:8.4.2105
MAINTAINER gaoqiaodong
RUN minorver=8.4.2105 && \
sed -e "s|^mirrorlist=|#mirrorlist=|g" \
-e 
"s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://m
irrors.aliyun.com/centos-vault/$minorver|g" \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
RUN yum install -y openssh-server
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
RUN echo "root:huawei" | chpasswd
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

1.2 构建镜像

bash 复制代码
[root@docker ~]# docker build -t centos:ssh -f centos.ssh.dockerfile .
[+] Building 0.6s (10/10) FINISHED                                               
                                                                  docker:default
 => [internal] load build definition from centos.ssh.dockerfile                   
                                                                           0.0s
 => => transferring dockerfile: 604B                                             
=> [internal] load metadata for docker.io/library/centos:8.4.2105               
                                                                            0.0s
 => [internal] load .dockerignore                                                 
                                                                           0.0s
 => => transferring context: 2B                                                   
                                                                           0.0s
 => [1/6] FROM docker.io/library/centos:8.4.2105                                 
                                                                            0.0s
 => CACHED [2/6] RUN minorver=8.4.2105 && sed -e "s|^mirrorlist=|#mirrorlist=|g" 
-e "s|^#baseurl=http://mirror.centos.org/$contentdir/$releasever|baseurl=h 0.0s
 => CACHED [3/6] RUN yum install -y openssh-server                               
                                                                            0.0s
 => CACHED [4/6] RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key               
                                                                           0.0s
 => [5/6] RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key                 
                                                                            0.3s
 => [6/6] RUN echo "root:huawei" | chpasswd                                       
                                                                           0.3s
 => exporting to image                                                           
                                                                            0.0s
 => => exporting layers                                                           
                                                                           0.0s
 => => writing image 
sha256:cc138c4d3c36fe82eab32dd80549707c8bfe99ddcb6d3882319a10283bb1a864           
                                                                           0.0s
 => => naming to docker.io/library/centos:ssh                              0.0s                                                                           

1.3 查看现象

bash 复制代码
[root@docker ~]# docker history centos:ssh
IMAGE         CREATED             CREATED BY                                     
SIZE     COMMENT
cc138c4d3c36   36 seconds ago     CMD ["/usr/sbin/sshd" "-D"]                   
  0B       buildkit.dockerfile.v0
<missing>      36 seconds ago     EXPOSE map[22/tcp:{}]                         
  0B       buildkit.dockerfile.v0
<missing>      36 seconds ago     RUN /bin/sh -c echo "root:huawei" | chpasswd... 
  1.77kB   buildkit.dockerfile.v0
<missing>      36 seconds ago     RUN /bin/sh -c ssh-keygen -t ecdsa -f /etc/s... 
  695B     buildkit.dockerfile.v0
<missing>      47 minutes ago     RUN /bin/sh -c ssh-keygen -t rsa -f /etc/ssh... 
  3.18kB   buildkit.dockerfile.v0
<missing>      47 minutes ago     RUN /bin/sh -c yum install -y openssh-server... 
  51.9MB   buildkit.dockerfile.v0
<missing>     About an hour ago   RUN /bin/sh -c minorver=8.4.2105 && sed -e "... 
  17.6kB   buildkit.dockerfile.v0
<missing>     About an hour ago   MAINTAINER gaoqiaodong                         
0B       buildkit.dockerfile.v0
<missing>      3 years ago         /bin/sh -c #(nop) CMD ["/bin/bash"]           
0B
<missing>      3 years ago         /bin/sh -c #(nop) LABEL org.label-schema.sc... 
  0B
<missing>      3 years ago         /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0... 
  231MB

1.4 测试

bash 复制代码
#基于刚才dockerfile创建的镜像centos:ssh创建容器sshtest
[root@docker ~]# docker run -d -p 2022:22 --name sshtest centos:ssh
73d963d15407a1e73097540bb320b9edf05b468001bd707abf01bc7be5e54bcb
#创建出来的容器
[root@docker ~]# docker ps
CONTAINER ID   IMAGE       COMMAND               CREATED         STATUS         
PORTS                                   NAMES
73d963d15407   centos:ssh   "/usr/sbin/sshd -D"   6 seconds ago   Up 5 seconds   
0.0.0.0:2022->22/tcp, :::2022->22/tcp   sshtest
#ssh登录容器测试ssh,能够成功登录
[root@docker ~]# ssh root@localhost -p 2022
The authenticity of host '[localhost]:2022 ([::1]:2022)' can't be established.
ECDSA key fingerprint is SHA256:z1owYLOuClnbPrZwXxgy1jcItQT1k+QX6LxosydT64A.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:2022' (ECDSA) to the list of known hosts.
root@localhost's password:
"System is booting up. Unprivileged users are not permitted to log in yet. Please 
come back later. For technical details, see pam_nologin(8)."
[root@73d963d15407 ~]#

二、Dockerfile案例:自定义httpd镜像

2.1 创建dockerfile

bash 复制代码
[root@docker ~]# vim httpd.dockerfile
FROM centos:8.4.2105
MAINTAINER gaoqiaodong
RUN minorver=8.4.2105 \
&& sed -e "s|^mirrorlist=|#mirrorlist=|g" -e 
"s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://m
irrors.aliyun.com/centos-vault/$minorver|g" -i.bak /etc/yum.repos.d/CentOS-*.repo
RUN yum install -y httpd && yum clean all && rm -rf /var/cache/yum
COPY index.html /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
[root@docker ~]# echo Hello World > index.html

2.2 构建镜像

bash 复制代码
[root@docker ~]# docker build -t httpd:centos -f httpd.dockerfile .

2.3 查看现象

bash 复制代码
[root@docker ~]# docker history httpd:centos

2.4 测试

bash 复制代码
#基于刚才dockerfile创建的镜像httpd:centos创建容器myweb
[root@docker ~]# docker run -d -p 80:80 --name myweb httpd:centos
1e0b0631cf708bcc0a162d56b936a12cd06c9bcdebcc2594b23c2fbee3ed8894
#创建出来的容器
[root@docker ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                 CREATED             
STATUS             PORTS                                   NAMES
1e0b0631cf70   httpd:centos   "/usr/sbin/httpd -DF..."   About a minute ago   Up 
About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp       myweb
#访问测试
[root@docker ~]# curl localhost
Hello World

三、Dockerfile案例:自定义mycentosjava8

项目背景:java工程师需要我们给他发个带JAVA的centos

要求CentOS8镜像具备vim+ifconfig+jdk8

JDK的下载地址:https://www.oracle.com/java/technologies/downloads/#java8

3.1 编写Dockerfile文件

bash 复制代码
[root@docker ~]# mkdir myfile ; cd myfile
[root@docker myfile]# vim Dockerfile
bash 复制代码
FROM centos:8.4.2105
MAINTAINER gaoqiaodong<6946630@qq.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置yum源
RUN minorver=8.4.2105 \
&& sed -e "s|^mirrorlist=|#mirrorlist=|g" -e 
"s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://m
irrors.aliyun.com/centos-vault/$minorver|g" -i.bak /etc/yum.repos.d/CentOS-*.repo
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u461-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件
在同一位置
ADD jdk-8u461-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_461
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH 
$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
bash 复制代码
# 将jdk-8u461-linux-x64.tar.gz与Dockerfile放到同一目录
[root@docker myfile]# ls
Dockerfile jdk-8u461-linux-x64.tar.gz

# 构建镜像为centosjava8:461
[root@docker myfile]# docker build -t centosjava8:461 .

3.2 查看构建的镜像

bash 复制代码
[root@docker myfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centosjava8   461       8097b762c0a5   4 minutes ago   537MB

3.3 用创建的镜像运行容器测试

bash 复制代码
[root@docker myfile]# docker run -it centosjava8:461 /bin/bash
[root@6b2767bcdf24 local]# pwd             #测试了ENV和WORKDIR
/usr/local
[root@6b2767bcdf24 local]# java -version         #测试java是否安装
java version "1.8.0_461"
Java(TM) SE Runtime Environment (build 1.8.0_461-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.461-b11, mixed mode)
[root@6b2767bcdf24 local]# ifconfig           #测试net-tools是否安装
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
       inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
       ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
       RX packets 8 bytes 656 (656.0 B)
       RX errors 0 dropped 0 overruns 0 frame 0
       TX packets 0 bytes 0 (0.0 B)
       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
       inet 127.0.0.1 netmask 255.0.0.0
       inet6 ::1 prefixlen 128 scopeid 0x10<host>
       loop txqueuelen 1000 (Local Loopback)
       RX packets 0 bytes 0 (0.0 B)
       RX errors 0 dropped 0 overruns 0 frame 0
       TX packets 0 bytes 0 (0.0 B)
       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@6b2767bcdf24 local]#vim file1           #测试vim是否安装
相关推荐
岳来1 小时前
docker 容器重启策略RestartPolicy
运维·docker·容器·restartpolicy
IMPYLH1 小时前
Linux 的 tty 命令
linux·运维·服务器·bash
@王先生11 小时前
rancher安装--针对报错API Aggregation not ready
linux·运维·rancher
能喵烧香1 小时前
鸿潮万相:全品类OpenHarmony定制发行版全景详解
linux·系统架构·开源
风曦Kisaki1 小时前
#Linux Shell 编程入门 Day04:正则表达式(egrep模糊匹配)与 sed流式编辑器
linux·正则表达式·编辑器
海盗船长没有船y3 小时前
避坑指南:Ubuntu 启动报错 “Unable to mount root fs“ 的深层诱因与修复
linux·ubuntu·故障排除·dkms
东风微鸣3 小时前
Ubuntu 26.04 游戏配置指南:魔兽争霸3 Dota1
linux·ubuntu·游戏
郝亚军3 小时前
在Ubuntu 2.04上如何按照x86_64架构编译libmodbus库
linux·运维·ubuntu
小黑蛋学java3 小时前
Ubuntu Docker 安装手册
linux·ubuntu·docker