Docker从入门到精通

发布于:2024-05-10 ⋅ 阅读:(24) ⋅ 点赞:(0)

前言

今天跟大家分享一下我的docker学习历程,也算是我的独特的复习笔记,我会在这一篇中讲清楚docker几乎所有的功能。不过也是我第一次写,而且是一篇两万多字的长文,花了我半个月里所有的休闲娱乐时间,所以写的不好的地方请大家见谅,也请在评论区斧正,谢谢大家的理解。

一、简介

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统
docker官网https://www.docker.com
docker中文库:https://www.docker.org.cn/

二、Docker安装

centos7安装docker安装步骤

1.卸载旧版本

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

2.安装需要的软件包

sudo yum install -y yum-utils

3.设置stable镜像仓库

国外:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
国内:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.更新yum软件包索引

yum makecache fast

5.安装docker ce

默认版本:sudo yum install docker-ce docker-ce-cli containerd.io
最新版本:sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6.启动docker

sudo systemctl start docker

7.测试

docker -version

8.卸载

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

9.阿里云镜像加速

阿里云地址:https://cr.console.aliyun.com

  1. 注册一个属于自己的阿里云账户进入控制台点击左上角找到容器镜像服务找到镜像工具找到镜像加速器(每个账号都有一个镜像加速器可以用自己的也可以复制我下面的脚本配置镜像加速器)

  2. 粘贴脚本直接执行

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      	"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    

三、Docker常用命令

3.1帮助启动类命令

启动docker: systemctl start docker
停止docker: systemctl stop docker
重后docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
显示docker详细信息: docker version
查看docker命令帮助文档: docker 具体命令 --help
清理没有使用的数据,包括镜像数据,已经停止的容器,-a深度清理:docker system prune -a

3.2镜像命令

docker search [镜像名称]					在仓库中搜索镜像(--limit 5 redis 可只查询5个)
docker pull [镜像名称]						从仓库中拉取镜像
docker images								查看镜像列表
docker system df							查看docker容器资源占用情况
docker rmi [镜像名称|镜像ID]				删除单个镜像
docker rmi [镜像名称|完整镜像ID] :tag [镜像名称|完整镜像ID]			删除多个镜像
docker rmi $(docker images -qa)				删除全部镜像
docker tag  镜像名:版本   新镜像名:版本    #复制镜像并且修改名称
docker commit  -a "xxx"  -c "xxx" 镜像ID 名字:版本   #提交镜像 
	-a :提交的镜像作者;
	-c :使用Dockerfile指令来创建镜像;
	-m :提交时的说明文字;
docker load -i    /xxx/xxx.tar         #导入镜像
docker save -o   /xxx/xxx.tar          #保存一个镜像为一个tar包
docker rmi $(docker images | grep "none" | awk '{print $3}')        删除所有none镜像
docker rmi -f [镜像名称|镜像ID]				强制删除镜像
docker run -it [镜像名称|镜像ID]				启动交互式容器(前端有伪终端,等待交互, -i:以交互模式运行容器,通常与-t同时使用,-t:为容器重新分配一个伪输入终端,通常与-i同时使用)
docker run [镜像名称]						运行镜像

3.3容器命令

有镜像才能创建容器这是根本前提(下载一个centos或者ubuntu镜像演示)
	docker pull centos
	docker pull ubuntu
	本次演示用centos演示
新建+启动容器
	docker run [options]	 images	 [command] [arg...]	
	OPTIONS说明
	OPTIONS说明(常用) : 有些是一个减号,有些是两个减号
	--name="容器新名字”为容器指定一个名称:
	-c   后面跟待完成的命令
	-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
	-i: 以交互模式运行容器,通常与 -t 同时使用;
	-t: 为容器重新分配一个伪输入终端,通常与 i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);
	-P: 随机端口映射,大写P
	-p: 指定端口映射,小写p
	-v   给容器挂载存储卷

	#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
	docker run -it centos /bin/bash
	参数说明:
	-i: 交互式操作。
	-t: 终端。
	centos : centos 镜像。
	/bin/bash: 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是/bin/bash。]要退出终端,直接输入 exit

