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是否安装
相关推荐
A小辣椒18 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式