1.Dockerfile 简介:
Docker file是一个包含用于构建镜像的命令脚本文件。 Docker通过读取Dockerfile中指令自动生成映像。
Docker build命令用于从Dockerfile构建映像。Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
2.主要构建流程:
1.编写一个dockerfile 文件。
2.通过docker build命令构建镜像,其中使用-f标志指向Dockerfile文件的路径。
3.通过docker run 直接使用镜像创建容器,并进行运行。或者先使用docker create,通过镜像创建容器,然后再通过docker start运行容器。
4.docker push 发布镜像(Docker Hub 、阿里云镜像仓库、或其他镜像仓库服务器)。
3.Docker基础指令:
3.1from命令:
设置基础镜像。所有 Dockerfile 都必须以 FROM 指令开始。
语法:FROM <image>[:<tag>] 或 FROM <image>@<digest>
如:FROM ubuntu:20.04
3.2run命令:
在镜像构建过程中执行命令,并生成一个新的镜像层。
语法:RUN <command> 或 RUN ["executable", "param1", "param2"](JSON 格式)
例如:RUN apt-get update && apt-get install -y curl
3.3cmd命令:
提供容器运行时默认执行的命令。Dockerfile 中只能有一个 CMD 指令,如果指定多个,只有最后一个生效。
语法:CMD ["executable","param1","param2"] 或 CMD command param1 param2
例如:
CMD ["echo", "Hello, World!"]
3.4label命令:
为镜像添加元数据。
语法:LABEL <key>=<value> <key>=<value> <key>=<value> ...
例如:LABEL maintainer="example@example.com"
3.5expose命令:
声明容器运行时要监听的端口,但不会自动发布端口。
语法:EXPOSE <port> [<port>/<protocol>...]
例如:EXPOSE 80 443
3.6env命令:
设置环境变量。
语法:ENV <key> <value> 或 ENV <key>=<value> ...
例如:ENV NODE_VERSION 14.17.0
3.7add命令:
将文件、目录或远程 URL 添加到镜像中,并自动解压压缩文件(如 .tar)。
语法:ADD <src>... <dest>
例如:ADD https://example.com/package.tar.gz /app/
3.8copy命令:
类似ADD,将文件或目录从构建上下文(Dockerfile 所在目录的路径)复制到镜像中。
语法:COPY <src>... <dest>
例如:COPY ./app /app
3.9entrypoint命令:
配置容器启动时运行的命令,使其可执行化,让容器以应用程序的方式运行。
语法:ENTRYPOINT ["executable", "param1", "param2"] 或 ENTRYPOINT command param1 param2
例如:ENTRYPOINT ["executable", "param1", "param2"]
3.10volume命令:
创建一个可以从本地主机或其他容器挂载的挂载点,一般用于存储数据库和需要保持的数据等。
语法:VOLUME ["/data"]
例如:VOLUME ["/var/lib/mysql"]
3.11user命令:
设置运行容器的用户。
语法:USER <username>[:<group>] 或 USER <UID>[:<GID>]
例如:USER nginx
3.12workdir命令:
为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。
语法:WORKDIR /path/to/workdir
例如:WORKDIR /app
3.13arg命令:
定义构建时变量,只在构建过程中有效。
语法:ARG <name>[=<default value>]
例如:ARG version=1.0
3.14#命令:
为 Dockerfile 中的注释。
4.基础练习:
在上次实验的CentOS-Stream-8-Docker虚拟机基础上,进行以下实验练习。
参考:基于VMware 和 Cent OS 的Docker Engine安装与配置-CSDN博客
4查看Docker运行状态。
service docker status
如图所示,表示docker没有正常启动。
2.docker没有正常启动,那么执行以下命令启动 Docker。
systemctl start docker
# 或者
sudo service docker start
# 设置docker开机自启动
systemctl enable docker
# 再次查看docker运行状态
service docker status
3. 准备工作目录,新建一个目录myUbuntuWork,并切换至该目录。
4.编写dockerfile。
在myUbuntuWork目录下,通过vim Dockerfile命令,编写dockerfile 文件并保存。
FROM ubuntu
ENTRYPOINT ["top","-b"]
CMD ["-c"]
5.通过docker build命令构建镜像。
docker build -t myubuntu -f Dockerfile .
其中:-t myubuntu指定自定义镜像的名字;
-f Dockerfile标志指向Dockerfile文件的路径;
.表示当前目录是构建上下文。
6.通过docker images查看构建生成的自定义镜像。
5.搭建自己的docker注册中心:
1.基于docker容器技术快速搭建自己的docker注册中心。
docker run -d -p 5000:5000 --restart=always --name myregistry -v /opt/data/registry:/var/lib/registry registry
2.通过以下命令测试自建registry注册中心的可用性.
curl http://127.0.0.1:5000/v2/_catalog
registry注册中心已经正常运行,只是还没任何镜像。
3.在将本地镜像上传发布到自建registry注册中心前,我需要对本地镜像针对自建的registry注册中心设置相应的标签。
docker tag myubuntu 127.0.0.1:5000/myubuntu
4.使用docker push命令,将本地镜像myubuntu上传发布到自建registry注册中心。
docker push 127.0.0.1:5000/myubuntu
5.通过以下命令查看确认发布到自建registry注册中心的myubuntu镜像。
curl http://127.0.0.1:5000/v2/_catalog
myubuntu镜像已经上传到了registry注册中心。
6.项目实战:
6.1准备项目源代码:
1.安装Git 客户端工具。
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
若实验环境中没有安装 Git 客户端,先执行进行安装。
yum install -y git
2. 创建项目工作目录。
mkdir bulletin && cd bulletin
3.克隆下载代码。
git clone https://github.com/docker-training/node-bulletin-board
如果无法下载,请尝试在C:\Windows\System32\drivers\etc目录下的host文件中添加以下配置。
140.82.113.3 github.com
如果仍然无法下载,请尝试更换服务器,使用以下地址进行克隆下载。
git clone https://gitee.com/hubin2020/node-bulletin-board.git
4.查看Dockerfile文件。
进入bulletin-board-app目录,查看Dockerfile文件。
其中:
npm install命令用于下载安装项目打包配置文件package.json 中列出的所有依赖库。
npm start是npm的内置命令之一,用于启动项目。它会在项目的根目录下寻找package.json文件,并且在该文件中查找scripts字段中的start命令。如果找到了该命令,就会执行该命令来启动项目,否则会报错。
6.2构建镜像:
1.基于 Dockerfile 构建镜像。
docker build -t bulletinboard:1.0 .
2.通过docker images命令查看并确认我们刚刚构建的镜像bulletinboard:1.0。
6.3运行容器实例:
1.基于构建的镜像启动容器。
docker run --rm --publish 8000:8080 --detach --name bulletinboard bulletinboard:1.0
2.然后在浏览器中访问 http://127.0.0.1:8000 实际测试公告板应用程序。
6.4上传发布镜像:
1. 将本地镜像上传发布到自建registry注册中心前,我需要对本地镜像针对自建的registry注册中心设置相应的标签。
docker tag bulletinboard:1.0 127.0.0.1:5000/bulletinboard:1.0
2.使用docker push命令,将本地镜像myubuntu上传发布到自建registry注册中心。
docker push 127.0.0.1:5000/bulletinboard:1.0
3.通过以下命令查看确认发布到自建registry注册中心的myubuntu镜像。
curl http://127.0.0.1:5000/v2/_catalog
bulletinboard:1.0镜像已经发布上传到了registry注册中心。