Docker数据管理、网络通信和镜像创建-2

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
运维安全中心(堡垒机),企业双擎版 50资产 7天
运维安全中心(堡垒机),免费版 6个月
简介: Docker数据管理、网络通信和镜像创建

三、Dockerfile 操作常用的指令


3.1 FROM 镜像

指定新镜像所基于的基础镜像,第一条指令必须为FROM 指令,每创建一个镜像就需要一条 FROM 指令


3.2 MAINTAINER 名字

说明新镜像的维护人信息


3.3 RUN 命令

在所基于的镜像上执行命令,并提交到新的镜像中


3.4 ENTRYPOINT

ENTRYPOINT ["要运行的程序", "参数 1", "参数 2"]

设定容器启动时第一个运行的命令及其参数。


可以通过使用命令docker run --entrypoint 来覆盖镜像中的ENTRYPOINT指令的内容。

ENTRYPOINT ["rm", "-rf", "/*"]

3.5 CMD

exec形式:CMD ["要运行的程序", "参数1", "参数2"] 
shell形式:CMD 命令 参数1 参数2

启动容器时默认执行的命令或者脚本 ,Dockerfile只能有一条CMD命令。如果指定多条命令,只执行最后一条命令。


如果在docker run时指定了命令或者镜像中有ENTRYPOINT,那么CMD就会被覆盖。


CMD 可以为 ENTRYPOINT 指令提供默认参数。


ENTRYPOINT和CMD共存的情形: ENTRYPOIN指定命令,CMD传参


容器运行时的优先级:


docker run 指定的命令 > ENTRYPOINT > CMD


3.6 EXPOSE

EXPOSE 端口号

指定新镜像加载到 Docker 时要开启的端口


3.7 ENV

ENV 环境变量 变量值

设置一个环境变量的值,会被后面的 RUN 使用


linxu PATH=$PATH:/opt
  ENV PATH $PATH:/opt

3.8 ADD

ADD 源文件/目录 目标文件/目录

将源文件复制到镜像中,源文件要与 Dockerfile 位于相同目录中,或者是一个 URL

有如下注意事项:

1、如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。

如果目标路径不存在,则会自动创建目标路径。


2、如果源路径是个文件,且目标路径是不以 / 结尾,则docker会把目标路径当作一个文件。

如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;

如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。

如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。


3、如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。

如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。


4、如果源文件是个归档文件(压缩文件),则docker会自动帮解压。

URL下载和解压特性不能一起使用。任何压缩文件通过URL拷贝,都不会自动解压。


3.9 COPY

COPY 源文件/目录 目标文件/目录

只复制本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile 在相同的目录中


3.10 VOLUME

VOLUME [“目录”] 

在容器中创建一个挂载点


3.11 USER

USER 用户名/UID

指定运行容器时的用户


3.12 WORKDIR

WORKDIR 路径

为后续的 RUN、CMD、ENTRYPOINT 指定工作目录


3.13 ONBUILD

ONBUILD 命令

指定所生成的镜像作为一个基础镜像时所要运行的命令。


当在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响。


但是当编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令。


注:请各位自己在生产中如果有的是别的dockerfile 请自习阅读,否则后果自付


3.14 HEALTHCHECK

健康检查


在编写 Dockerfile 时,有严格的格式需要遵循:


  • 第一行必须使用 FROM 指令指明所基于的镜像名称;
  • 之后使用 MAINTAINER 指令说明维护该镜像的用户信息;
  • 然后是镜像操作相关指令,如 RUN 指令。每运行一条指令,都会给基础镜像添加新的一层。
  • 最后使用 CMD 指令指定启动容器时要运行的命令操作。


四、Dockerfile 案例


4.1 构建apache镜像

#建立工作目录
mkdir  /opt/apache
cd  /opt/apache

7d0c56abc52241ce8a372ba3e86c6c53.png


vim Dockerfile
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER this is apache image <xc>
#镜像操作指令安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
//方法一:
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D", "FOREGROUND"]

ea30f7b51479443ba4c12f6d32719041.png

//准备执行脚本
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*             #清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND     #指定为前台运行
#因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。


804d4436020c4b3499dbaa88598b250e.png

//准备网站页面
echo "this is test web" > index.html


e334b008bb2448c0bf3958d5dc7e1790.png

//生成镜像
docker build -t httpd:centos .      #注意别忘了末尾有"."


c49d5e3c888a4aa78be511190de52a03.png

//新镜像运行容器
docker run -d -p 1216:80 httpd:centos


0391355f332c45879d6f66f1cc3e5ce7.png

//测试
http://192.168.147.105:1216/
########如果有网络报错提示########
[Warning] IPv4 forwarding is disabled. Networking will not work.
解决方法:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker


9802b64f219c4b12856131918c083932.png


4.2 构建SSH镜像

mkdir /opt/sshd
cd /opt/sshd

2324d33f605148d28108668cfb1e2a9d.png


vim Dockerfile
#第一行必须指明基于的基础镜像
FROM centos:7
#作者信息
MAINTAINER this is ssh image <xc>
#镜像的操作指令
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo 'abc1234' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config            #不使用PAM认证
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd  #取消pam限制
RUN ssh-keygen -t rsa -A                            #生成密钥认证文件
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd" , "-D"]     #/usr/sbin/sshd -D 用于前台启动sshd服务

17bfc740d0f94566855fcd4f7f89a953.png


//生成镜像
docker build -t sshd:centos .

1bddb8790dd142efa1e04f48e7917703.png


//启动容器并修改root密码
docker run -d -P sshd:centos
docker ps -a
ssh localhost -p 49153

d3e36388344b40dab38fb47ff35af58c.png

b991547202f649d09f9ced4cab6efb93.png



相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
打赏
0
0
0
0
11
分享
相关文章
Docker Image即Docker镜像
Docker 镜像是 Docker 容器的基础,包含了运行应用程序所需的一切。通过 Dockerfile 可以方便地创建自定义镜像,并且利用 Docker 提供的命令可以轻松管理和使用这些镜像。掌握 Docker 镜像的创建、管理和使用,是进行容器化应用开发和部署的基础技能。希望本文能帮助读者更好地理解 Docker 镜像的概念和操作,提高开发和运维效率。
72 13
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
154 28
|
12天前
|
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
83 1
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
138 26
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
98 27
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
215 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
85 22
docker将数据从宿主机挂载到容器的方式(二)
docker将数据从宿主机挂载到容器的方式(二)
527 0
docker将数据从宿主机挂载到容器的方式(二)
docker将数据从宿主机挂载到容器的方式(一)
docker将数据从宿主机挂载到容器的方式(一)
416 0
docker将数据从宿主机挂载到容器的方式(一)
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
283 93

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等