您好!社区的各位老师,
在我的上一篇文章中,我们学习了以下主题:
-
什么是 Docker?
-
Docker 的一些好处
-
Docker 是如何工作的?
-
Docker 镜像
-
Docker容器
-
Docker 镜像存储库
-
InterSystems 的 Docker 镜像存储库
-
Docker安装
-
Docker 基本命令
-
使用 Docker 运行 IRIS 社区版
-
Docker 桌面图形用户界面
在本文中,我们将讨论以下主题:
-
使用 Docker Compose 文件( YAML 文件)
-
Docker 文件的使用(用于构建 Docker 镜像)
-
Docker 卷的使用
那么让我们开始吧。
1.使用Docker Compose文件( YAML文件)
Docker Compose 是一款旨在帮助定义和共享多容器应用程序的工具。使用 Compose,我们可以创建一个 YAML 文件来定义服务,并且通过单个命令,我们可以启动或拆除所有内容。
使用 Compose 的一大优势是能够在文件中定义应用程序堆栈并将其保存在项目存储库的根目录中。您还可以让其他人轻松地为您的项目做出贡献。 他们只需要克隆您的存储库并启动撰写应用程序。
在我的上一篇文章中,我们使用下面提到的命令来创建并启动带有 InterSystems 社区镜像的容器:
docker run -d -p 52773:52773 intersystemsdc/iris-community
Shell SessionShell Session
此时,让我们修改此命令并添加容器名称、映射更多端口并设置重新启动选项:
docker run -d -p 52773:52773 -p 53773:53773 -p 1972:1972 --name iris --restart=always intersystemsdc/iris-community
Shell SessionShell Session
让我为您分解一下上述命令:
# docker run command to create and start the container docker run # -d -an option used to start container in deattach mode -d # -p -an option is used to map the ports -p 52773:52773 -p 53773:53773 -p 1972:1972 # name of the container --name iris # set the restart option to always --restart=always # base image intersystemsdc/iris-community
Shell SessionShell Session
创建撰写文件
在根文件夹中,创建一个名为-----100-----的文件,并写入上述命令,如下所示:
#specify docker-compose version version: '3.6' #services/container details services: #Name of the container iris: #Base Image image: intersystemsdc/iris-community #set restart option restart: always #port mapping ports: - 55036 :1972 - 55037 :52773 - 53773 :53773
YAMLYAML
docker run 命令和 docker-compose 文件的映射如下所示:
Docker-compose 文件快照如下所示:
为了运行 docker-compose 文件代码,我们将使用 docker-compose up 命令:
docker-compose up -d
Shell SessionShell Session
- -----101----- 或 -----102-----:在后台运行命令并将控制返回到终端的选项。
容器已启动。让我们运行“docker ps”命令来列出正在运行的容器
正如您所看到的,我们使用 docker-compose 文件得到了相同的结果。
创建并启动多个容器
在 docker-compose 的帮助下,我们不仅可以运行多个容器,还可以组织并向其添加更多命令。
例如,在下面的 docker-compose 文件中,我们运行 MongoDB 容器和 iris 容器:
#specify docker-compose version version: '3.6' #services/container details services: #Name of the container iris: #Base Image image: intersystemsdc/iris-community #set restart option restart: always #port mapping ports: - 55036:1972 - 55037:52773 - 53773:53773 #start MongoDB container mongodb: image: mongo ports: - 27017:27017
XMLXML
让我们运行 docker-compose up 命令
MongoDB 和 iris 容器现已创建并启动。
2.Docker 文件
Docker可以通过读取-----103-----的指令来自动构建镜像。 -----103----- 是一个文本文档,其中包含用户可以在命令行上调用来组装图像的所有命令。
所以,我们的第一个问题很简单。什么是 Dockerfile? Docker 使用它来构建镜像本身。 Dockerfile 本质上是如何创建镜像的构建指令。
与简单存储二进制映像相比,Dockerfile 的优点是自动构建将确保您拥有可用的最新版本。从安全角度来看这是一件好事,因为您希望确保没有安装任何易受攻击的软件。
常用 Docker 文件命令
您可以在下面找到一些最常用的 docker 命令。请注意,所有 docker 命令都必须大写字母。
从
第一个是 FROM 命令,它告诉您映像基于什么。正是这种多层方法使得 Docker 如此高效和强大。在本例中,使用了 iris-community Docker 映像,它再次引用 Dockerfile 来自动化构建过程。
FROM intersystemsdc/iris-community
DockerfileDockerfile
工作目录
该命令用于设置一个工作目录,我们将在其中复制文件。
例如,下面提到的命令将设置 /opt/irisbuild 作为工作目录:
WORKDIR /opt/irisbuild
DockerfileDockerfile
复制
COPY 命令就像听起来一样简单。它可以将文件复制到容器中。
通常,我们复制自定义配置文件、应用程序源文件、数据文件等。
#coping Installer.cls to a root of workdir. Don't miss the dot, here. COPY Installer.cls . #copy source files from src folder to src folder in workdir in the docker container. COPY src src #copy source files from data/fhir folder to fhirdata folder in the docker container. COPY data/fhir fhirdata
DockerfileDockerfile
环境电压
这会设置环境变量,这些变量可以在 Dockerfile 及其调用的任何脚本中使用。
-----105-----指令将环境变量-----106-----定义为值-----107-----
ENV USER_ID "SYSTEM" ENV USER_PASSWORD "MANAGER"
DockerfileDockerfile
跑步
-----108-----命令用于在镜像构建过程中执行命令。
#here we give the rights to irisowner user and group which are run IRIS. RUN chown ${ISC_PACKAGE_MGRUSER} : ${ISC_PACKAGE_IRISGROUP} /opt/irisapp #start IRIS and run script in iris.script file RUN iris start IRIS \ && iris session IRIS < /tmp/iris.script
DockerfileDockerfile
用户
默认情况下,容器以 root 身份运行,这使它们能够完全控制主机系统。随着容器技术的成熟,可能会出现更安全的默认选项。目前,要求 root 对其他人来说是危险的,并且可能不适用于所有环境。您的映像应使用 -----109----- 指令来指定容器运行的非 root用户。如果您的软件没有创建自己的用户,您可以在 Dockerfile 中创建用户和组。
#here we switch user to a root to create a folder and copy files in docker. USER root WORKDIR /opt/irisapp #switching user from root to irisowner, to copy files USER irisowner COPY src src
DockerfileDockerfile
更多细节请阅读Docker官方文档
3.Docker卷
Docker卷是一个完全由Docker管理的独立文件系统。它作为标准文件或目录存在于数据保存的主机上。
使用 Docker 卷的目的是将数据保留在容器外部,以便可用于备份或共享。
Docker 卷依赖于 Docker 的文件系统,是 Docker 容器和服务保存数据的首选方法。当容器启动时,Docker 会加载只读镜像层,在镜像堆栈顶部添加读写层,并将卷挂载到容器文件系统上。
我们使用 -----110----- 或 -----111----- 标志来允许我们将本地文件挂载到容器中。
卷是保存 Docker 容器生成和使用的数据的首选机制。虽然绑定挂载取决于主机的目录结构和操作系统,但卷完全由 Docker 管理。与绑定挂载相比,卷有几个优点:
- 卷比绑定安装更容易备份或迁移。
- 您可以使用 Docker CLI 命令或 Docker API 管理卷。
- 卷适用于 Linux 和 Windows 容器。
- 卷可以在多个容器之间更安全地共享。
- 卷驱动程序允许您将卷存储在远程主机或云提供商上,以加密卷的内容或添加其他功能。
- 新卷的内容可以由容器预先填充。
- Docker Desktop 上的卷比 Mac 和 Windows 主机上的绑定挂载具有更高的性能。
此外,卷通常是比将数据保留在容器的可写层中更好的选择,因为卷在使用时不会增加容器的大小。此外,卷的内容存在于给定容器的生命周期之外。
我们可以在 docker-compose 文件的 services 部分下提及卷。
#specify docker-compose version version: '3.6' #services/container details services: #Name of the container iris: #Base Image image: intersystemsdc/iris-community #set restart option restart: always #port mapping ports: - 55036 :1972 - 55037 :52773 - 53773 :53773 #create a volume volumes: - ./:/irisdev/app
YAMLYAML
我们已经创建了 irisdev/app 卷。
概括
Docker 是一个功能强大的工具,允许开发人员和 IT 团队在容器化环境中创建、部署和运行应用程序。通过提供可移植性、一致性、可扩展性、资源效率和安全性,Docker 可以轻松地跨不同环境和基础设施部署应用程序。随着容器化的日益普及,Docker正在成为现代软件开发和部署的重要工具。
在本文中,我们学习了如何使用 Docker compose(一个 YAML 文件,指定应用程序中每个容器的配置选项)、Docker 文件(用于构建 Docker 镜像)和 Docker 卷(一种用于共享数据的持久数据存储机制) Docker 容器和主机之间的数据。)
感谢您的阅读!