DOCKER学习_011:使用Dockerfile制作docker镜像

前面使用commit的方式,制作一个docker镜像,本次介绍使用Dockerfile制作一个dockers镜像

[[email protected] ~]# mkdir /openssh

[[email protected] ~]# cd /openssh

[[email protected] openssh]# cp /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key .

[[email protected] openssh]# ll

-rw-r----- 1 root root  227 Dec 31 13:13 ssh_host_ecdsa_key
-rw-r----- 1 root root  387 Dec 31 13:13 ssh_host_ed25519_key
-rw-r----- 1 root root 1679 Dec 31 13:13 ssh_host_rsa_key

1 编辑Dockerfile文件

[[email protected] openssh]# vim Dockerfile

FROM centos:7
LABEL  darren [email protected]

RUN yum -y install openssh-server   && useradd natash   && echo "redhat"|passwd --stdin natash   && echo "redhat"|passwd --stdin root     && ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ‘‘  && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ‘‘   && ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ‘‘

ADD ssh_host_ecdsa_key   /tmp/ssh_host_ecdsa_key
ADD ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
ADD ssh_host_rsa_key     /tmp/ssh_host_rsa_key

CMD  ["/usr/sbin/sshd", "-D"]

FROM表示下载基本镜像

LABEL作者信息

RUN 表示要执行的动作,相当于执行脚本,执行的是/bin/sh -c ***的动作

ADD表示复制文件

CMD表示执行一个命令

2 使用docker build构建镜像

[[email protected] openssh]# docker build -t openssh:v1.3 .

Sending build context to Docker daemon  7.168kB
Step 1/7 : FROM centos:7
 ---> 5e35e350aded
Step 2/7 : LABEL  darren [email protected]
 ---> Running in e4326a6f6000
Removing intermediate container e4326a6f6000
 ---> eb19f72c1afd
Step 3/7 : RUN yum -y install openssh-server   && useradd natash   && echo "redhat"|passwd --stdin natash   && echo "redhat"|passwd --stdin root     && ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ‘‘  && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ‘‘   && ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ‘‘
 ---> Running in 41b40d14da2d
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirror.pregi.net
 * extras: mirror.pregi.net
 * updates: mirror.pregi.net
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:7.4p1-21.el7 will be installed
--> Processing Dependency: openssh = 7.4p1-21.el7 for package: openssh-server-7.4p1-21.el7.x86_64
--> Processing Dependency: fipscheck-lib(x86-64) >= 1.3.0 for package: openssh-server-7.4p1-21.el7.x86_64
--> Processing Dependency: libwrap.so.0()(64bit) for package: openssh-server-7.4p1-21.el7.x86_64
--> Processing Dependency: libfipscheck.so.1()(64bit) for package: openssh-server-7.4p1-21.el7.x86_64
--> Running transaction check
---> Package fipscheck-lib.x86_64 0:1.4.1-6.el7 will be installed
--> Processing Dependency: /usr/bin/fipscheck for package: fipscheck-lib-1.4.1-6.el7.x86_64
---> Package openssh.x86_64 0:7.4p1-21.el7 will be installed
---> Package tcp_wrappers-libs.x86_64 0:7.6-77.el7 will be installed
--> Running transaction check
---> Package fipscheck.x86_64 0:1.4.1-6.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                  Arch          Version               Repository   Size
================================================================================
Installing:
 openssh-server           x86_64        7.4p1-21.el7          base        459 k
Installing for dependencies:
 fipscheck                x86_64        1.4.1-6.el7           base         21 k
 fipscheck-lib            x86_64        1.4.1-6.el7           base         11 k
 openssh                  x86_64        7.4p1-21.el7          base        510 k
 tcp_wrappers-libs        x86_64        7.6-77.el7            base         66 k

Transaction Summary
================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 1.0 M
Installed size: 3.0 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/fipscheck-1.4.1-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for fipscheck-1.4.1-6.el7.x86_64.rpm is not installed
--------------------------------------------------------------------------------
Total                                              446 kB/s | 1.0 MB  00:02
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-7.1908.0.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : fipscheck-1.4.1-6.el7.x86_64                                 1/5
  Installing : fipscheck-lib-1.4.1-6.el7.x86_64                             2/5
  Installing : openssh-7.4p1-21.el7.x86_64                                  3/5
  Installing : tcp_wrappers-libs-7.6-77.el7.x86_64                          4/5
  Installing : openssh-server-7.4p1-21.el7.x86_64                           5/5
  Verifying  : fipscheck-lib-1.4.1-6.el7.x86_64                             1/5
  Verifying  : tcp_wrappers-libs-7.6-77.el7.x86_64                          2/5
  Verifying  : fipscheck-1.4.1-6.el7.x86_64                                 3/5
  Verifying  : openssh-7.4p1-21.el7.x86_64                                  4/5
  Verifying  : openssh-server-7.4p1-21.el7.x86_64                           5/5 

