Docker运行nodejs及调试

Docker运行nodejs及调试,第1张

首先在项目根目录下添加Dockerfile文件(这里我选用的是简单地nestjs作为例子)

在项目根目录下添加docker-composeyml

在项目根目录下添加nodemon-docker-debugjson

在packagejson中加入docker运行命定及nodejs debug命定

1首先运行yarn docker(npm run docker)来构建及运行docker 容器
1项目根目录下新建vscode文件夹,在vscode文件夹下添加launchjson

注意这里的port一定要与你docker-composeyml设置的debug port保持一致

运行vscode调试工具,如果能够成功连接到docker中的程序,可以在container logs 中看到连接成功的log

接下来尝试断点调试

原文链接 >步骤一 - 创建Dockerfile
如下的Dockerfile可以满足以上的要求:
FROM golang:16
# Install beego and the bee dev tool
RUN go get githubcom/astaxie/beego && go get githubcom/beego/bee
# Expose the application on port 8080
EXPOSE 8080
# Set the entry point of the container to the bee command that runs the
# application and watches for changes
CMD ["bee", "run"]
第一行,
FROM golang:16
将Go的官方映像文件作为基础映像。该映像文件预安装了 Go 16 该映像已经把 $GOPATH 的值设置到了 /go 。所有安装在 /go/src 中的包将能够被go命令访问。
第二行,
RUN go get githubcom/astaxie/beego && go get githubcom/beego/bee
安装 beego 包和 bee 工具。 beego 包将在应用程序中使用。 bee 工具用语在开发中再现地重新加载咱们的代码。
第三行,
EXPOSE 8080
在开发主机上利用容器为应用程序开放8080端口。
最后一行,
CMD ["bee", "run"]
使用bee命令启动应用程序的在线重新加载。
步骤二 - 构建image
一旦创建了Docker file,运行如下的命令来创建image:
docker build -t ma-image
执行以上的命令将创建名为ma-image的image。该image现在可以用于使用该应用程序的任何人。这将确保这个团队能够使用一个统一的开发环境。
为了查看自己的系统上的image列表,运行如下的命令:
docker images
这行该命令将输出与以下类似的内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
ma-image latest 8d53aa0dd0cb 31 seconds ago 7847 MB
golang 16 22a6ecf1f7cc 5 days ago 7439 MB
注意image的确切名字和编号可能不同,但是,应该至少看到列表中有 golang 和 ma-image image。
步骤三 - 运行容器
一旦 ma-image 已经完成,可以使用以下的命令启动一个容器:
docker run -it --rm --name ma-instance -p 8080:8080 \
-v /app/MathApp:/go/src/MathApp -w /go/src/MathApp ma-image
让咱们分析一下上面的命令来看看它做了什么。
。docker run命令用于从一个image上启动一个容器
。-it 标签以交互的方式启动容器
。--rm 标签在容器关闭后将会将其清除
。--name ma-instance 将容器命名为ma-instance
。-p 8080:8080 标签允许通过8080端口访问该容器
。-v /app/MathApp:/go/src/MathApp更复杂一些。它将主机的/app/MathApp映射到容器中的/go/src/MathApp。这将使得开发文件在容器的内部和外部都可以访问。
。ma-image 部分声明了用于容器的image。
执行以上的命令将启动Docker容器。该容器为自己的应用程序开发了8080端口。无论何时做了变更,它都将自动地重构自己的应用程序。自己将在console(控制台)上看到以下的输出:
bee :141
beego :161
Go :go version go16 linux/amd64
2016/04/10 13:04:15 [INFO] Uses 'MathApp' as 'appname'
2016/04/10 13:04:15 [INFO] Initializing watcher
2016/04/10 13:04:15 [TRAC] Directory(/go/src/MathApp)
2016/04/10 13:04:15 [INFO] Start building
2016/04/10 13:04:18 [SUCC] Build was successful
2016/04/10 13:04:18 [INFO] Restarting MathApp
2016/04/10 13:04:18 [INFO] /MathApp is running
2016/04/10 13:04:18 [asm_amd64s:1998][I] >Docker镜像

镜像仓库(Repository)用于存放镜像,每个仓库都有唯一的地址,和网址类似。镜像仓库托管在某个 Registry,Registry 和GitHub类似。Docker 提供了一个官方的 Registry,官方 Registry 里的镜像仓库地址可以省去前面的域名前缀,其它 Registry 里的镜像仓库地址必须要指定域名前缀,以保证唯一性。

镜像仓库地址后面可以跟一个 TAG。比如一个镜像名称 ubuntu:1404 ,冒号前面的 ubuntu 是镜像仓库地址(由于是官方 Registry 里的,可以省略域名前缀),后面的 1404 是 TAG,TAG 通常设置为镜像的版本号。

Docker 镜像是分层存储的,每一个镜像都由多层组成。镜像之间会共享一些相同的层,从而减小镜像占用的存储空间。

