当前位置: 首页 > news >正文

Docker镜像制作案例

一、使用docker commit制作镜像

1、为ubuntu镜像提供SSH服务

(1)拉取镜像

[root@openEuler-1 ~]# docker pull ubuntu:18.04

(2)启动镜像

[root@openEuler-1 ~]# docker run --name c1 -it --rm ubuntu:18.04 bash

(3)替换163源

root@8377a04ab754:/# mv /etc/apt/sources.list{,.bak}
root@8377a04ab754:/# echo deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse > /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# echo deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse >> /etc/apt/sources.list.d/163.list
root@8377a04ab754:/# apt update

(4)安装并配置ssh服务

root@8377a04ab754:/# apt install openssh-server -y
root@8377a04ab754:/# mkdir -p /var/run/sshd
root@8377a04ab754:/# /usr/sbin/sshd -D &
# 取消pam登录限制
root@8377a04ab754:/# sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/' /etc/pam.d/sshd

(5)配置免密登录

# 宿主机上:创建密钥对
[root@openEuler-1 ~]# ssh-keygen -f ~/.ssh/id_rsa -P "" -q
[root@openEuler-1 ~]# cat .ssh/id_rsa.pub# 容器内:将刚刚查询到的公钥追加进去
root@8377a04ab754:/# mkdir ~/.sshi
root@8377a04ab754:/# echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCjVp4DSSoBFnxhT/9KsMwPi8hGU9vDK+c6H/X7f0tE+4sYeAIdXtLbn6q0aDV1AOQGfVLtITEHrdxNpUjqDvaNoxJj0Ac9zPn9qGYn6OTcvFoT45UNdglcwN7xx1MrG1piHTHSoZ+aSf0AOnkNH+RPOvXM6Oln46nPGjNsV/xMt8I0SX5lomd9jptCL57DvBiJ+JcRr9POBepkfq+/vO1zdmmfoaUyhdsc2mkKzRcvPs1H26mIyH+XOmzJKfhkqTYw2BrdtGISONR4OfiMcF9JULGc3nxUFClZ+0VeLdRK8xSTYOW4JZy6Zp2YQCotFQgSWmh74q9oCCpfAVxSuDmF3RLfzNzAOPzOyvqildEBnJfeUKIjF8QdyBPbWFpvugtZlnoG/IUNPCa5Iq92w2ulAl8kRmgK3OPKPHtdm5IspkCnVQN1QVAPmmJs7JVSMatcmA3tTthi/9wFBmHufZ8iemSdvEGJIKUZEVBIyOuwgIazDQLueVtYu7X55+lKdO8= root@openEuler-1
> " > ~/.ssh/authorized_keys

(6)编写服务器启动脚本

root@8377a04ab754:/# echo '#!/bin/bash' > /run.sh
root@8377a04ab754:/# echo /usr/sbin/sshd -D >> /run.sh
root@8377a04ab754:/# chmod +x /run.sh

(7)提交镜像

[root@openEuler-1 ~]# docker commit c1 sshd:ubuntu_v1
[root@openEuler-1 ~]# docker images
REPOSITORY   TAG         IMAGE ID       CREATED         SIZE
sshd         ubuntu_v1   eab45d3513f7   8 seconds ago   250MB
ubuntu       18.04       f9a80a55f492   2 years ago     63.2MB

(8)验证镜像

[root@openEuler-1 ~]# docker run -d -p 9001:22 sshd:ubuntu_v1 /run.sh
[root@openEuler-1 ~]# ssh 192.168.121.11 -p 9001

二、使用dockerfile制作镜像

 1、基于 ubuntu:18.04 构建一个宿主机免密钥登录

可以参考上面的docker commit案例来做。

(1)编写Dockerfile

[root@openEuler-4 ~]# mkdir ubuntu/ && cd ubuntu/
[root@openEuler-4 ubuntu]# vim Dockerfile
FROM ubuntu:18.04
MAINTAINER "obboda <obboda@163.com>"RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
COPY aliyun.list /etc/apt/sources.list.d/aliyun.list
RUN apt update && apt install openssh-server -y && mkdir -p /var/run/sshd
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/' /etc/pam.d/sshd
RUN mkdir /root/.ssh
COPY authorized_keys /root/.ssh/authorized_keysEXPOSE 22/tcp
CMD ["/usr/sbin/sshd","-D"]

(2)准备文件

[root@openEuler-4 ubuntu]# cat > aliyun.list << EOF
> deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
> deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
> EOF[root@openEuler-4 ubuntu]# cat ~/.ssh/id_rsa.pub > authorized_keys

(3)构建镜像

[root@openEuler-4 ubuntu]# docker build -t obboda/demo:ubuntu_sshd .

(4)测试

[root@openEuler-4 ubuntu]# docker run -d -p 8001:22 obboda/demo:ubuntu_sshd
371a967f4e90692f5e0bec25d80ed12b3e0fd7eff7b18fab8c0e2ec02691bb56
[root@openEuler-4 ubuntu]# ssh localhost -p 8001
root@371a967f4e90:~# 

2、使用busybox 构建一个静态web

(1)编写Dockerfile

[root@openEuler-4 ~]# mkdir busybox/ && cd busybox/
[root@openEuler-4 busybox]# vim Dockerfile
FROM busybox:latest
MAINTAINER "obboda <obboda@163.com>"RUN mkdir -p /data/html
COPY index.html /data/html
CMD ["/bin/httpd","-f","-h","/data/html"]
EXPOSE 80/tcp