Installed:
  openssh-server.x86_64 0:7.4p1-21.el7                                          

Dependency Installed:
  fipscheck.x86_64 0:1.4.1-6.el7      fipscheck-lib.x86_64 0:1.4.1-6.el7
  openssh.x86_64 0:7.4p1-21.el7       tcp_wrappers-libs.x86_64 0:7.6-77.el7     

Complete!
Changing password for user natash.
passwd: all authentication tokens updated successfully.
Changing password for user root.
passwd: all authentication tokens updated successfully.
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.
Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub.
The key fingerprint is:
SHA256:7LIsGt0osRc9JoEYjake8YD1pTcynqoUbep/IK7T2Xs [email protected]
The key‘s randomart image is:
+---[DSA 1024]----+
|o=.   .          |
|+=.o o           |
|o = * o          |
|...o B o         |
|..oo= + S        |
| o+* * o         |
|.+*o= o .        |
|+oo+ooEo         |
|+oooo+o          |
+----[SHA256]-----+
Removing intermediate container 41b40d14da2d
 ---> 2be613021085
Step 4/7 : ADD ssh_host_ecdsa_key   /tmp/ssh_host_ecdsa_key
 ---> c64f7dcda4c1
Step 5/7 : ADD ssh_host_ed25519_key /tmp/ssh_host_ed25519_key
 ---> 86e57a7a4313
Step 6/7 : ADD ssh_host_rsa_key     /tmp/ssh_host_rsa_key
 ---> 2412a6e26b9c
Step 7/7 : CMD  ["/usr/sbin/sshd", "-D"]
 ---> Running in e3e2df3ee1c8
Removing intermediate container e3e2df3ee1c8
 ---> 0244c59bf444
Successfully built 0244c59bf444
Successfully tagged openssh:v1.3

每一个step都会生成一个镜像层

在生成镜像层后,docker会自动识别,看是否有必要存在这个镜像层,如果没有必要,就会删除这个镜像层,如第二步:

Step 2/7 : LABEL  darren [email protected]
 ---> Running in e4326a6f6000
Removing intermediate container e4326a6f6000

3 查看镜像

发现新的镜像openssh:v1.3

[[email protected] openssh]# docker image ls

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
openssh                         v1.3                0244c59bf444        42 seconds ago      306MB
openssh                         v1.2                c399a750ed03        2 hours ago         361MB
openssh                         v1.0                d98ba06569f3        2 hours ago         361MB
nginx                           latest              f7bb5701a33c        3 days ago          126MB
busybox                         latest              6d5fcfe5ff17        4 days ago          1.22MB
hub.darren.com/library/alpine   3.7                 cc0abc535e36        7 days ago          5.59MB
centos                          7                   5e35e350aded        7 weeks ago         203MB

4 运行一个容器

[[email protected] openssh]# docker run -d openssh:v1.3

fd2c629a2b3c067ecfa6ff601bf5a158f16087d40b16487e514688a125ab8f70

[[email protected] openssh]# docker ps -a

CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS               NAMES
fd2c629a2b3c        openssh:v1.3        "/usr/sbin/sshd -D"   13 seconds ago      Up 13 seconds 

5 测试容器,检查镜像是否达到要求

[[email protected] openssh]# docker inspect fd2c629a2b3c |grep IP

"LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "192.168.0.2",
            "IPPrefixLen": 24,
            "IPv6Gateway": "",
                    "IPAMConfig": null,
                    "IPAddress": "192.168.0.2",
                    "IPPrefixLen": 24,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,

ssh连接,测试openssh,并查看copy的文件

[[email protected] openssh]# ssh [email protected]

The authenticity of host ‘192.168.0.2 (192.168.0.2)‘ can‘t be established.
ECDSA key fingerprint is SHA256:j3tvwS9TpQzJVj3QN+SLescO3vpSiiT18bA1e12ZR+M.
ECDSA key fingerprint is MD5:5c:cc:e9:cf:3d:b7:9c:d3:fe:93:50:b6:0f:f6:27:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.0.2‘ (ECDSA) to the list of known hosts.
[email protected]192.168.0.2‘s password:
[[email protected] ~]# ll /tmp/ssh*
-rw-r----- 1 root root  227 Dec 31 18:13 /tmp/ssh_host_ecdsa_key
-rw-r----- 1 root root  387 Dec 31 18:13 /tmp/ssh_host_ed25519_key
-rw-r----- 1 root root 1679 Dec 31 18:13 /tmp/ssh_host_rsa_key
[[email protected] ~]# exit
logout
Connection to 192.168.0.2 closed.