列出当前所有正在运行的容器
docker ps  [options]	
OPTIONS说明 (常用)
-a: 列出当前所有正在运行的容器+历史上运行过的
-l: 显示最近创建的容器。
-n: 显示最近n个创建的容器
-q: 静默模式,只显示容器编号
退出容器 
两种退出方式
exit  run进去容器,exit退出,容器停止
ctrl+p+q run进去容器,ctrl+p+q退出,容器不停止
启动已停止运行的容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或容器名
删除已停止的容器
docker rm [容器ID|容器名称]				#删除容器(正在运行容器不能删除,除非加-f选项)
docker rm -f [容器ID|容器名称]				强制删除容器
docker rm $(docker ps -qf status=created)						删除未启动成功的容器
docker rm $(docker ps -qf status=exited)							删除退出状态的容器
docker rm -f $(docker ps -a -q)				删除所有容器(${} 内的命令可灵活变换)
docker build  #创建镜像        -f:指定dockerfile文件路径   -t:镜像名字以及标签
docker rename 旧名字  新名字      # 给容器重新命名           
docker history   容器实例的ID    #查看docker镜像的变更历史
重要
有镜像才能创建容器,这是根本前提(下载一个Redis6.0.8镜像演示)

启动守护式容器(后台服务器)
	在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d指定容器的后台运行模式。
	docker run -d 容器名
	redis 前后台启动演示case
		前台交互式启动 docker run -it redis:6.0.8
		后台守护式启动 docker run -d redis:6.0.8
查看容器日志
	docker logs 容器ID
查看容器内运行的进程
	docker top  容器ID
查看容器内部细节
	docker inspect 容器ID
进入正在运行的容器并以命令行交互
	重新进入 docker exec -it 容器ID  /bin/bash
	重新进入 docker attach 容器ID
	上述两个区别
		attach 直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。
		exec 是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
	推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
从容器内拷贝文件到主机上
	docker cp 容器ID:容器内路径 目的主机路径
导入导出容器
	export 导出容器的内容流作为一个tar归档文件[对应import命令]
	import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
	案例
		docker export 容器ID > 文件名.tar 
		cat 文件名.tar | docker import- 镜像用户/镜像名:镜像版本号

四、Docker镜像

是什么

是一种轻量级、可执行的独立软传包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

docker镜像commit操作案例

docker commit 提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息"-a="作者"器ID 要创建的目标镜像名:[标签名]
案例演示ubuntu安装vim
		从Hub上下载ubuntu镜像到本地并成功运行
		原始的默认ubuntu镜像是不带着vim命令的
		外网连通的情况下,安装vim
		#先更新我们的包管理工具 apt-get update
		#然后安装我们需要的vim apt-get install vim
		安装完成后,commit我们自己的新镜像 
		docker commit  -m="vim cmd add ok" -a="zzyy" fcbfa3e8efc5 atguigu/myubuntu: 1.3

Docker 构建镜像(docker build)

典型用法		
	docker build  -t ImageName:TagName -f dir
			-t 给镜像加一个Tag
			ImageName 给镜像起的名称
			TagName 给镜像的Tag名
			-f 指定dockerfile文件路径
			Dir Dockerfile所在目录
例子
	docker build -t chinaskill-redis:v1.1 .
			chinaskill-redis 是镜像名
			v1.1 是 tag 标签
			. 表示当前目录,即Dockerfile所在目录

Docker save命令与Docker load命令

Docker save

docker save 命令用于将 Docker镜像 保存成 tar 包。docker save 命令的相对应的命令为 docker load。
docker save命令语法
	docker save -o  tar完整包名 镜像名称:版本号/镜像id
	docker save -o spdview.tar ahysf-docker.pkg.coding.net/ahsl/develop/spd-hisserview-ymf:latest

Docker load

docker load 命令用于从 tar 归档文件或者标准输入流载入镜像。docker load 命令的相对应的命令为 docker save。
docker load命令语法
	docker load -i tar完整包名
	docker load -i spdview.tar	

五、Docker容器数据卷

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法: 在挂载目录后多加一个–privileged=true参数即可

是什么

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系练,因此能够绕过Union File System提供
一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
一句话:有点类似我们Redis里面的rdb和aof文件
将docker容器内的数据保存进宿主机的磁盘中
运行一个带有容器卷存储功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

能干嘛

将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
特点:

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接实时生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止

数据卷案例

1.宿主vs容器之间映射添加容器卷

命令  docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

2.读写规则映射添加说明

读写(默认)
	docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
只读
	容器实例内部被限制,只能读取不能写 
	docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

3.卷的继承和共享

容器1完成和宿主机的映射
				
容器2继承容器1的卷规则
	docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu

六.Dockerfile

是什么

概述 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
官网 https://docs.docker.com/engine/reference/builder/
构建3步骤

  • 1.编写dockerfile文件
  • 2.docker build 命令构建镜像
  • 3.docker run 按照镜像运行容器实例