(2)准备文件

[root@openEuler-4 busybox]# echo "busybox test page!" > index.html

(3)构建镜像并上传
 

[root@openEuler-4 busybox]# docker build -t obboda/demo:busybox_web .
[root@openEuler-4 busybox]# docker push obboda/demo:busybox_web

(4)测试

[root@openEuler-4 busybox]# docker pull obboda/demo:busybox_web
[root@openEuler-4 busybox]# docker run -d -p 8080:80 --name web obboda/demo:busybox_web
[root@openEuler-4 busybox]# curl localhost:8080
busybox test page!

3、制作tomcat服务镜像

 (1)准备文件

[root@openEuler-4 tomcat]# ls
apache-tomcat-9.0.102.tar.gz  jdk-8u261-linux-x64.rpm

(2)编写Dockerfile

[root@openEuler-4 ~]# mkdir tomcat && cd tomcat
[root@openEuler-4 tomcat]# vim Dockerfile
FROM rockylinux:9
MAINTAINER obboda <obboda@163.com>COPY jdk-8u261-linux-x64.rpm /opt/jdk-8u261-linux-x64.rpm
ADD apache-tomcat-9.0.102.tar.gz /usr/local
RUN yum install -y /opt/jdk-8u261-linux-x64.rpm && ln -s /usr/local/apache-tomcat-9.0.102 /usr/local/tomcatEXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

(3)构建镜像并上传

[root@openEuler-4 tomcat]# docker build -t obboda/demo:rocky_tomcat .
[root@openEuler-4 tomcat]# docker push obboda/demo:rocky_tomcat

(4)测试

[root@openEuler-4 tomcat]# docker pull obboda/demo:rocky_tomcat
[root@openEuler-4 tomcat]# docker run -d -p 8080:8080 obboda/demo:rocky_tomcat
963c356cc8706bccdeffde29495095ef73ac2122a802f0f2d00ed7369de4fc84
[root@openEuler-4 tomcat]# docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS                       PORTS     NAMES
963c356cc870   obboda/demo:rocky_tomcat   "/usr/local/tomcat/b…"   5 seconds ago   Exited (127) 4 seconds ago             stoic_wilson

这里看到意外退出了,我们查看日志:

[root@openEuler-4 tomcat]# docker logs 963c356cc870
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007ff2f7bc7f81, pid=1, tid=0x00007ff2f87ce700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_261-b12) (build 1.8.0_261-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  [libc.so.6+0x21f81]  abort+0x203
#
# Core dump written. Default location: //core or core.1
#
# An error report file with more information is saved as:
# //hs_err_pid1.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
library initialization failed - unable to allocate file descriptor table - out of memory

发现是系统资源不足,特别是文件描述符的数量不足,因此我们在运行时需要设置一个较高的文件描述符数量:

[root@openEuler-4 tomcat]# docker run  -d -p 8080:8080  --ulimit nofile=65535:65535 --ulimit nproc=65535:65535 obboda/demo:rocky_tomcat
fb66b93442db043fd90902e6c2028546aff11535eaa89afe31887a76129a3243
[root@openEuler-4 tomcat]# docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS                       PORTS                                       NAMES
fb66b93442db   obboda/demo:rocky_tomcat   "/usr/local/tomcat/b…"   3 seconds ago   Up 3 seconds                 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   elastic_burnell

这时就可以看到容器启动起来了,访问测试:

http://www.lqws.cn/news/569935.html

相关文章:

  • MATLAB中formattedDisplayText函数用法
  • 用户行为序列建模(篇八)-【阿里】DIEN
  • 由dbc文件解析can消息(一)
  • 信创背景下应用软件迁移解析:从政策解读到落地实践方案
  • 使用Xshell学习Linux的一些基本操作
  • JavaScript基础-常见网页特效案例
  • NumPy 统计函数与矩阵运算指南
  • 【大语言模型入门】—— 浅析LLM基座—Transformer原理
  • FPGA实现CameraLink视频解码,基于Xilinx ISERDES2原语,提供4套工程源码和技术支持
  • 【系统分析师】2021年真题:案例分析-答案及详解
  • SpringCloud系列(41)--SpringCloud Config分布式配置中心简介
  • 《从Backprop到Diffusion:深度学习的算法进化树全景图》
  • C++洛谷P1001 A+B Problem
  • 7类茶叶嫩芽图像分类数据集
  • 低延时高速数据链技术在无人平台(无人机无人船无人车)中的关键作用与应用
  • 2025年前端最新面试题及答案
  • S7-1200 CPU 与 S7-200 SMART S7通信(S7-1200 作为服务器)
  • 【算法设计与分析】(三)二分搜索技术与大整数乘法
  • Spring Cloud:分布式事务管理与数据一致性解决方案
  • stm32之普通定时器
  • C++并发编程-5.C++ 线程安全的单例模式演变
  • 从代码学习深度学习 - 自然语言推断:使用注意力 PyTorch版
  • burp suit使用
  • 自动化提示工程:未来AI优化的关键突破
  • mysql数据库完整备份导出
  • 板凳-------Mysql cookbook学习 (十--15)
  • Java面试宝典:基础四
  • 消息队列:Redis Stream到RabbitMQ的转换
  • allegro 铜皮的直角边怎么快速变成多边形?
  • Python 数据分析与可视化 Day 11 - 特征工程基础