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

本文涉及的产品
运维安全中心(堡垒机),企业双擎版 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
分享
相关文章
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
615 32
将应用程序打包成Docker镜像时可能遇到哪些问题?
将应用程序打包成Docker镜像时可能遇到哪些问题?
249 77
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
Ubuntu Docker镜像:支持systemctl、SSH、VNC
总的来说,创建一个支持systemctl、SSH和VNC的Ubuntu Docker镜像需要一些技术知识,但是通过学习和实践,我们可以掌握这些技术。这将使我们能够更有效地使用Docker,更好地管理我们的应用程序和服务。CentOS系统中的日志文件位置和管理
116 17
Docker镜像:Ubuntu支持systemctl、SSH和VNC
总的来说,Docker提供了一个灵活且强大的方式来创建和运行自定义的Ubuntu镜像。通过理解和使用Dockerfile,你可以轻松地创建一个支持systemctl、SSH和VNC的Ubuntu镜像。
212 21
数据治理 vs. 数据管理:别再傻傻分不清!
数据治理 vs. 数据管理:别再傻傻分不清!
122 10
拥抱Data+AI|“全球第一”雅迪如何实现智能营销?DMS+PolarDB注入数据新活力
针对雅迪“云销通App”的需求与痛点,本文将介绍阿里云瑶池数据库DMS+PolarDB for AI提供的一站式Data+AI解决方案,助力销售人员高效用数,全面提升销售管理效率。
AI助理

你好,我是AI助理

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

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问