木灵鱼儿
阅读:947
docker 常用命令 作业
安装nginx
docker pull nginx
# 下载完成后运行
docker run -d --name nginx1 -p 8080:80 nginx # 后台运行,容器命名为nginx1,将容器的80映射到主机的8080端口
此时我们访问:localhost:8080
就能看到Welcome to nginx!页面
安装Tomcat
docker镜像里面的tomcat官方文档有这么一段命令:
docker run -it --rm tomcat:9.0
run可以直接自动下载对应的镜像,所以后面可以像pull
那样接tag;
-it
是交互,--rm
表示交互结束后,比如exit
退出后,容器就会自动删除,但是镜像会被保留
自己动手
docker pull tomcat # 拉取最新镜像
# 拉取完毕运行
docker run -d -p 8081:8080 --name tomcat1 tomcat:latest # 后台运行,将8080映射到8081,命名tomcat1,使用latest最新镜像(如果存在多个版本的情况下使用)
此时我们访问:localhost:8081
;可以看到是404页面
原因是因为阿里的镜像,他是最小化封装的,保证最小可运行的环境,所以系统相对应的会缺失一些命令和文件配置。
我们进入到tomcat1容器的webapps
目录下查看一下文件
PS C:\Users\13219> docker exec -it tomcat1 /bin/bash
root@101ee032df75:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
进入到容器后通过ls
发现有一个webapps
目录,这个就是tomcat的web目录,我们进入该目录。
root@101ee032df75:/usr/local/tomcat# cd webapps
root@101ee032df75:/usr/local/tomcat/webapps# ls # 通过ls发现这个用于存放web资源的目录是空的
root@101ee032df75:/usr/local/tomcat/webapps#
我们再进入到另一个目录webapps.dist
root@101ee032df75:/usr/local/tomcat/webapps# cd ../ # 返回上一级目录
root@101ee032df75:/usr/local/tomcat# cd webapps.dist # 进入
root@101ee032df75:/usr/local/tomcat/webapps.dist# ls # 查看文件列表
ROOT docs examples host-manager manager # 存在文件
也就是说官方把默认的web资源放在了webapps.dist
目录,我们只需要把这个目录下的文件复制到webapps目录下就能访问了。
root@101ee032df75:/usr/local/tomcat# cp -r webapps.dist/* webapps
实际上我们是在/usr/local/tomcat
系统目录下,将webapps.dist/*
下的所有文件复制到webapps
中就行了,再次刷新默认的web页面就出来了。
另一种复制方式,从webapps.dist
目录里直接复制到webapps
中
root@101ee032df75:/usr/local/tomcat# cd webapps.dist
root@101ee032df75:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@101ee032df75:/usr/local/tomcat/webapps.dist# cp -r * ../webapps
root@101ee032df75:/usr/local/tomcat/webapps.dist# cd ..
root@101ee032df75:/usr/local/tomcat# cd webapps
root@101ee032df75:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
部署elasticsearch+kibana
elasticsearch是一个免费开源搜索和分析引擎,但是本身是否浩内存,1g2g的内存完全没法正常使用,开启就会卡死。这也是后面需要处理的一个事情
在官方镜像仓库搜索后第一个官方镜像里有这么一段调用命令
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
其中--net
是处理网络,目前还没学,这段可以删掉,然后暴露了两个端口:9200、9300
,后面的-e
表示设置环境变量参数,大概意思是集群的配置,默认是一个单个节点,elasticsearch:tag
表示要启动elasticsearch,但是tag需要自己设置tag标签。
精简一下:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
版本号是教程提供的,照着整就完事了。
在配置低的vps上,我们会遇到以下问题:
- 暴露的端口比较多
- 十分耗内存
- es的数据一般需要放置到安全目录!挂载
- 网络配置?
这里我们了解一个命令:
docker stats [options] [容器id] # 查看cpu、内存等占用情况,可以看到es占用了差不多2g的内存
# 如果不给options和容器id默认是查看所有
docker stats
当我们运行后,可以访问:http://localhost:9200/
来判断es是否启动成功。
调整内存配置
通过-e
来配置内存大小,具体配置百度即可,大概是这么一段命令
docker run -d --name elasticsearch1 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms200m -Xmx400m" elasticsearch:7.6.2
注意name记得换一个,不能重名,重新运行生成的容器,内存就不会占用过大了。
可视化
portainer (先用这个)
目前2022年1月份portainer/portainer镜像停止维护,转战到portainer/portainer-ce
了,我们使用最新的。
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data cr.portainer.io/portainer/portainer-ce:2.9.3
--restart=always
暂时不管他的作用,-v
表示挂载卷,这个后面再讲,主要是运行可视化面板体验一下
可能还需要在运行前运行这个命令
docker volume create portainer_data
运行容器后通过:https://localhost:9443/
访问,注意一定得是https
。
访问成功后,页面一开始是让创建账号,创建成功后进入。
进入后可以选择是控制本地还是远程,一个是Local一个是Add Environments,我们控制本地,所以Local就行了,如果不小心点掉了网页,可以通过https://localhost:9443/#!/wizard
这个地址重新选择。
当然这个也不是很重要,也可以通过其他手段处理啥。
进入控制面板后自己摸索下就行了,很简单的,就是一个web版的docker管理后台,可以管理容器、镜像、卷、网络巴拉巴拉一堆,当然为了技术,还是少用一点,不然容易变傻(命令太多,不用就忘了)。
Rancher(CI/CD再用)
有机会再研究
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。
相关推荐
Nginx默认不支持带下划线的头信息
前言最近国庆了,由于主要计划被迫放弃,所以只能走点次要计划,就是将个人全栈开发的书签系统移动到其它服务器上,主要还是因为财力问题,无法供给多台服务器,腾讯云也没有什么好活动,全是老用户与狗不得参与系列。无奈的搬运,其中最简单的是项目打包带走,数据库的还原,站点的配置,其中我就遇到了个贼奇葩的问题,就是我的头信息总是获取不到。一开始我是以为是我的反代服务的问题,因为是nodejs的后端服务,如果想要通过域名访问api就不得不通过反代的方式来使用。反代是将a的请求接受后自己再发给真实服务,然后将真实服务的返回再返回给a,其中我们知道一个xhr请求是有很多参数的,其中header头信息也是一种...

docker 网络
在linux中输入 ip addr可以看到有三个网络配置:lo 127.0.0.1 # 本机回环地址eth0 172.17.90.138 # 阿里云的私有IPdocker0 172.18.0.1 # dockerdocker会自行创建一个类似路由器一样的网络处理层,所有启动的容器都会自动分配一个基于172.18.0.1的ip地址,也正因为如此,我们容器之间是可以相互ping通的,因为都在同一个网关下。但也仅限于利用ip地址进行通信。原理每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。这是个桥接网卡,使用了veth-pair技术! 每启动一个容器,linux主...

docker 本地保存和读取镜像
保存到本地docker save --help Usage: docker save [OPTIONS] IMAGE [IMAGE...] Save one or more images to a tar archive (streamed to STDOUT by default) Options: -o, --output string Write to a file, instead of STDOUT很简单的一个命令,只有一个-o表示镜像要输出的路径以及镜像名.tardocker images my-centos 1.0 fef5d23d0bd1 ...
docker 发布镜像
发布到DockerHub官方首先我们需要注册一个DockerHub的账号链接:https://hub.docker.com/signup注册完毕后我们本地登录PS C:\Users\13219\Desktop> docker login --help Log in to a Docker registry or cloud backend. If no registry server is specified, the default is defined by the daemon. Usage: docker login [OPTIONS] [SERVER] [flags...
docker dockerfile
什么是DockerFiledockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。构建步骤:编写DockerFile文件docker build 构建镜像docker run我们从docker的镜像页面点击版本号时,可以访问到github上dockerfile的文件。以centos为例,大概如下:FROM scratch ADD centos-7-x86_64-docker.tar.xz / LABEL \ org.label-schema.schema-version="1.0" \ org.label-schem...

docker 容器数据卷使用
什么是容器数据卷其作用就是方便容器与外部宿主机的文件交互,毕竟容器可以重启启动一个,但是数据只有一份啊,所以如果能将数据存在宿主机上,容器随便换,宿主机本身再定时备份,问题不就解决了。作用卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System , 提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。特点数据卷可在容器之间共享或重用数据卷中的更改可以直接生效数据卷中的更改不会包含在镜像的更新中数据卷的生命周期一直...
docker 打包镜像
打包命令docker commit # 这个和git的commit提交差不多 # 例子 docker commit -m="提交的描述信息" -a="作者" 提交的容器id 打包后的镜像名:tag版本号注意:实战测试以之前的Tomcat为例,默认情况下官方在webapps目录中是没有任何文件的,官方把默认的web文件放置在webapps.dist目录下,我们就可以把文件搬过来,生成一个自己的镜像。安装并搬运web文件docker pull tomcat # 下载完毕后运行 docker run -d -p 8080:8080 --name t...
docker 镜像讲解
整体文本引入b站UP主遇见狂神说的docker教程文档镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。镜像加载的原理UnionFS (联合文件系统)UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。...

docker 常用命令
帮助命令docker version #版本信息 docker info #更加详细的系统信息 docker 命令 --help #万能命令文档地址:官方命令文档镜像命令docker images #查看所有镜像后面还可以接一些可选项Name, shorthandDefaultDescription--all , -a Show all images (default hides intermediate images)--digests Show digests--filter , -f Filter output based on conditions provided-...
fetch和ajax获取不到头信息的解决办法
今天就遇到一个问题,后端从头信息给我携带了数据,我需要在请求头中获取,但是不管怎么get,返回的永远是null,但是f12去看响应头,那个数据就在那,亮瞎了眼。一个大大的问号?why???谷歌查了下原因,大概就两种:安全限制,不允许客户端获取部分头信息跨域了,对于跨域请求,客户端允许获取的response header字段只限于“simple response header”和“Access-Control-Expose-Headers” ,在“Access-Control-Allow-Headers”中加了无效说到底,还是后端的设置,如果是nigix可以参考下面的代码:以token头信...