[[email protected] openssh]# ssh [email protected]

[email protected]192.168.0.2‘s password:
[[email protected] ~]$ exit
logout
Connection to 192.168.0.2 closed.

说明镜像制作完成,后续在研究学习关于Dockerfile的语法



博主声明:本文的内容来源主要来自誉天教育晏威老师,由本人实验完成操作验证,需要的博友请联系誉天教育(http://www.yutianedu.com/),获得官方同意或者晏老师(https://www.cnblogs.com/breezey/)本人同意即可转载,谢谢!

原文地址:https://www.cnblogs.com/zyxnhr/p/12142754.html

时间: 2024-11-06 23:30:35

DOCKER学习_011:使用Dockerfile制作docker镜像的相关文章

Docker 学习笔记【1】Docker 相关概念,基本操作

计划:Docker 学习笔记[2] Docker 基础操作实操记录,Docker仓库.数据卷,网络基础学习---40 注:所有操作在root下执行 --1--概念: 1.Docker镜像: 镜像就是一个只读的模板,用于创建docker容器. Docker提供了简单的机制创建或者更新现有镜像,也可以从别处拿来现成镜像直接使用. 2.Docker容器: 可以认为是精简版的linux运行环境包含 [root权限,进程空间,用户空间,网络空间等]和应用程序 另外:镜像是只读的,容器基于镜像启动后创建一层

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表

基于Dockerfile制作tomcat镜像

Docker 概述: ??在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让 docker 读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile 就此诞生了 常用参数: FROM 命令.用法, FROM <image>:<tag>. FROM 命令告诉 docker 我们构建的镜像是以哪个(发行版)镜像为基础

Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)

一.Docker是什么? 首先Docker是软件工业上的集装箱技术 回顾,在没有集装箱出现以前,传统运输行业中,会存在这些问题: 在运输过程中,货物损坏 装卸.运输货物,效率低下 运输手续繁多及运输环节多 劳动强度大,及船舶周转慢 在集装箱出现后,完全改变了这种状况,是由于集装箱: 规则标准化,大大减少了包装费用 大大提升了货物装卸效率.及运输效率 不同种运输工具之间转换更容易 所以,集装箱出现是传统行业中的一次重大变革 传统软件行业中存在的问题 软件更新发布低效 业务无法敏捷 环境一致性,难于

docker第四天:制作docker镜像——手工制作docker镜像

制作Docker镜像的方式一般有两种:手工制作和通过Dockerfile制作,此次讲解的是手工制作docker镜像. 一.手动制作镜像: 用centos镜像启动容器: [[email protected]_0_12_centos ~]# docker run -it centos bash 2. 在容器中安装网络管理工具: [[email protected] /]# yum -y install net-tools iproute 3. 将修改后的容器保存为镜像: 先按ctrl+p+q后台运行

docker第三天:制作docker镜像——手工制作docker镜像

制作Docker镜像的方式一般有两种:手工制作和通过Dockerfile制作,此次讲解的是手工制作docker镜像. 一.手动制作镜像: 用centos镜像启动容器: [[email protected]_0_12_centos ~]# docker run -it centos bash 2. 在容器中安装网络管理工具: [[email protected] /]# yum -y install net-tools iproute 3. 将修改后的容器保存为镜像: 先按ctrl+p+q后台运行

docker把web jar包制作成镜像

1.新建一个spring boot项目 并使用maven打成jar包,放到linux(centos7)环境上. 运行 java -jar hello.jar  后结果如下(这里项目对外提供的端口是9090) 2.准备环境 新建一个目录hello,里面存放项目包(hello.jar).运行环境(jdk8)和Dockerfile Dockerfile内容如下 FROM centos #指定基镜像 centos MAINTAINER wzy #指定维护者信息 wzy COPY jdk8 jdk8 #复

Docker学习笔记——Mongo Dockerfile及容器运行

1.创建项目目录mongo,在目录下上传下载的Mongodb安装文件及mongo.conf配置文件,创建Dockerfile文件,项目结构如下: mongo - Dockerfile - mongo.conf - mongodb-linux-x86_64-3.4.9.tgz - data - logs Dockerfile内容如下: # mongo # SOURCE_IMAGE FROM centos # MAINTAINER_INFO MAINTAINER bluemooder [email