dockerfile构建过程解析

Dockerfile内容基础知识

  • 1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 2.指令按照从上到下,顺序执行
  • 3.#表示注释
  • 4:每条指令都会创建一个新的镜像层并对镜像进行提交

Docker执行Dockerfile的大致流程

  • (1)docker从基础镜像运行一个容器
  • (2)执行一条指令并对容器作出修改
  • (3)执行类似docker commit的操作提交一个新的镜像层
  • (4)docker再基于刚提交的镜像运行一个新容器
  • (5)执行dockerfile中的下一条指令直到所有指令都执行完成

DockerFile常用保留字指令

FROM
	基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER		
	镜像维护者的姓名和邮箱地址
RUN
	容器构建时需要运行的命令
	两种格式
				shell格式
					RUN <命令行命令>
					# <命令行命令>等同于,在终端操作的 shell 命令	
				exec格式
					RUN ["可执行文件",“参数1”,“参数2”]
					# 例如:
					# RUN ["./test.php","dev","offline"] 等价于 RUN ./test.php dev offline
	RUN是在 docker build时运行
EXPOST
	当前容器对外暴露出的端口
WORKDIR
	指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER
	指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV
	用来在构建镜像过程中设置环境变量
ADD
	将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
	类似ADD,拷贝文件和目录到镜像中。
	将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
			CORY src dest
			COPY["src""dest"]
			<src源路径>:源文件或者源目录
			<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
VOLUME
	容器数据卷,用于数据保存和持久化工作
CMD
	指定容器启动后要干的事情
	注意
		Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
	它和前面RUN命令的区别
		CMD是在docker run 时运行。
		RUN是在 docker build时运行。
				
				
