❶ 编写前端开发环境的docker 镜像并发布及使用教程
如果之前没有接触过docker,建议把 https://docs.docker.com/get-started/ 中的part1-part10看完并实现一遍再来看本篇文章。
制作一个docker 镜像,其内置了Node v12.22、 npm源管理器nrm、单页面脚手架wlg-cli、多页面脚手架mp-cli-lc、browser-sync插件及curl、vim和git等,无需在主机中安装且这样统一了前端开发环境。
1、编写Dockerfile文件
2、构建镜像文件 docker image build -t front-end-env . (这里取镜像名称为front-end-env)
3、使用命令行登录docker docker login -u 你的docker用户名
4、打标签 docker tag front-end-env 你的docker用户名/front-end-env
5、 上传至仓库 docker push 你的docker用户名/front-end-env
1、使用如下指令进入docker容器内部
docker container run -p 3000:3000 -it 你的用户名/front-end-env /bin/bash
(-p 3000:3000将容器内的3000端口暴露给主机3000端口,下图中我没有加这个)
2、验证docker容器内部的nrm是否安装成功
上图,可以看到我们成功的将主机的当前目录及文件挂载绑定到docker容器内了,进入到docker容器内后我们创建一个文件夹,在主机也会同步的创建了相同的文件夹,因为此时他们是同步的。ps:如果使用vscode,可以试试Remote-Containers 插件,可以更简单。(本人没有亲测过)
题外话:
1、借助虚拟机和Vagrant也可以实现类似统一环境功能。
2、使用Docker Compose可以简化上述操作
推荐资料:
1、 https://wurang.net/webpack_hmr/
2、 https://juejin.cn/post/6932808129189150734
3、 https://www.cnblogs.com/pomelott/p/13325328.html
4、docker中的expose https://blog.csdn.net/weixin_43944305/article/details/103116557
❷ Docker实践之镜像启动及常用命令
前面简单的介绍了如何在linux中安装 Docker ,这节内容,我们学习Docker镜像启动
我们Docker启动镜像从哪里来呢?镜像由我们自己或者他人构建,构建好的镜像可以直接放在本地或者上传到远程镜像仓库。当我们运行一个Docker镜像时,会先在本地查找是否存在所要运行的镜像,如果没有则会去远程镜像仓库拉取,默认为官方的镜像仓库,当然,我们也可以改为自己的私有镜像仓库。接下来,我们先了解几个简单的命令。
我们直接在安装好Docker的主机上执行 docker run nginx
我们从运行日志可以看到这样的字眼:
docker发现本地不存在nginx的镜像文件,便直接去仓库中查找下载并运行,因为我们没有让镜像后台运行,所以这次运行起来的容器会随着这次远程连接断开而停止。当我按下 ctrl+c 时,容器便会停止
如果要让容器后台运行,则需要在启动时加 -d 这个参数,
我们来看一下当前运行中的容器
可以看到,我们的nginx是启动起来了,但是,我们并不能访问它。容器有自己的一套虚拟系统,如:网络、文件。如果我们需要访问,则需要给容器和宿主机做一个映射,让宿主机和容器能够交互。这里,我们就给nginx增加端口和配置文件映射。我为了省事,就直接把容器中的配置文件复制出来用
接下来,我们便来建立这个映射关系
来看看容器是否启动成功
这时候,我们便能访问我们的nginx服务,
前面已经说到,容器有自己的虚拟系统,如果需要持久化的数据不映射到宿主机上,那么当容器销毁时,数据也会随之丢失,所以,我们在用容器运行时,一定要做好数据的保存方式。
在前面,我们列出了几个常用的Docker命令,这里,我们把这几个常用命令稍微讲解一下,
ps主要是查询正常运行的容器
docker ps 是当前正在运行的容器
这里面的 CONTAINER ID 很重要,后面我们的很多操作都需要基于这个 CONTAINER ID 或者 NAMES 。
docker ps -a 则是列出运行中和停止中的所有容器,
这几个参数这是启动/停止/重启/删除容器的参数,如: docker restart 5ae0319e1795 ,如果要删除容器,必须要先停止,否则会提示
docker run [OPTIONS] IMAGE [COMMAND] [ARG…],它的运行参数就比较复杂了,
这里还是只介绍几个常用的命令参数吧,
运行示例 docker run -d --name nginx-cc -v /root/nginx/:/etc/nginx/ -p 9999:80 -m 256M nginx
cp命令主要是用于宿主机和容器间的文件复制,一般格式如下:
docker cp [OPTIONS] 容器名/容器Id:容器文件路径 宿主机文件路径 从容器复制到宿主机
docker cp [OPTIONS] 宿主机文件路径 容器名/容器Id:容器文件路径 从宿主机复制到容器中
inspect主要是查看容器或者镜像元数据,如:
从返回的信息中,我们可以得到,启动时所设置的启动参数。如:
如果,那天我们忘记之前容器启动的参数时,便可以通过 inspect 来帮我们找回来。
logs主要是查询docker容器的运行日志,如:
❸ docker build 命令
docker build 命令用于使用 Dockerfile 创建镜像。
语法 docker build [OPTIONS] PATH | URL | -
创建一个空dir,名为py:
编辑docketfile 和 requirement.txt
然后创建镜像
docker build -t myimage
OPTIONS说明:
--build-arg=[] : 设置镜像创建时的变量;
--cpu-shares : 设置 cpu 使用权重;
--cpu-period : 限制 CPU CFS周期;
--cpu-quota : 限制 CPU CFS配额;
--cpuset-cpus : 指定使用的CPU id;
--cpuset-mems : 指定使用的内存 id;
--disable-content-trust : 忽略校验,默认开启;
-f : 指定要使用的Dockerfile路径;
--force-rm : 设置镜像过程中删除中间容器;
--isolation : 使用容器隔离技术;
--label=[] : 设置镜像使用的元数据;
-m : 设置内存最大值;
--memory-swap : 设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache : 创建镜像的过程不使用缓存;
--pull : 尝试去更新镜像的新版本;
--quiet, -q : 安静模式,成功后只输出镜像 ID;
--rm : 设置镜像成功后删除中间容器;
--shm-size : 设置/dev/shm的大小,默认值是64M;
--ulimit : Ulimit配置。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式
实例
1. 使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
$ docker build -t runoob/ubuntu:v1 .
Question: 这是不是name: tag的形式????
2. 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
$ docker build github.com/creack/docker-firefox
3. 也可以通过 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:
$ docker build -t test/myapp .Sending build context to Docker daemon 2.048 kBError response from daemon: Unknown instruction: RUNCMD
❹ Docker镜像
1.像一个文件联合系统UnionFS,是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件
对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。
3.镜像分层的好处就是资源共享
列如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
4.docker 镜像都是只读的,当容器启动时,一个新的可写层会加载到镜像的顶部,这一层被称为容器层,容器层之下都称为镜像层。
5.镜像的构建可以通过 Dockfile 和docker commit 这两种方式
docker commit 方式是在一个镜像的基础上,重新对该镜像操作后重新生成的一个专属的镜像。
命令格式 docker commit -m "提交的描述信息" -a "作者信息" 容器ID 要创建的目标的镜像名:[标签名]
示例
❺ 查看Docker里的镜像信息
使用docker images 命令可以列出本地主机上已有镜像的基本信息。
REPOSITORY: 表示来自于哪个仓库。
TAG: 表示镜像的标签信息,标签只是标记,并不能标识镜像内容。
IMAGE ID: 镜像ID,镜像的唯一标识,如果两个镜像ID相同,则说明它们实际上指向了同一个镜像,只是具有不同标签名而已。
CREATED: 表示镜像最后的更新时间。
VIRTUAL SIZE: 表示镜像大小,好的镜像往往体积会较小。
为了方便在后续工作中使用特定镜像,还可以使用docker tag命令为本地镜像任意添加新的标签。
其中test_redis和redis镜像的ID号是相同的,其实对应的是同一个镜像,只是使用不同的标签而已。
使用inspect命令可以获取镜像的详细信息,包括制作者、适应架构、各层的数字摘要等。
命令的语法如下:
上面返回的是一个JSON格式的消息,如果只要其中某一项的内容时,可以使用-f来指定, 语法格式如下:
既然镜像文件由多个层组成,那么怎么才知道各层的内容具体是什么呢?这时候可以使用history子命令,该命令将列出各层的创建信息。
过长的命令被自动截断了,可以使用前面提到的--no-trunc 选项来输出完整命令。
❻ Docker 添加标签
可以使用 docker tag 命令,为本地镜像添加新的标签,如下图所示:
这里是为 mongo:4.1.6 镜像,添加新的镜像标签 mymongo ,可以看到,本地多了一个 mymongo:latest 的镜像。
事实上, mongo:4.1.6 和 mymongo:latest 的镜像 ID 是一模一样的,说明它们是同一个镜像,只是别名不同而已。
综上, docker tag 命令功能更像是为指定镜像添加快捷方式一样。
❼ docker 打包镜像命令
title: docker 打包镜像命令
date: 2020/02/20 14:52
1、在 docker 中添加 harbor(或者其他私服)的地址
2、登录远程仓库
3、拉取私服的镜像到本地仓库
4、查看镜像 id,并进行打包
5、 到需要部署的机器上,载入镜像
❽ 镜像(Image)
1.列出镜像列表
2.查找镜像
1.如果需要某个镜像时,可以从 Docker Hub 网站搜索镜像。
2.使用 docker search 命令搜索镜像。比如需要一个 httpd 镜像来用于构建 web 服务。可通过 docker search 搜索 httpd ,从而找到适合的镜像。
3.各字段含义如下:
3.删除镜像
使用 ubuntu 16.04 创建一个新容器,在该容器内运行 gcc -v 可查看 gcc 是否安装,查看 gcc 的版本号。
docker commit :从容器创建一个新的镜像
语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
(指定要创建的目标镜像名)
OPTIONS说明:
4.构建镜像
首先需要一个 Dockerfile 文件,其中包含一系列告诉 Docker 如何构建镜像的指令。
该Dockerfile文件位于 ~/course/docker/Dockerfile/ubuntu_gcc,使用命令 cd 切换到该目录, 通过命令 cat 查看 Dockerfile 内容。
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源。
第二条MAINTAINER,说明当前镜像的维护人的信息。
RUN 指令用于说明在构建 docker 镜像时执行哪些命令,例如安装哪些软件。
EXPOSE 指令说明开放哪些端口。
[图片上传中...(-94439e-1638445720289-0)]
docker build
命令用于使用 Dockerfile 创建镜像。
语法
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
5.设置镜像标签
可以使用 docker tag 命令,为镜像添加一个新的标签。
docker tag 命令的语法为:
docker tag <镜像ID> 新镜像名:新tag。
以httpd为例
docker cp /宿主机目录 容器id:/容器文件目录#将宿主机目录内容复制到容器内部目录
容器有一个比较麻烦的地方,就是每次重启之后会导致容器内的文件重置为初始化状态。所以我们还需要对容器内的文件进行持久化配置持久化配置有两种方法
方法一:直接复制。如docker cp 容器id:/etc/prometheus /zhao #将容器内部的文件复制到宿主机的/zhao文件夹下
方法二:docker run --name myprometheus -v /zhao/prometheus:/etc/prometheus -d 镜像id#其中-v是指映射逻辑卷的意思,将宿主机上的/zhao/prometheus里的文件和文件夹复制到容器的/etc/prometheus里。-d是指后台运行
❾ Docker镜像操作常用指令有哪些
docker version:查看docker版本;
docker info:查看docker详细信息;
docker --help:查看docker命令;
镜像命令
docker images:列出本地主机上的镜像,REPOSITORY:表示镜像的仓库源;TAG:镜像的标签;IMAGE
ID:镜像ID;CREATED:镜像创建时间;SIZE :镜像大小,同一个仓库源可以有多个TAG,可以表示仓库源的不同版本,使用REPOSITORY:TAG来定义不同的镜像;
docker images -a:列出本地所有的镜像;
docker images -p:只显示镜像ID;
docker images --digests:显示镜像的摘要信息;
docker images --no-trunc:显示完整的镜像信息;
docker search tomcat:从Docker Hub上查找tomcat镜像;
容器命令
docker run [OPTIONS] IMAGE:根据镜像新建并启动容器,IMAGE是镜像ID或镜像名称;
docker ps:列出当前所有正在运行的容器;
exit:退出并停止容器;
docker start 容器ID或容器名称:启动容器;
docker restart 容器ID或容器名称:重新启动容器;
docker stop 容器ID或容器名称:停止容器;
docker kill 容器ID或容器名称:强制停止容器;
docker rm 容器ID或容器名称:删除容器;
docker rm -f $(docker ps -a -q):删除多个容器。
❿ docker常用命令
帮助文档地址 https://docs.docker.com/engine/reference/commandline/commit/
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
①更新镜像
各个参数说明:
我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2
②构建镜像
创建一个 Dockerfile 文件
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
参数说明:
我们可以使用新的镜像来创建容器
从上面看到新镜像已经包含我们创建的用户 runoob。
我们可以使用 docker tag 命令,为镜像添加一个新的标签。
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。