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图形化工具创建数据库表。
目录
相关文章
|
19天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
691 29
|
15天前
|
关系型数据库 数据管理 应用服务中间件
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。
|
15天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
21天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
100 2
|
22天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
46 1
|
15天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
15天前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
15天前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
15天前
|
Linux Docker 容器
【赵渝强老师】Docker的Bridge网络模式
本文介绍了Docker容器的网络隔离机制及其四种网络模式:bridge、container、host和none。重点讲解了默认的bridge模式,通过示例演示了如何创建自定义bridge网络并配置容器的网络信息。文中还附有相关图片和视频讲解,帮助读者更好地理解Docker网络的配置和使用方法。
|
15天前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
51 0

热门文章

最新文章

下一篇
无影云桌面