也可以查看指定的镜像:

查看镜像的详细信息

比较常用的配置参数为 -a ,代表下载仓库中所有 TAG 的镜像,默认只下载 latest TAG 的镜像。

如果要下载 ubuntu:1404 镜像,可使用如下命令:

对于我们 pull 的新镜像 ubuntu:1404 来说,如果我们需要对其进行更新,可以创建一个容器,在容器中进行修改,然后将修改提交到一个新的镜像中。

提交修改使用如下命令:

该命令从一个修改过的容器创建一个新的镜像。例如,我们运行一个容器,然后在其中创建一个文件,最后使用 commit 命令:

通过上述 *** 作我们创建了一个新的镜像,但是本方法不推荐在生产环境使用,因为这种方式的可维护性很差。推荐的创建镜像的方法是使用 Dockerfile ,修改镜像可通过修改 Dockerfile ,然后使用新的 Dockerfile 来构建新的镜像。

docker 可以从一个 Dockerfile 文件中读取指令来构建镜像。 Dockerfile 是一个包含用户构建镜像所需命令的文本文件。在 创建好该文件后,我们可以使用如下命令来构建镜像:

对于一个 Dockerfile 文件内容来说,基本语法格式如下所示:

使用 # 号作为注释,指令( INSTRUCTION )不区分大小写,但是为了可读性,一般将其大写。 Dockerfile 中的指令一般包含下面几个部分:

下面是一个最基本的 Dockerfile :

通过阅读上述内容中我们熟悉的一些 linux 指令,可以很容易的知道该 Dockerfile 将创建一个 apache 镜像。

其中 FROM 指定基础镜像。 RUN 命令默认使用 /bin/sh ,并使用 root 权限执行。 CMD 命令也是默认在 /bin/sh 中执行,但是只能有一条 CMD 指令,如果有多条则只有最后一条会被执行。

下面我们创建一个空目录,在其中编辑 Dockerfile 文件,然后基于此文件构建一个新的镜像:

在构建完成后,我们可以使用该镜像启动一个容器来运行 apache 服务,运行如下命令:

此时,容器启动成功后,并且配置了端口映射,我们就可以通过本机的 8000 端口访问容器 hellodocker3 中的 apache 服务了。我们打开浏览器,输入 localhost:8000

删除 ubuntu:latest 镜像可以使用如下命令:

删除所有的镜像

Docker 是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、 Dockerfile等;Docker理念是将应用及依赖包打包到一个可移植的容器中,可发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序, 程序之间相互隔离;

容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的一个独立的进程,不占用其他任何可执行文件的内存,非常轻量、高效、快速。

虚拟机运行的是一个完成的 *** 作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

参考: >如何使用
Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk17:
docker build -t edwardsbean/centos6-jdk17
Dockerfile关键字
如何编写一个Dockerfile,格式如下:
# CommentINSTRUCTION arguments
FROM
基于哪个镜像
RUN
安装软件用
MAINTAINER
镜像创建者
CMD
container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD
CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:
Dockerfile:
CMD echo hello world
运行一下试试:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world
一旦命令匹配:
edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbean
hello edwardsbean
ENTRYPOINT
container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条
ENTRYPOINT没有CMD的可替换特性
USER
使用哪个用户跑container
如:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE
container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:
docker run -d -p 127001:33301:22 centos6-ssh
container ssh服务的22端口被映射到主机的33301端口
ENV
用来设置环境变量,比如:
ENV LANG en_USUTF-8
ENV LC_ALL en_USUTF-8
ADD
将文件<src>拷贝到container的文件系统对应的路径<dest>
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,则docker会帮忙解压缩
如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下
如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。比如:
docker build githubcom/creack/docker-firefox
docker-firefox目录下必须有Dockerfile和要ADD的文件
注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD
url file
ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。
VOLUME
可以将本地文件夹或者其他container的文件夹挂载到container中。
WORKDIR
切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效
ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

相关步骤说明如下
(1) 开发。根据需求开发应用程序。
(2) 编写Dockerfile文件,Dockerfile是由一系列命令和参数组成的脚本,用来构建Image。
(3) 创建自定义镜像,基于docker build 命令构建
(4) 定义docker-compse,用来定义和运行多个docker应用程序。
(5) 启动docker应用,docker run。
(6) 测试,基于容器进行厕所,随时部署或销毁。
(7) 部署或继续开发。

(1) FROM: 它妈是谁(基础镜像)
(2) RUN: 开始动起来(执行命令,可以多次)
(3) COPY: 复制文件目录
(4) ADD: COPY加强版,支持远程复制和解压
(5) WORKDIR: CD伪装者(设置当前工作目录)
(6) CMD: 执行配置命令,如果多个,仅仅执行最后一个
(7) ENTRYPOINT: 容器启动后执行
(8) ENV: 环境变量
(9) EXPOSE: 专业敲墙打洞(开放端口)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12952459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存