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

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
运维安全中心(堡垒机),免费版 6个月
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
简介: 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图形化工具创建数据库表。
目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
130 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
1月前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
17天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
42 3
docker push推送自己搭建的镜像
|
21天前
|
Docker 容器
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
58 9
|
30天前
|
安全 Docker 容器
docker的默认网络模式有哪些
Docker 默认网络模式包括:1) bridge:默认模式,各容器分配独立IP,可通过名称或IP通信;2) host:容器与宿主机共享网络命名空间,性能最优但有安全风险;3) none:容器隔离无网络配置,适用于仅需本地通信的场景。
38 6
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
102 7
|
1月前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
49 4
|
2月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
46 5
|
2月前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。

热门文章

最新文章