ENTRYPOINT
		
	也是用来指定一个容器启动时要运行的命令
	类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖
	而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
	命令格式和案例说明 
		命令格式
		ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
		ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的CMD 等于是在给 ENTRYPOINT 传参。
		当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,
		他两个组合会变成<ENTRYPOINT>"<CMD>"
		案例
		假设已通过 Dockerfile 构建了 nginx:test 镜像:
		FROM nginx
		ENTRYPOINT ["nginx""-c”] # 定参
		CMD ["/etc/nginx/nginx.conf"] # 变参
	是否传参                            按照dockerfile编写执行                                    传参运行
	Docker命令                       docker run nginx:test			docker run nginx:test -c /etc/nginx/new.conf
	衍生出的实际命令               nginx -c /etc/nginx/nginx.conf		nginx -c  /etc/nginx/new.conf

七、Docker常规安装简介

  • 搜索镜像
  • 拉取镜像
  • 查看镜像
  • 启动镜像
  • 停止镜像
  • 移除容器

安装xxl-job

docker pull xuxueli/xxl-job-admin:2.1.1 拉取
docker images 查看镜像
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.42.111:3306/xxl_job?useUnicode=true&useSSL=false&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /dyh/xxl-job/logs:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:2.1.1
docker ps
http://192.168.42.111:8080/xxl-job-admin

安装mysql

docker search mysql 搜索
docker pull mysql 拉取
docker images 查看镜像
1.新建mysql容器
	挂载3个容器卷 -------- 解决删除容器后,里面的mysql数据依然能自动从宿主机容器卷加载
	docker run -p 3306:3306 --name mysql --restart=always --privileged=true -v /dyh/mysql/log:/var/log/mysql -v /dyh/mysql/data:/var/lib/mysql -v /dyh/mysql/conf:/etc/mysql -v /dyh/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456  -d mysql  启动mysql容器
	
	-p 3306:3306:指定宿主机端口与容器端口映射关系
	--name mysql:创建的容器名称
	--restart=always:总是跟随docker启动
	--privileged=true:获取宿主机root权限
	-v /dyh/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器
	-v /dyh/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器
	-v /dyh/mysql/conf:/etc/mysql:映射配置目录,宿主机:容器
	-v /dyh/mysql/mysql-files:/var/lib/mysql-files :映射文件目录,宿主机:容器
	-e MYSQL_ROOT_PASSWORD=123456:指定mysql环境变量,root用户的密码为123456
	-d mysql:latest:镜像名

docker ps
#解决编码问题
2.新建my.cnf文件 通过容器卷同步给mysql容器实例
	cd /dyh/mysql/conf
	vim my.cnf
		[client]
		default_character_set=utf8
		[mysqld]
		collation_server = utf8_general_ci
		character_set_server = utf8
		# 设置东八区时区
		default-time_zone = '+8:00'
		# 跳过密码验证
		skip-grant-tables
		# 设置密码验证规则,default_authentication_plugin参数已被废弃
		# 改为authentication_policy
		#default_authentication_plugin=mysql_native_password
		authentication_policy=mysql_native_password
3.重启mysql容器 
	docker restart 容器ID或者容器名
4.进入运行容器
	docker exec -it [CONTAINER ID]   /bin/bash 进入运行容器
	mysql -uroot -p	进入mysql
5.可能报错Access denied for user ‘root‘@‘localhost‘ (using password: YES)	
	1.跳过mysql登录验证(my.cnf加入skip-grant-tables跳过密码验证)
	2.进入mysql mysql -u root -p 执行 flush privileges(执行修改密码之前先刷新下权限,不然可能会提示在skip-grant-tables模式下无法修改密码)
	3.ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
	4.flush privileges;
	5.修改完成,这时就需要将我们在第一步添加的skip-grant-tables删除掉,然后在restart mysql容器一下,再次mysql -uroot -p	进入mysql就不会报错了

安装nginx

docker search nginx 搜索
docker pull nginx拉取	
docker images 查看镜像
随便启动一个 nginx 实例,只是为了复制出配置
	docker run -p 80:80 --name nginx -d nginx
	将容器内的配置文件拷贝到当前目录/dyh/nginx/conf:docker container cp nginx:/etc/nginx .
	终止原容器:docker stop nginx
	执行命令删除原容器:docker rm $ContainerId
新建nginx容器
docker run -p 80:80 --name nginx -v /dyh/nginx/html:/usr/share/nginx/html -v /dyh/nginx/logs:/var/log/nginx -v /dyh/nginx/conf:/etc/nginx -d nginx
-p 80:80:把容器内的80端口映射到宿主机80端口
--name nginx:创建的容器名称
--restart=always:总是跟随docker启动
--privileged=true:获取宿主机root权限
-v /dyh/nginx/html:/usr/share/nginx/html:把宿主机配置放到容器内的这个位置中
-d redis:镜像名

chmod -R 777 /opt/html/

安装redis

docker search redis 搜索
docker pull redis拉取	
docker images 查看镜像
1.copy redis.conf 模板在redis文件夹下通过容器卷同步给redis容器实例
	修改redis.conf文件   
	bind 127.0.0.1 #注释掉这部分,使redis可以外部访问
	daemonize no#用守护线程的方式启动
	requirepass 你的密码#给redis设置密码
	appendonly yes#redis持久化  默认是no
2.新建mysql容器
挂载2个容器卷 -------- 解决删除容器后,里面的redis数据依然能自动从宿主机容器卷加载
docker run -p 6379:6379 --name redis --restart=always --privileged=true  -v /dyh/redis/redis.conf:/etc/redis/redis.conf -v /dyh/redis/data:/data -d redis redis-server /etc/redis/redis.conf
		-p 6379:6379:把容器内的6379端口映射到宿主机6379端口
		--name redis:创建的容器名称
		--restart=always:总是跟随docker启动
		--privileged=true:获取宿主机root权限
		-v /dyh/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置中
		-v /dyh/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份
		-d redis:镜像名。
		redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动,加载容器内的conf文件,最终找到的是挂载的目录/data/redis/redis.conf
docker exec -it [CONTAINER ID]   /bin/bash
redis-cli -a 123456

安装nacos

docker search nacos 搜索
docker pull nacos拉取	
docker images 查看镜像
新建nacos容器
挂载2个容器卷 -------- 解决删除容器后,里面的redis数据依然能自动从宿主机容器卷加载
docker run --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true --restart=always -e MODE=standalone -e PREFER_HOST_MODE=hostname -e JVM_XMS=256m -e JVM_XMX=1024m -v /dyh/nacos/logs:/home/nacos/logs -v /dyh/nacos/conf/:/home/nacos/conf-d nacos/nacos-server
		-p 8848:8848 # 宿主机端口:容器端口
		--name nacos # 容器名字
		--privileged=true # 使用该参数,container内的root拥有真正的root权限
		--network host # 设置属于该容器的网络
		-e PREFER_HOST_MODE=hostname # 是否支持 hostname,可选参数为hostname/ip,默认值是当前宿主机的ip
		-e MODE=standalone # 使用 standalone模式(单机模式),MODE值有cluster模式/standalone模式两种
		-e JVM_XMS=256m # -Xms 为jvm启动时分配的内存[我设置会导致nacos启动异常,无法访问,故没有设置]
		-e JVM_XMX=1024m # -Xmx 为jvm运行过程中分配的最大内存[我设置会导致nacos启动异常,无法访问,故没有设置]
		-d nacos/nacos-server # 后台启动模式及使用的镜像
		-v /mydata/nacos/logs:/home/nacos/logs 挂载日志文件
		-v /dyh/nacos/conf/:/home/nacos/conf 挂载配置文件
		--restart=always:容器自动启动参数,其值可以为[no,on-failure,always]
			no为默认值,表示容器退出时,docker不自动重启容器
			on-failure表示,若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数,若超过指定次数未能启动容器则放弃
			always表示,只要容器退出,则docker将自动重启容器
修改宿主机配置文件vi /dyh/nacos/conf/application.properties 指定nacos配置持久化数据库
	创建nacos数据库及其相关表	https://gitee.com/mirrors/Nacos/blob/develop/distribution/conf/mysql-schema.sql
	重启docker restart nacos	
访问
	http://ip地址:8848/nacos/index.html
	默认账号:nacos
	默认密码:nacos

安装es以及kibana

es

docker search elasticsearch:7.4.2搜索
docker pull elasticsearch:7.4.2拉取	
docker images 查看镜像
chmod -R 777 /dyh/elasticsearch/ 保证权限
新建elasticsearch容器
挂载容器卷 -------- 解决删除容器后,里面的数据依然能自动从宿主机容器卷加载
	docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /dyh/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /dyh/elasticsearch/data:/usr/share/elasticsearch/data -v /dyh/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2
			-p 9200:9200 # 宿主机端口:容器端口
			--name elasticsearch # 容器名字
			-d elasticsearch:7.4.2# 后台启动模式及使用的镜像
			-v /dyh/elasticsearch/data:/usr/share/elasticsearch/data 挂载文件
		    -e ES_JAVA_OPTS="-Xms64m -Xmx256m"  测试环境下,设置 ES 的初始内存和最大内存,否则导致过大启动不了 ES
访问
http://ip地址:9200

kibana

docker search kibana:7.4.2搜索
docker pull kibana:7.4.2拉取	
docker images 查看镜像
新建kibana容器
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://虚拟机ip:9200 -p 5601:5601 -d kibana:7.4.2
访问
http://ip地址:5601

安装maven私服

docker search nexus 搜索
docker pull sonatype/nexus3拉取	
docker images 查看镜像
1.创建挂载目录		
mkdir -p /dyh/nexus3/nexus-data
chown -R 200 /dyh/nexus3/nexus-data
2.新建mysql容器
挂载2个容器卷 -------- 解决删除容器后,里面的nexus数据依然能自动从宿主机容器卷加载
docker run -tid -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus -v /dyh/nexus3/nexus-data:/nexus-data --privileged=true --restart=always  -d  sonatype/nexus3
	-p 8081:8081:把容器内的8081端口映射到宿主机8081端口
	--name nexus:创建的容器名称
	--restart=always:总是跟随docker启动
	--privileged=true:获取宿主机root权限
	-v /dyh/nexus3/nexus-data:/nexus-data:把宿主机配置好的nexus-data放到容器内的这个位置中
	-d sonatype/nexus3:镜像名。		
3.登录
访问http://ip:8081/nexus
账号:admin
密码:在容器中/nexus-data/admin.password中查看

安装rancher

docker search rancher/rancher:v2.5.2-linux-amd64搜索
docker pull rancher/rancher:v2.5.2-linux-amd64拉取	
docker images 查看镜像
1.创建挂载目录		
mkdir -p /dyh/rancher/rancher_data
2.新建mysql容器
挂载1个容器卷 -------- 解决删除容器后,里面的rancher数据依然能自动从宿主机容器卷加载
	docker run -d --privileged -p 80:80 -p 443:443 -v /dyh/rancher/rancher_data:/var/lib/rancher/ --restart=always --name rancher-v2.5.2 rancher/rancher:v2.5.2-linux-amd64
		-p 443:443:把容器内的443端口映射到宿主机443端口
		--name rancher-v2.5.2:创建的容器名称
		--restart=always:总是跟随docker启动
		--privileged=true:获取宿主机root权限
		-v /dyh/rancher/rancher_data:/var/lib/rancher/ :把宿主机配置好的/var/lib/rancher/ 放到容器内的这个位置中
		-d rancher/rancher:v2.5.2-linux-amd64:镜像名。		
3.登录
https://ip:443
				

网站公告

今日签到

点亮在社区的每一天
去签到